【りとらいぱたーん】
リトライパターン とは?
最終更新:
💡 「ダメでもう一回」を賢くやる仕組み
一時的な障害から回復する見込みがあるときに、失敗した処理を再試行する設計パターン。対象のエラー、待機時間、試行回数や期限を決め、同じ処理の重複実行による副作用も考慮する。
📌 このページのポイント
なぜすぐリトライしちゃダメなの?
大勢が同時に再試行すると、回復中のサービスへさらに負荷をかけることがあるよ。待ち時間を設ける方法が役立つけれど、即時再試行が適切な障害もある。エラーの性質とサービスの仕様に合わせて、中止・すぐ再試行・待って再試行を選ぶんだ。
指数バックオフって具体的には?
待ち時間を1秒、2秒、4秒のように増やす例だよ。最初の試行の後に3回再試行すれば、試行は計4回。図は待ち時間だけの簡略例で、必ず最後に成功するわけではない。実際には待ち時間の上限や全体の期限を設け、ジッターという乱数で同時の試行を散らすこともあるんだ。
HTTPのエラーなら何でも再試行していい?
ステータスだけで必ず一時障害と決めつけないでね。サービスのエラー内容や仕様、Retry-Afterなどの待機指示を確認する。入力や認証に原因があるなら、同じ内容を繰り返す前に修正が必要な場合が多い。SDKにも再試行機能があるので、さらに外側で繰り返して回数を増やしすぎないことも大事だよ。
冪等性との関係は?
冪等とは、同じ依頼を繰り返しても意図した効果が一回分と同じになること。応答が届かなかっただけで、注文が既に登録されている場合もあるよ。重複を識別する仕組みや処理状況の確認など、再試行の安全性を設計する。応答の内容が毎回同じという意味ではなく、安全に繰り返せない操作を無条件に再送しないんだ。
まとめ:ざっくりこれだけ覚えればOK!
「リトライパターン」って出てきたら「失敗時に間隔を空けて再試行する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Retry Pattern」 = 再試行パターン
💬 Retry(再び試す)。ただ再試行するだけでなく「賢く」再試行するのがポイントだよ