【リトライバジェット】

リトライバジェット とは?

最終更新:
💡 再試行にも上限を設け、負荷の増幅を抑える

再試行による追加の負荷を抑えるために、再試行の回数・割合・同時実行数などに上限を設ける考え方。管理する範囲や計測方法、上限値は実装と運用によって異なる。

📌 このページのポイント
再試行の追加負荷に上限 上限の例 60回/1分 1プロセスで管理 上限内 再試行を許可できる 予算を使い切った 追加の再試行を止める 管理範囲・数え方・上限値は実装による 期限やエラーの種類も合わせて判断
GoogleのSRE書籍にある「1プロセスで1分間に60回」は設定例。割合や同時実行数で管理する実装もあり、予算内でも再試行が適切かを別に判断する。
ひよこ ひよこ
失敗したら何度もやり直せばいいの?
ペンギン先生 ペンギン先生
再試行で成功することもあるけれど、障害中のサービスへ追加の負荷をかけるよ。再試行が重なって復旧を妨げる場合もある。そこで一定範囲の再試行量に上限を設けるのが、リトライバジェットの考え方なんだ。
ひよこ ひよこ
1回の要求で3回まで、とは違うの?
ペンギン先生 ペンギン先生
それは要求ごとの回数制限だね。多くの要求が同時に失敗すると、それぞれが少ない回数でも再試行全体は多くなる。予算では、クライアントやプロセスなど、管理する範囲全体の再試行量も抑えるんだ。
ひよこ ひよこ
上限は必ず10%なの?
ペンギン先生 ペンギン先生
10%はGoogleのSRE書籍にあるクライアント単位の設定例だよ。別の節では1プロセスで1分間に60回という例もある。Envoyは同時実行する再試行の予算を扱う。何を数え、どの範囲・時間で制限するかを決めてから、適切な値を選ぶんだ。
ひよこ ひよこ
バックオフやサーキットブレーカーとは違うの?
ペンギン先生 ペンギン先生
バックオフは次の再試行までの待ち時間を増やす方法で、予算は再試行の量を抑えるよ。Envoyではサーキットブレーカーの設定にretry_budgetが含まれるなど、仕組みは重なる場合もある。名称だけで完全に別の機能と決めず、実装を確認しよう。
ひよこ ひよこ
エラーバジェットと同じ予算なの?
ペンギン先生 ペンギン先生
別の指標だよ。エラーバジェットはSLOに基づき、一定期間で許容する失敗の程度を扱う。リトライバジェットは、再試行が作る追加負荷の上限を扱う。「予算」という名前が同じでも、数える対象が違うんだ。
ひよこ ひよこ
上限以内なら、どんな失敗も再試行していい?
ペンギン先生 ペンギン先生
入力の不備など、繰り返しても直らないエラーは再試行しない判断が必要だよ。複数の層がそれぞれ再試行すると、取得先への要求が何倍にも増える場合もある。回数と予算だけでなく、待ち時間・処理期限・どの層が再試行するかも合わせて設計しよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「リトライバジェット」って出てきたら「再試行の追加負荷を抑えるための上限」と思えばだいたいOK!
📖 おまけ:英語の意味
「Retry Budget」 = リトライ予算
💬 Retryは再試行、Budgetは予算という意味。再試行で負荷を増やしすぎないように、管理する範囲と量の上限を決める考え方だよ。

参考資料

← 用語集にもどる