sidekiq在不止一个dyno上运行

时间:2014-05-13 14:40:03

标签: heroku sidekiq

目前我在heroku上的一个dyno上运行了一个sidekiq进程,它遍历表中的每个用户并使用gmail同步他们的邮件:

有些事情:

User.all do |user|
  # sync user's email
end

该过程每10分钟运行一次,但正如您所料,我们拥有的用户越多,同步所需的时间就越多,而且我们的用户希望能够快速查看邮件。

我们希望扩大并增加动力。

任何人都可以提出一种方法,我可以将工作分成2个dynos吗?

我是否应该在每个dyno上有一个单独的查询,将用户分成2个还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

您可以创建一个每10分钟运行一次的调度程序作业,并将所有用户排入队列:

User.find_each do |user|
  # put job for this user in redis or something
end
然后让你的工人不断获得新工作。然后,每个作业为单个用户提取/同步电子邮件,而不是“全部”。也请使用find_each,这样您就不会尝试将所有用户加载到内存中(http://guides.rubyonrails.org/active_record_querying.html#retrieving-multiple-objects-in-batches

这样的重新架构使得处理同步/获取更容易扩展,因为您可以添加新的工作器dynos来提高吞吐量。