Open u1-liquid opened 10 months ago
とても個人的な観点のPros & Cons
この場合、既存のSingle-Node RedisではなくCluster構成に対応させることにする
RabbitMQ良さそう
実装の方針
BullMQが重い理由引用
ジョブキューの時間計算量が実行中(待機中ではない)のジョブの数に比例するという性能特性があり、かつ時間計算量がタイムアウトの閾値を超えるとジョブの完了処理がコケるようになり、原理的に2度と状況が改善方向に向かうことはないという性能劣化の正帰還ができあがっていた(ので、全部一度引っこ抜いて待機列に詰め直した) https://misskey.io/notes/9o4bl4yw9bpv0djx
具体的にはこの一行の時間計算量が active リスト(実行中のジョブリスト)の要素数に比例してます。完了したジョブをリストから取り除く処理なんだけれど、増えた待機ジョブに対応してワーカーを増やしまくるなどして実行中のジョブがひとたび急増すると、ここの処理が激重になり、タイムアウトするようになり、つまりジョブは2度と完了せず、不幸が訪れる。ジョブに増加に対応しようとして逆に首が締まる最悪のループに入るわけです。 https://misskey.io/notes/9o4c09uu3gov0eia
結論としては詰め直せばええ https://misskey.io/notes/9o4bn9k6vhcm0ddf
もっと正確には、Redisベースのキューをやめる (負荷に耐えられないので)
前提
案