web-dev-qa-db-ja.com

delay_jobs vs resque vs beanstalkd?

私のニーズは次のとおりです。

  • Enqueue_in(10.hours、...)(DJ構文は完璧です。)
  • ワーカーを同時に増やします。 (Resqueまたはbeanstalkdはこれに適していますが、DJには適していません)
  • 1秒に100個のジョブのプッシュとポップを処理する必要があります。 (確認するためにテストを実行する必要がありますが、DJはこの多くの仕事を処理できないと思います)

Resqueとbeanstalkdはenqueue_inを実行しません。

それを行うプラグイン(resque_scheduler)がありますが、それがどれほど安定しているかはわかりません。

私たちの環境はAmazon上にあり、Amazonインスタンスを持っている人のために無料でbeanstalkdを展開しました。これは私たちにとってプラスですが、ここで何が最良の選択肢かはまだわかりません。

Rails 2.3を実行しますが、すぐにRails 3.0.3になります。

しかし、ここで私の最良の選択は何ですか?この仕事をより良くする別の宝石がありませんか?

現在実際に動作する唯一のオプションはresque_schedulerであると感じています。

編集:

Sidekiq( https://github.com/mperham/sidekiq )は、チェックアウトする必要がある別のオプションです。

64
rafamvc

私のプロジェクトでは、Rails2および3で collectiveidea/delayed_job と非常に快適に感じます。beanstalkdはわかりませんが、すぐに試してみます:-)。私はresqueドキュメントの提案に従いました。報告します。

Resque vs DelayedJob

ResqueはDelayedJobとどのように比較されますか?また、なぜ一方を選択するのですか?

  • Resqueは複数のキューをサポートします
  • DelayedJobはより詳細な優先度をサポートします
  • レスキューワーカーはメモリリーク/肥大化に強い
  • DelayedJobワーカーは非常にシンプルで簡単に変更できます
  • ResqueにはRedisが必要です
  • DelayedJobにはActiveRecordが必要です
  • ResqueはJSONable Rubyオブジェクトを引数としてキューに配置できます
  • DelayedJobは、任意のRubyオブジェクトを引数としてキューに配置できます
  • Resqueには、何が起こっているかを監視するためのSinatraアプリが含まれています
  • DelayedJobは、インターフェイスを追加する場合、Railsアプリ内から照会できます

Rails開発を行っている場合は、データベースとActiveRecordが既にあります。DelayedJobはセットアップが非常に簡単で、優れた機能を発揮します。

次の場合に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

ごきげんよう!

追伸 resque遅延ジョブ改訂版 )、および Beanstakld についてRailsCastがあります。ご覧ください!

P.P.S.私のお気に入りの選択肢は Sidekiq (単純なジョブには非常にシンプル、高速、効率的)です。比較のために このページ を見てください。

137
andrea

Amazon BeanstalkはBeanstalkdではありません。

Beanstalkd-キュー-遅延ジョブがあり、指定された秒数が経過するまでキューから予約されません。それがEnqueue_in(10.hours, ... )が意味するものである場合、秒数を計算するのは単なる構文上の砂糖であり、それまでジョブを使用可能にすることはありません。

8
Alister Bulman

ちょっとした注意: delayed_job 3.0 + は名前付きキューをサポートします

object.delay(:queue => 'tracking').method    
Delayed::Job.enqueue job, :queue => 'tracking'    
handle_asynchronously :Tweet_later, :queue => 'tweets'
8
altuure