对于我的项目,我会对 rails2 和 3 中的collectiveidea/delayed_job感到非常舒服。我不知道beantalkd,但我会尽快尝试:-)。我已遵循 resque 文档中的建议。我会报告的。
Resque vs DelayedJob
Resque 与 DelayedJob 相比如何,您为什么会选择其中一个?
- Resque 支持多个队列
- DelayedJob 支持更细粒度的优先级
- Resque 工作人员对内存泄漏/膨胀具有弹性
- DelayedJob worker 极其简单易修改
- Resque 需要 Redis
- DelayedJob 需要 ActiveRecord
- Resque 只能将 JSONable Ruby 对象作为参数放在队列中
- DelayedJob 可以将任何 Ruby 对象作为参数放在其队列中
- Resque 包含一个 Sinatra 应用程序,用于监控正在发生的事情
- 如果要添加接口,可以从 Rails 应用程序中查询 DelayedJob
如果你在做 Rails 开发,你已经有一个数据库和 ActiveRecord。DelayedJob 非常容易设置并且效果很好。GitHub 使用它数月来处理近 2 亿个工作。
在以下情况下选择 Resque:
- 您需要多个队列
- 你不关心/不喜欢数字优先级
- 你不需要持久化每个 Ruby 对象
- 您可能有巨大的队列
- 你想看看发生了什么
- 你期待很多失败/混乱
- 您可以设置 Redis
- 您的 RAM 并没有短缺
如果出现以下情况,请选择 DelayedJob:
- 你喜欢数字优先级
- 你没有每天做大量的工作
- 您的队列保持小而灵活
- 没有很多失败/混乱
- 您想轻松地将任何东西扔到队列中
- 你不想设置 Redis
在以下情况下选择 Beanstalkd:
- 你喜欢数字优先级
- 你想要极快的队列
- 你不想浪费你的内存
- 你想服务大量的工作
- 您可以将队列上的 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 有一个关于resque、Delayed Job(修订版)和Beanstakld 的RailsCast。看一看!
PPS 我现在最喜欢的选择是Sidekiq(非常简单、快速、高效,适用于简单的工作),请查看此页面进行比较。