delayed_jobs vs resque vs beanstalkd?
-
24-10-2019 - |
質問
これが私のニーズです:
- 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)チェックアウトする必要がある別のオプションです。
解決
私のプロジェクトでは、私はとても快適なベールを感じるでしょう collectiveidea/delayed_job Rails2と3では、BeanStalkdを知りませんが、すぐに試してみます:-)。 Resqueドキュメントで提案に従いました。報告します。
Resque vs DelayedJob
ResqueはDelayedJobとどのように比較されますか?また、なぜ1つを選択するのですか?
- Resqueは複数のキューをサポートしています
- DelayedJobは、より細かい粒度の優先順位をサポートします
- レシクワーカーは、メモリリーク /膨満感に復元されます
- 遅延ジョブワーカーは非常にシンプルで、変更が簡単です
- ResqueにはRedisが必要です
- delayedjobにはactiverecordが必要です
- ResqueはJSonable Rubyオブジェクトを引用としてキューに配置することしかできません
- delayedjobは、任意のルビーオブジェクトを引数に引数に配置できます
- Resqueには、何が起こっているかを監視するためのSinatraアプリが含まれています
- インターフェイスを追加する場合は、Railsアプリ内からDelayedJobをクエリすることができます
Rails開発を行っている場合、すでにデータベースとActiverCordがあります。 DelayedJobはセットアップが非常に簡単で、うまく機能します。 Githubはそれを何ヶ月も使用して、約2億人の雇用を処理しました。
リクを選択する場合は次のとおりです。
- 複数のキューが必要です
- 数値の優先順位を気にしない /嫌いではありません
- すべてのルビーオブジェクトを持続する必要はありません
- 潜在的に巨大なキューがあります
- あなたは何が起こっているのか見たいです
- あなたは多くの失敗 /カオスを期待しています
- Redisをセットアップできます
- あなたはラムで不足していません
delayedjobを選択してください。
- あなたは数値優先順位が好きです
- あなたは毎日巨大な量の仕事をしていません
- あなたのキューは小さく、機敏なままです
- あまり失敗 /カオスはありません
- キューに何かを簡単に投げたいです
- Redisをセットアップしたくありません
BeanStalkdを選択してください。
- あなたは数値優先順位が好きです
- 非常に速いキューが必要です
- あなたはあなたのラムを無駄にしたくありません
- あなたは多くの仕事に奉仕したいです
- あなたは引数としてキューにJSonable Rubyオブジェクトで大丈夫です
- 複数のキューが必要です
「より良い」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 Railscastについて リク, 仕事の遅れ (改訂版) と Beanstakld. 。見てください!
PPS私のお気に入りのチッシュは今です Sidekiq (非常にシンプルで、速く、単純な仕事のために効率的です)、 このページ 比較のために。
他のヒント
Amazon BeanStalkは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'