私の Heroku Rails アプリは、頻繁に変更されるキーワードの大規模なリストを保持しています。
このキーワードのリストを均等に分割し、再起動されるまで作業する N 個の量のワーカーを生成したいと考えています (キーワードのリストが変更されるたびに再起動します)。再開すると、彼らは再びキーワードを分割して離れていきます。
例: 1,000 個のキーワードがあるとします。
- ワーカーを 1 つ生成すると、そのワーカーは 1,000 個のキーワードを受け取ります。
- 10 個のワーカーを生成すると、各ワーカーは 100 個のキーワードを受け取ります。
- 1,000 個のワーカーを生成すると、各ワーカーは 1 つのキーワードを受け取ります。
ワーカーは基本的に、一連のキーワードについて Twitter との接続を開き、それらのキーワードに一致する受信ツイートを処理するだけです。
Profile を設定し、N 個のワーカー間で X キーワードを委任する方法についてのアイデアはありますか?
これは、デモンストレーションのためだけの単純な/疑似手動アプローチです。ただし、キーワードを自動的に分割する任意の数のワーカーを生成できるようにしたいと考えています。
プロファイル:
keywordstreamer0: bundle exec ruby keyword_streamer.rb 0
keywordstreamer1: bundle exec ruby keyword_streamer.rb 1
keyword_streamer.rb
streamer_id = ARGV.shift # 0 or 1
# Split all keywords into array of two groups and take the group
# that matches this worker id (so the two workers take different groups)
keywords = Keyword.all.split_into_groups_of(2)[streamer_id]
# Example work loop
TwitterStream.track(keywords).each do |incoming_tweet|
process(incoming_tweet)
end
次に、私のアプリで、キーワード ワーカーを再起動する必要がある場合:
["keywordstreamer0", "keywordstreamer1"].each do |streamer|
restart(streamer)
end
代わりに、これらのワーカーを N 個生成できるようにしたいのですが、ソリューションを分割するのに苦労しています。高レベルの概要の提案をいただければ幸いです。