【りとらい】

リトライ とは?

最終更新:
💡 再送の安全性と、待機・打ち切りを決める

失敗した処理を再試行すること。一時的なエラーと再送の安全性を判断し、待機・ジッター・回数と期限の上限、SDKとの重複を確認する方法を解説します。

📌 このページのポイント
リトライ:安全を確かめ、待って再送初回の送信一時的なエラー再試行1回目再び一時的なエラー再試行2回目成功した例待機1秒待機2秒初回1回 + 再試行2回 = 最大3回送信前提:再送が安全な操作。秒数は例回数と全体の期限で打ち切るタイムアウトでも相手側は処理済みかもしれない
矢印は待機を挟む送信順で成功は保証されません。1秒・2秒は説明用の固定値で、実際にはジッターやAPIの待機指示、SDKとの重複も確認します。
ひよこ ひよこ
APIがタイムアウトしたら、もう一度送っていい?
ペンギン先生 ペンギン先生
失敗した処理をやり直すことをリトライと呼ぶよ。手動でも自動でもできる。ただ、タイムアウトは相手が未処理という証拠ではない。再送の安全性とエラーの原因を見て判断しよう。一時的な通信の不調なら、再試行で回復する場合がある。
ひよこ ひよこ
じゃあ、失敗したらすぐにもう一回リクエストすればいいの?
ペンギン先生 ペンギン先生
連続で送ると負荷を増やすことがあるよ。指数バックオフは待機の幅を増やす方法で、1秒、2秒、4秒は説明用の例だ。同じ時刻に再送が集中しないよう、ランダムなばらつきのジッターも使う。APIの待機指示と回数・期限の上限を考えよう。
ひよこ ひよこ
なるほど!でも何回もリトライし続けたら永遠に終わらなくない?
ペンギン先生 ペンギン先生
だから回数と全体の期限に上限を決めておくんだ。初回の後に3回リトライする設定なら、送信は最大4回だよ。それでもダメなら失敗を呼び出し元に返すなど、打ち切った後の処理も決めよう。
ひよこ ひよこ
サーキットブレーカーってリトライとどう違うの?
ペンギン先生 ペンギン先生
リトライは失敗した処理をやり直すこと、サーキットブレーカーは失敗が続く相手への呼び出しを一時的に止める仕組みだよ。障害中の相手に負荷をかけ続けるのを抑えるために組み合わせるけれど、それだけで障害の連鎖を必ず防げるわけではないんだ。
ひよこ ひよこ
リトライって何でも再試行していいの?
ペンギン先生 ペンギン先生
そのまま再送するのは、一時的な障害で、繰り返しても問題ないと判断できる場合だよ。タイムアウトしても相手側では処理済みかもしれないので、注文などは冪等性や重複排除の確認が必要なんだ。入力や認証の問題なら先に原因を直そう。ステータスコードと操作の性質の両方を見るのが大事だね。
もっと詳しく知りたい人へ

注文APIがタイムアウトしたら、同じ注文を送り直していい?

応答が届かなかっただけで、注文自体は完了している可能性があります。まず注文状況やAPIの再試行仕様を確認してください。APIが冪等性キーに対応しているなら、同じ注文の再試行では同じキーと同じ内容を使います。サーバー側で重複を扱う仕組みが必要で、任意のキーを付けるだけでは防げません。キーの有効期間もAPIごとに確認します。

503や401を受け取ったときは、どう判断する?

503は一時的な利用不能を表すので、再送しても問題ない操作なら再試行を検討します。Retry-Afterがあれば待機時間の判断に使い、回数と全体の期限にも上限を設けます。401は認証情報の見直しが先です。同じ無効な認証情報のまま繰り返さず、認証を更新できる場合はAPIの仕様に従って再送します。コードだけで再送の安全性は決まりません。

SDKが再試行するなら、アプリにも追加していい?

SDKや下位サービスの設定を先に確認します。各層で再試行すると、送信回数が掛け合わされて増える場合があります。どこで制御するかを決め、最大試行回数が初回を含むのか、再試行だけなのかも確認します。待機だけでなく各試行のタイムアウトも全体の期限に収めます。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「リトライ」って出てきたら「失敗した処理をやり直すこと」と思えばだいたいOK!同じ操作を繰り返しても問題ないか、先に確認しよう。
📖 おまけ:英語の意味
「Retry」 = 再試行する
💬 re(再び)とtry(試す)で再試行という意味だよ。ITでは失敗した処理をやり直すことを指し、自動化する場面も多いんだ

参考資料

← 用語集にもどる