積み重なった作業キュー、いつ処理し終わる?
非同期作業キューを運用していると、突発的なトラフィック急増やデプロイ中の処理停止で作業が積み重なる状況に出くわします。この時最も気になるのは「今のまま処理を続けたらキューはいつ空になるのか」です。消化時間は単純にキューの長さを処理速度で割るだけでは正確になりません。処理している間にも新しい作業が次々と入ってくることを反映する必要があります。
このツールはワーカー数とワーカー1台あたりの処理時間を掛け合わせて全体の処理速度(秒間処理件数)を求め、そこから秒間の新規流入作業数を引いた実質減少速度を計算します。実質減少速度が正の値であればキューの長さをこの値で割ることで消化時間を予測できますが、流入速度が処理速度以上であればキューは減ることなくむしろ積み重なり続けます。このような場合、ワーカーを増やすか処理時間を最適化するのが唯一の解決策です。
実際の運用では流入速度が時間帯によって変動するため、直近数分間の平均値で計算すると一時的なスパイクに左右されない安定した予測に役立ちます。また、ワーカーを増やしてもDB接続プールや外部API呼び出し量のような共有リソースがボトルネックになっている場合、期待通りに処理速度が上がらないこともある点も考慮してください。
よくある質問
ワーカー全体の処理速度が新しく入ってくる作業の速度より遅い場合、キューは減るどころか積み重なり続け、絶対に消化されません。
多くの場合効果がありますが、DB接続や外部APIのような共有リソースにボトルネックがあると、ワーカーを増やしても処理速度が比例して増えない場合があります。
直近数分間の平均流入量で計算すると、一時的なスパイクに左右されない安定した予測値が得られます。