【りとらいぱたーん】

リトライパターン とは?

最終更新:
💡 「ダメでもう一回」を賢くやる仕組み

一時的な障害から回復する見込みがあるときに、失敗した処理を再試行する設計パターン。対象のエラー、待機時間、試行回数や期限を決め、同じ処理の重複実行による副作用も考慮する。

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

参考資料

← 用語集にもどる