我的 Heroku Rails 应用程序维护着大量频繁更改的关键字列表。
我想产生 N 数量的工人,它们将平均划分这个关键字列表并对其进行处理,直到它们重新启动(每次关键字列表更改时我都会重新启动它们)。一旦重新启动,他们就会再次划分关键字并流失。
例如:假设我有 1,000 个关键字。
- 如果我生成 1 个工人,该工人将接受 1,000 个关键字。
- 如果我产生 10 个工人,每个工人将使用 100 个关键字。
- 如果我产生 1,000 个工人,每个工人将使用 1 个关键字。
工作人员基本上只是为他们的一组关键字打开与 Twitter 的连接,并处理与这些关键字匹配的传入推文。
关于如何在 N 个工作人员之间设置 Procfile 和委托 X 关键字的任何想法?
这是一种天真的/伪手动方法,仅用于演示。但是,我希望能够产生任意数量的工人,它们会自动在它们之间分割关键字。
档案:
keywordstreamer0: bundle exec ruby keyword_streamer.rb 0
keywordstreamer1: bundle exec ruby keyword_streamer.rb 1
关键字流媒体.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 数量的这些工人,但我在分配解决方案时遇到了麻烦。我将不胜感激任何高级概述建议!