MisskeyIO / misskey

🌎 A federated blogging platform 🚀
https://misskey.io/
GNU Affero General Public License v3.0
172 stars 12 forks source link

BullMQをやめる #313

Open u1-liquid opened 10 months ago

u1-liquid commented 10 months ago

もっと正確には、Redisベースのキューをやめる (負荷に耐えられないので)

前提

u1-liquid commented 10 months ago

とても個人的な観点のPros & Cons

BullMQを使い続ける

この場合、既存のSingle-Node RedisではなくCluster構成に対応させることにする

Pros

RabbitMQ

Pros

ActiveMQ

Pros

Kafka

Pros

ZeroMQ

Pros

SanMurakami commented 10 months ago

RabbitMQ良さそう

u1-liquid commented 10 months ago

RabbitMQで進めることにして、node.jsライブラリとしてはrascalを採用して実装中

u1-liquid commented 10 months ago

実装の方針

tamaina commented 10 months ago

BullMQが重い理由引用

ジョブキューの時間計算量が実行中(待機中ではない)のジョブの数に比例するという性能特性があり、かつ時間計算量がタイムアウトの閾値を超えるとジョブの完了処理がコケるようになり、原理的に2度と状況が改善方向に向かうことはないという性能劣化の正帰還ができあがっていた(ので、全部一度引っこ抜いて待機列に詰め直した) https://misskey.io/notes/9o4bl4yw9bpv0djx

具体的にはこの一行の時間計算量が active リスト(実行中のジョブリスト)の要素数に比例してます。完了したジョブをリストから取り除く処理なんだけれど、増えた待機ジョブに対応してワーカーを増やしまくるなどして実行中のジョブがひとたび急増すると、ここの処理が激重になり、タイムアウトするようになり、つまりジョブは2度と完了せず、不幸が訪れる。ジョブに増加に対応しようとして逆に首が締まる最悪のループに入るわけです。 https://misskey.io/notes/9o4c09uu3gov0eia

結論としては詰め直せばええ https://misskey.io/notes/9o4bn9k6vhcm0ddf