私のプロジェクトでは、Rails2 と 3 のcollectiveidea/delayed_jobで非常に快適に感じるでしょう。beanstalkd は知りませんが、すぐに試してみます :-)。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 億のジョブを処理しました。
次の場合は Resque を選択します。
- 複数のキューが必要です
- 数値の優先度は気にしない / 嫌い
- すべての 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
良い1日を!
PS resque、Delayed Job (改訂版)、BeanstakldについてはRailsCastがあります。見てください!
PPS 私のお気に入りの選択肢はSidekiq です(非常にシンプルで、高速で、単純なジョブには効率的です) 。比較のためにこのページをご覧ください。