【发布时间】:2019-05-04 20:53:27
【问题描述】:
我们有与另一个应用程序同步的 rails 应用程序。它发生在后台。基本上,每次这项工作只是同步所有数据,所以目前它真的很慢,我们正在寻找通过使用并行性来加速这个过程。
目前基本上是这样的:
accounts.each { |a| sync_account(a) }
我们希望它看起来像这样:
accounts.each { |a| SyncAccountJob.perform_later(a) }
准确地说,我们想为此使用后台队列。对于初学者,我们希望每个帐户使用一项工作(我们有许多需要同步的帐户)。这里的问题是我们如何防止我们的队列多次获得同一个作业?
例如,如果我们有时在某些帐户尚未同步时每隔一小时安排一次作业,则会安排新作业(对不起,我的英语不好)。
你会怎么做?
我们认为我们应该在帐户表中保留已创建作业的 ID,并在再次调度之前检查该作业是否不存在。
另一个问题是我们使用什么系统:delayed_job(已经被邮件发送者使用)还是 sidekiq?
另一个问题:“僵尸”工作。例如,假设我安排了一些工作(delayed_job)并且工作人员开始处理它。现在它被锁定了。然后服务器崩溃了,所以作业仍然被锁定,但没有任何东西在处理它。 delay_job/sidekiq 自己解决这个问题还是我应该写一些更干净的?
我将不胜感激任何有关该主题的 cmets 或故事。
【问题讨论】:
-
Sidekiq Enterprise 具有“独特的工作”功能。
-
@SergioTulentsev 谢谢,我会调查的
标签: ruby-on-rails sidekiq delayed-job