【ばっくおふせんりゃく】

バックオフ戦略 とは?

最終更新:
💡 混んでいたら少し待つ。みんなの再試行もずらす

一時的な失敗の後、すぐに再試行せず待ち時間を置くルール。指数バックオフやジッターで再試行の集中を緩和し、回数・時間の上限や重複処理への対策と組み合わせる。

📌 このページのポイント
バックオフ:待ち方を決める線形の例1回目1秒2回目2秒3回目3秒4回目4秒指数の例1回目1秒2回目2秒3回目4秒4回目8秒ジッター:再試行の時刻をずらすA:1秒B:3秒C:2秒回数・期限で打ち切る
秒数は説明用の例です。ジッターには複数の方式があり、待ち時間の上限と、再試行そのものの打ち切り条件は別です。
ひよこ ひよこ
失敗したら、すぐにもう一度送ればいいのでは?
ペンギン先生 ペンギン先生
混雑が原因なら、みんながすぐ送り直すと負荷が増えるね。一時的な通信エラーやサービスの混雑などでは、少し待って再試行する方法があるよ。入力ミスや権限不足は、待つだけでは直らないので、再試行する理由も選ぼう。
ひよこ ひよこ
待つ時間は、どう変えるの?
ペンギン先生 ペンギン先生
同じ時間を待つ固定方式や、1秒・2秒・3秒と増やす線形方式などがあるよ。指数方式は倍率で増やすもので、例えば1秒・2秒・4秒・8秒。これは例で、必ず1秒から倍々にする決まりではないんだ。
ひよこ ひよこ
指数方式なら、混雑を解消できる?
ペンギン先生 ペンギン先生
全員が同じタイミングで失敗すると、待った後も一斉に再試行しやすいね。そこでジッターというランダムな時間の違いを入れるよ。例えばFull Jitterは、その時点の上限までの範囲から待ち時間を選ぶ方式で、単に一定時間へプラスマイナスする方式だけではないんだ。
ひよこ ひよこ
注文の送信にも使ってよいの?
ペンギン先生 ペンギン先生
タイムアウトしても、相手では注文が通っている場合があるよ。そのまま再送すると二重注文になり得るんだ。同じ依頼を繰り返しても結果を重複させない冪等性や、依頼を識別する仕組みを確認してから使おう。
ひよこ ひよこ
いつまで再試行すればいい?
ペンギン先生 ペンギン先生
再試行回数、全体の期限、1回の待ち時間の上限などを決めよう。待ち時間の上限だけでは、無限の再試行は止まらないよ。SDKが再試行する場合は、その外側でも重ねて再試行して負荷を増やさないよう、設定と失敗時の動作を確かめよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「バックオフ戦略」って出てきたら「失敗の後、少し待ってから再試行するルール」と思えばだいたいOK!
📖 おまけ:英語の意味
「Backoff Strategy」 = いったん引いて待つ戦略
💬 back offは「引き下がる」。失敗の直後に繰り返すのではなく、待ち時間を入れて再試行することを表すよ。

参考資料

← 用語集にもどる