私は4つの "スレーブ"と共に "マスター"サーバを稼働させています。各リクエストに応じてレールからデータベースからユニークなアイテムを提供する方法
マスターは、レールアプリケーションサーバーを実行するhttpで、スレーブはスクリプトを実行するec2インスタンスです。
スレーブはマスターにhttp要求を送信します。この要求に対して、マスターはデータベース内の項目のjsonクエリで応答します。 要求が提供される前に、マスタは、項目が再び配信されないように、-sent-というフィールドを "TRUE"に設定することになっています。
ステップ:
- リクエストを受信します。
- データベースから項目を検索します。
- フィールドをに設定してください。
- データベースアイテムのJSONを送信します。
問題
私はデータを提供していますが、時々同じことが、同時に2つのスレーブに提供されていることを、スクリプトのシェル出力に表示されます。ビューで
class Places < ActiveRecord::Base
def sentout
self.update_attributes(:sent => "True")
end
def self.worker
@a = Places.select("id,address,city").where("sent is null").first
@a.sentout
return @a.to_json
end
end
、これは何が起こるかです:
def index
@a = Places.worker
render :json => @a
end
これによると、関係なく、私が処理するデータを求めてきたどのように多くの奴隷は、UNIQUEデータを乱発してはなりません(送信されたフィールドは ""です)、2つのスクリプトの出力に同じ項目があります。つまり、スレーブマシンが同じことを2回処理することがあります。
これは、この問題にアプローチする正しい方法ですか?私はこれに新しいです、そして最も論理的なアプローチを試みています。
私はこれを私自身で解決しようとするどんな助けもありがとう。
あなたが提案した変更を行いました。私はまだ重複を見ている。 残りのコードは、私が期待しているように見えますか? – BriteLite