【りとらいぱたーん】

リトライパターン とは?

💡 「ダメでもう一回」を賢くやる仕組み
📌 このページのポイント
リトライパターン(指数バックオフ) 時間 → 1回目 1秒 2回目 2秒 3回目 4秒 4回目 指数バックオフ 待機時間: 1秒 → 2秒 → 4秒 → 8秒… 失敗するたびに待機時間を倍にして負荷を軽減
リトライパターンのイメージ
ひよこ ひよこ

なぜすぐリトライしちゃダメなの?

ペンギン先生 ペンギン先生

100人のクライアントが同時にエラーを受けて全員即座にリトライしたら、サーバーに200リクエスト(元の100+リトライ100)が殺到する。サーバーが回復しようとしているのに負荷が倍になって、さらに悪化する「リトライストーム」が起きるんだ。だから指数バックオフで待機時間を徐々に増やすのが鉄則だよ

ひよこ ひよこ

指数バックオフって具体的には?

ペンギン先生 ペンギン先生

1回目のリトライは1秒後、2回目は2秒後、3回目は4秒後、4回目は8秒後…のように待機時間を倍々に増やす方式。さらにジッター(ランダムな揺らぎ)を加えて、複数クライアントのリトライタイミングを分散させる。AWSSDKデフォルトでこの方式を採用しているよ

ひよこ ひよこ

リトライすべきでないエラーもある?

ペンギン先生 ペンギン先生

あるよ。HTTPステータスコードで判断するのが基本。500(サーバーエラー)や503(サービス利用不可)は一時的だからリトライ対象。400(リクエスト不正)や401(認証エラー)や404(存在しない)は何度やっても同じだからリトライしても無駄。エラーの種類を見て判断するのが重要だよ

ひよこ ひよこ

冪等性との関係は?

ペンギン先生 ペンギン先生

リトライ冪等性(何回実行しても同じ結果になる性質)はセットで考えるべきだよ。例えば「口座から1万円引き落とす」APIリトライしたら2万円引き落とされたら大問題。APIを冪等にするにはリクエストIDを付与して、同じIDのリクエストは2回目以降を無視する設計にする。リトライを安全にするために冪等性は必須だね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「リトライパターン」って出てきたら「失敗時に間隔を空けて再試行する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Retry Pattern」 = 再試行パターン
💬 Retry(再び試す)。ただ再試行するだけでなく「賢く」再試行するのがポイントだよ
← 用語集にもどる