【しすうバックオフ】

指数バックオフ とは?

公開:
💡 「失敗したら倍待つ」賢い順番待ち
📌 このページのポイント
ひよこ ひよこ
指数バックオフって、どんな仕組みなの?
ペンギン先生 ペンギン先生
APIリクエストが失敗したとき、すぐにリトライするとサーバーに負荷が集中するよね。指数バックオフは「1回失敗したら1秒待つ、2回目の失敗なら2秒、3回目なら4秒…」と待ち時間を倍々に増やす戦略だよ。
ひよこ ひよこ
なんで倍々に増やすの? 一定間隔じゃダメなの?
ペンギン先生 ペンギン先生
一定間隔だとサーバーが過負荷なときに全クライアントが同じペースでリトライし続けて、さらに負荷が増えてしまうんだ。指数的に増やすことで、時間が経つほど負荷が自然に下がって、サーバーが回復する余裕ができるんだよ。
ひよこ ひよこ
ジッターって何なの?
ペンギン先生 ペンギン先生
複数のクライアントが同時にリトライすると、たとえ指数バックオフでも「同じタイミングでリトライ」が集中することがあるんだ。ジッターはランダムな揺らぎ(例: 待機時間 ± 0〜1秒のランダム値)を加えることで、リトライのタイミングを分散させるんだよ。
ひよこ ひよこ
上限を設けないといけないって聞いたけど?
ペンギン先生 ペンギン先生
そうだよ。上限がないと256秒、512秒とどんどん長くなってしまうからね。一般的には最大30〜60秒の上限を設けて、それ以上は同じ間隔でリトライするか、諦める(エラーを返す)設計にするんだ。
ひよこ ひよこ
AWS SDKGoogle Cloudライブラリにも入ってるって本当なんだね!
ペンギン先生 ペンギン先生
そうだよ。多くのクラウドSDKは指数バックオフ+ジッターを標準で実装していて、自分で実装しなくても使えるんだ。ただしリトライ戦略の設定(最大回数・上限時間)はユースケースに合わせてチューニングする必要があるよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「指数バックオフ」って出てきたら「失敗するたびに待ち時間を2倍にするリトライ戦略」と思えればだいたいOK!
📖 おまけ:英語の意味
「Exponential Backoff」 = 指数的後退
💬 ネットワーク衝突制御のALOHAプロトコルに起源があり、「混雑しているほど待ち時間を長くする」合理的な戦略だよ
← 用語集にもどる