delayed_jobs vs resque vs beanstalkd?
这是我的需要:
- Enqueue_in(10.hours,…)(DJ语法是完美的)
- 乘员工,同时。 (resque或beanstalkd对此很好,但不是DJ)
- 必须每秒处理100个工作的推送和stream行。 (我将需要进行testing来确保,但我认为DJ无法处理这么多的工作)
resque和beanstalkd不会执行enqueue_in。
有一个插件(resque_scheduler)这样做,但我不确定它是多么稳定。
我们的环境是在亚马逊,他们推出了免费的豆杆,谁有亚马逊实例,这是我们的加,但我仍然不知道什么是最好的select在这里。
我们运行rails 2.3,但是我们很快将它加速到rails 3.0.3。
但是,我最好的select是什么? 我错过了另一个更好的工作吗?
我觉得我现在唯一的select是resque_scheduler。
编辑:
Sidekiq( https://github.com/mperham/sidekiq )是另一个选项,你应该检查出来。
对于我的项目,我会觉得在rails2和3中使用collectiveidea / delayed_job非常舒适。我不知道beanstalkd,但是我很快就会尝试:-)。 我已经遵循了复古文件中的build议。 我会报告。
Resque vs DelayedJob
Resque如何与DelayedJob比较,为什么你会select一个呢?
- Resque支持多个队列
- DelayedJob支持更细粒度的优先级
- Resque工作人员对内存泄漏/膨胀具有适应性
- DelayedJob工作人员非常简单,易于修改
- Resque需要Redis
- DelayedJob需要ActiveRecord
- Resque只能将JSONable Ruby对象作为参数放在队列中
- DelayedJob可以将任何Ruby对象放在队列中作为参数
- Resque包含一个Sinatra应用程序,用于监视正在发生的事情
- 如果你想添加一个接口,可以在你的Rails应用程序中查询DelayedJob
如果你正在做Rails开发,你已经有了一个数据库和ActiveRecord。 DelayedJob非常容易安装,并且工作得很好。 GitHub用了好几个月的时间来处理将近2亿个工作。
selectResque如果:
- 你需要多个队列
- 你不关心/不喜欢数字优先
- 你不需要永远坚持每一个Ruby对象
- 你有可能巨大的队列
- 你想看看发生了什么事
- 你期望很多失败/混乱
- 你可以设置Redis
- 内存不足
selectDelayedJob如果:
- 你喜欢数字优先
- 你每天都没有做大量的工作
- 你的队列保持小而灵活
- 没有太多的失败/混乱
- 你想轻松地把任何东西放在队列中
- 你不想安装Redis
selectBeanstalkd如果:
- 你喜欢数字优先
- 你想要非常快的队列
- 你不想浪费你的RAM
- 你想服务大量的工作
- 你可以用队列中的JSONable Ruby对象作为参数
- 你需要多个队列
Resque是一个“更好的”DelayedJob,所以确保你select最适合你的应用的工具。
排队后端速度的一个很好的比较 :
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 , 延迟作业 ( 修订版 )和Beanstakld的RailsCast 。 看一看!
PPS我最喜欢的菜单是现在Sidekiq (非常简单,快速和高效的简单工作),看看这个页面作比较。
亚马逊豆茎不Beanstalkd。
Beanstalkd – 队列 – 确实有延迟的作业,在给定秒数过去之前不会被保留在队列之外。 如果这就是Enqueue_in(10.hours, ... )
意思,那么这只是计算秒数的语法糖,而不是在此之前可用的工作。
请注意: delayed_job 3.0+支持命名队列
object.delay(:queue => 'tracking').method Delayed::Job.enqueue job, :queue => 'tracking' handle_asynchronously :tweet_later, :queue => 'tweets'