小编典典

delay_jobs vs resque vs beanstalkd?

redis

这是我的需求:

  • Enqueue_in(10.hours,…)(DJ语法很完美。)
  • 同时增加工人。(Resque或beantalkd对此很有用,但DJ不好)
  • 必须每秒处理100个作业的推送和弹出。(我需要进行测试以确保,但我认为DJ无法处理这么多工作)

Resque和beantalkd不执行enqueue_in。

有一个插件(resque_scheduler)可以做到,但是我不确定它是否稳定。

我们的环境是在Amazon上,他们免费为那些拥有Amazon实例的人推出了beantalk,这对我们来说是一个加分,但我仍然不确定这里最好的选择是什么。

我们运行rails 2.3,但很快将其推向rails 3.0.3。

但是我在这里最好的选择是什么?我是否错过了另一个能做得更好的宝石?

我觉得现在唯一可以实际使用的选择是resque_scheduler。

编辑:

Sidekiq(https://github.com/mperham/sidekiq)是您应该检出的另一种选择。


阅读 265

收藏
2020-06-20

共1个答案

小编典典

对于我的项目,在rails2和3中,我对collectiveidea /
delayed_job
感到非常满意。我不知道豆荚缠豆,但我会尽快尝试:-)。我遵循了resque文档中的建议。我会报告。

Resque vs DelayedJob

Resque与DelayedJob相比如何?为什么选择一个而不是另一个?

  • Resque支持多个队列
  • DelayedJob支持更细粒度的优先级
  • Resque工作者可以抵抗内存泄漏/膨胀
  • DelayedJob工人非常简单,易于修改
  • Resque需要Redis
  • DelayedJob需要ActiveRecord
  • Resque只能将JSONable Ruby对象作为参数放在队列中
  • DelayedJob可以将任何Ruby对象作为参数放在其队列中
  • Resque包含一个Sinatra应用程序,用于监视发生的情况
  • 如果要添加界面,可以从Rails应用程序中查询DelayedJob

如果要进行Rails开发,则已经有一个数据库和ActiveRecord。DelayedJob超级容易设置,效果很好。GitHub用了几个月的时间来处理近2亿个工作。

如果满足以下条件,则选择“重新排序”

  • 您需要多个队列
  • 你不在乎/不喜欢数字优先级
  • 您不需要持久化每个Ruby对象
  • 您的队列可能很大
  • 你想看看发生了什么
  • 您期望很多失败/混乱
  • 您可以设置Redis
  • 您在RAM上没有不足

如果满足以下条件,则选择DelayedJob:

  • 您喜欢数字优先级
  • 您每天都不会做大量的工作
  • 您的队列很小且很灵活
  • 没有太多的失败/混乱
  • 您想轻松地将任何东西扔到队列中
  • 您不想设置Redis

如果满足以下条件,则选择Beanstalkd:

  • 您喜欢数字优先级
  • 您想要极快的排队
  • 你不想浪费你的RAM
  • 您想提供大量工作
  • 您可以将队列中的JSONable Ruby对象用作参数
  • 您需要多个队列

Resque绝不是“更好”的DelayedJob,因此请确保选择最适合您的应用程序的工具。

一个漂亮的排队后端速度的对比

                 enqueue                work
-------------------------------------------------
delayed job |   200 jobs/sec     120 jobs/sec
resque      |  3800 jobs/sec     300 jobs/sec
rabbitmq    |  2500 jobs/sec    1300 jobs/sec
beanstalk   |  9000 jobs/sec    5200 jobs/sec

祝你今天愉快!

PS有一个关于RailsCast
resque延迟工作修订版)和Beanstakld。看一看!

PPS我最喜欢的选择是Sidekiq(非常简单,快速且高效,适合简单工作),请查看此页面进行比较。

2020-06-20