64

これが私のニーズです:

  • 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 ) は、チェックアウトする必要がある別のオプションです。

4

3 に答える 3

137

私のプロジェクトでは、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 resqueDelayed Job (改訂版)、BeanstakldについてはRailsCastがあります。見てください!

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

于 2011-01-26T22:22:11.477 に答える
9

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

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

于 2011-01-26T22:25:42.423 に答える
8

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

object.delay(:queue => 'tracking').method    
Delayed::Job.enqueue job, :queue => 'tracking'    
handle_asynchronously :tweet_later, :queue => 'tweets'
于 2012-01-26T13:15:57.133 に答える