仕事を一度に詰め込みすぎないため、処理中の件数に上限を付けた
確認対象の商品が多いと、まとめて全部の処理を作りたくなります。けれど、処理中の仕事が残っているところへ新しい仕事を足し続けると、待ち行列だけが大きくなります。そこで、現在動いている件数を数え、上限までの不足分だけを追加するようにしました。
SECTION 01
作る件数の上限と、残っている件数は別に見る
毎回最大500件を新しく作る方式では、前回の待機分が400件残っていても、さらに500件増える可能性があります。
必要なのは新規作成数の上限ではなく、待機中と処理中を合わせた全体の上限です。現在488件なら、追加するのは12件だけにします。
SECTION 02
同じスケジューラーが重なって動くのも防ぐ
定期処理は、前の実行が終わる前に次の時刻が来ることがあります。二つの処理が同時に件数を数えると、どちらも空きがあると判断して追加しすぎる可能性があります。
実行中であることを短時間のロックで示し、重なった実行は新しい仕事を作らず終了します。
FLOW
詳細処理を補充する流れ
重複確認
別のスケジューラーが動いていないか見ます。
空きを計算
上限から現在数を引きます。
不足分だけ追加
処理できる件数だけ補充します。
SECTION 03
売り切れの商品を何度も詳細確認しない
すでに利用できないと判断した商品を新しい詳細確認へ入れると、限られた処理枠を使ってしまいます。
対象を選ぶ段階で売り切れ状態を除外し、今も確認する意味がある商品へ枠を使います。
SECTION 04
夜に処理を増やすより、朝まで安定して流す
大量に投入した瞬間は仕事が進んだように見えますが、キューやデータベースへ負担が集中すると、かえって全体が遅くなります。
空いた分だけ補充する仕組みなら、処理量が増えても一定の範囲で流し続けられます。派手さはありませんが、翌朝まで安定して動かすための改善です。
QUESTIONS
よくある質問
記事の内容に関連して、検索されやすい疑問を短く整理します。
Q1詳細確認は最大500商品までしか行われませんか?
一度に待機中・処理中となる件数を500以内に保ち、完了して空きができるたびに次の対象を補充します。
Q2定期処理が同時に動いた場合はどうなりますか?
先に実行中の処理がある場合、重なったスケジューラーは新しいタスクを作らず終了します。
RELATED ARTICLES