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' 
Interesting Posts