Resque vs Sidekiq?

133

我目前在使用Resque作为我的后台处理程序,但最近听到了很多关于Sidekiq的喧嚣声。有人可以进行比较/区分吗?

特别是我想知道是否有一种编程方式来监视Sidekiq中的作业是否已完成。


Ryan本周为Sidekiq创建了一个网络广播,其中还包括与Resque的一些比较。你可能想要查看它:网址: http://railscasts.com/episodes/366-sidekiq - Firoz Ansari
74
很高兴看到这个问题并没有被关闭为“不适合在SO上提问”。我感到很兴奋。 - Dogweather
54
请大家不要再关闭所有好的问题了。我知道这可能比较宽泛,但这也非常重要和有趣。 - superluminary
21
总有一天,他们会发明一个网站,程序员可以在上面提问,并且该网站将允许主观回答。这些问题可能会被忽略,甚至根据相关性进行投票。 - baash05
4
@baash05提到的将会被称为Quora! - nakhli
6
它将被称为“雅虎问答”,但质量会急剧下降。 - halfer
2个回答

135

Resque:

优点:

缺点:

  • 每个 worker 都会启动一个进程(占用更多内存);
  • 默认情况下不支持重试任务。

Sidekiq:

优点:

  • 每个 worker 都会启动一个线程(占用更少内存);
  • 较少的派生过程(执行速度更快);
  • 提供更多选项。

缺点:

  • [巨大] 要求您的代码和 所有依赖项 均具备线程安全性。如果您在线程中运行不安全的代码,则可能会遇到麻烦;
  • 在某些 Ruby 上运行得比其他 Ruby 更好(推荐使用 jruby,在 MRI 上效率降低因为 GVL(全局 VM 锁)的缘故)。

21
如何确定你是否正在运行“线程不安全的代码”? - Dogweather
4
例如,如果您正在全局变量中存储状态,那么就会出问题 :) 至于宝石(gems),这里有一些在维基上 - Sergio Tulentsev
25
您错了。 GVL与您的Ruby代码的线程安全性无关。 GVL涉及Ruby解释器代码(MRI C代码)的线程安全性。 - radarek
2
我必须反驳关于Resque的“您可以使用任何Ruby”这一“专业人士”的说法。今天的Resque README实际上是这样说的:“我们很乐意支持非MRI Rubies,但它们可能会有错误。” https://github.com/resque/resque/blob/master/README.md#requirements - JellicleCat
2
如果你计划在作业中使用therubyracer运行JavaScript,我会特别避免使用Sidekiq。这不是Sidekiq本身的问题,而是多线程对therubyracer造成了问题。请参见https://github.com/cowboyd/therubyracer/issues/206。 - Jeremy Burton
显示剩余7条评论

10

从问题来看:

特别是我想知道是否有一种编程方式可以监视任务是否在Sidekiq中完成

这里提供了一个解决方案:

  1. Sidekiq::Status gem
  2. Batch API (Sidekiq Pro) - 用法

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接