Resque VS Sidekiq
Rubyで非同期ジョブシステムといえば、
- Resque
- sidekiq
- Delayed::Job
あたりのソフトウェアがあり、Redisをバックエンドに使うResqueとSidekiqのみに言及します。
結論
動的キューを使ってスループットが必要ならSidekiqを使え。
https://techblog.zozo.com/entry/resque_to_sidekiq で述べられている通り、Sidekiqはスループットが高くてキューを動的に作成する環境ではSidekiqが向いています。
しかし、マルチスレッドなソフトウェアはRubyやgemのバージョンアップで稀に発生するエラーが生まれたり、特定のスレッドが死ぬと同じ空間にいるスレッドを巻き込んで死ぬ、ということが起こるので、
スレッドセーフな実装に自信がなく、原因を解析するスキルが開発チームにいない場合はソフトウェアが不安定を抱える可能性があります。
(Sidekiqに有償版があるらしくある程度はサポートしてくれそう)
一方のResqueは、2019年時点の最新バージョンでもキューの数が多い構成ではデキュー処理が非効率で本当に向いていません。
非効率の理由は前述のzozo記事で述べている通りです。(キュー自体が200個あったらジョブが見つかるまで最大200回Redisに問い合わせます。)
まとめ
お金を出してソフトウェアが安定する余地があるしスループットが高いのでSidekiqを使うほうがいいと思うけど、
デキューが非効率なだけなのでキューの数が少なくて安定したいならResqueでいいんでは。
以上。
-
category:
- ruby