再試行 Storm / Circuit Breaker / Nested 再試行 Budget Composition
記事状態: 公開 · 最終確認: 2026-10-11
要点
「agentのrequest_limitだけで提供元への総attempt数が保証される」とは表現しません。「再試行を完全に排除すべき」とも表現しません。公開可能な主張は、複数層の再試行は負荷を増幅し得るため、再試行 domainを列挙し、観測可能な層ごとに担当者と有限budgetを定め、重複再試行を抑制し、backoff/jitter、breaker/backpressure、attempt 稼働状況の記録を組み合わせる、という範囲です。提供元内部の非公開attempt数やexactly-onceを保証しません。
現在の判断
「agentのrequest_limitだけで提供元への総attempt数が保証される」とは表現しません。「再試行を完全に排除すべき」とも表現しません。公開可能な主張は、複数層の再試行は負荷を増幅し得るため、再試行 domainを列挙し、観測可能な層ごとに担当者と有限budgetを定め、重複再試行を抑制し、backoff/jitter、breaker/backpressure、attempt 稼働状況の記録を組み合わせる、という範囲です。提供元内部の非公開attempt数やexactly-onceを保証しません。
どこまで当てはまるか
再試行 Storm / Circuit Breaker / Nested 再試行 Budget Composition
詳しく理解する
概要
AIエージェントやワークフローでは、単一の「再試行回数」だけを見ても実際の外部呼び出し回数は制御できません。オーケストレータ、durable 実行、エージェント実行系、提供元 SDK、HTTP transport、gateway、失敗時の代替処理、ツール、output 妥当性の検証などが独立して再試行すると、各層の試行回数が乗算され、障害中の下流サービスへ負荷を集中させる 再試行 storm が発生します。本項の運用原則は、再試行を層別に棚卸しし、観測可能な各層について明示的な担当者と有限budgetを定め、重複する自動再試行を可能な範囲で無効化し、実際のattempt 主体の識別を記録することです。
なぜ問題になるか
AWS Builders’ Libraryは、複数階層でそれぞれ再試行すると下流負荷が乗算されることを説明し、backoffとjitter、再試行箇所の制御を推奨しています。Google SREのoverload/再試行 guidanceも、障害時の再試行が負荷を増幅し、回復を遅らせ得ることを扱います。Azureの再試行 StormおよびCircuit Breakerパターンも、失敗中の依存先へ無制限に要求を送り続けない設計を要求します。したがって「agent側のrequest_limitが3だから最大3回」という推論は、下位SDKやtransport、gatewayが追加attemptを生成する構成では成立しません。
実装・運用
・再試行 domain inventory: orchestrator/durable engine、agent 実行環境、モデル/提供元 SDK、HTTP transport、gateway/router、失敗時の代替処理、ツール、output 妥当性の検証、hedgingを別々のdomainとして列挙します。 ・Single explicit 担当者 per observable layer: 同一障害を複数層が無制御に再試行しないよう、どの層が再試行するかを明示します。durable step 再試行を採用する場合、提供元 SDKやtransport 再試行を無効化または最小化できる構成ではそうします。 ・Finite budgets: attempts、elapsed time、deadline、同時実行数、downstream request rateを有限値として設定します。無期限再試行を既定値のまま残しません。 ・Worst-case envelope: 観測可能な層について、上位attempt × 下位再試行 × 失敗時の代替処理候補 × hedged copies の最大包絡を設計時に計算します。ただし提供元内部attemptを観測できない場合、その値を推測で加算せず未確認事項として扱います。 ・Backoff + jitter: 一斉再試行を避けるため指数backoff等とjitterを使い、deadlineを超える再試行を止めます。 ・Circuit breaker / load shedding: 下流障害率やlatencyが閾値を超えた場合、短時間に新規attemptを増幅させず、fail-fast、queue/backpressure、degraded modeへ移します。breakerは再試行 budgetの代替ではなく併用する制御です。 ・Attempt 主体の識別 and 稼働状況の記録: logical 操作内容 IDと各層のattempt IDを分け、どの層が何回呼んだかを観測可能な範囲で記録します。agent-visible response countだけをwire-call countとして扱いません。 ・Side-effect 適用限界: 非冪等な外部効果は、再試行 budgetとは別に重複実行を防ぐ性質/reconciliationを必要とします。処理待ち時間の上限を単純FAILEDとみなして再試行せず、外部状態を確認できる場合は先にreconcileします。
適用境界
この設計は、LLM API、ツール/API invocation、durable 処理の流れ、gateway経由の提供元 処理先の振り分け、複数モデル 失敗時の代替処理など、複数の自動再試行層が重なる系に適用します。単一同期呼び出しで再試行が完全に一箇所へ集約されている系では管理対象は減りますが、SDK既定再試行やproxy/gateway挙動は確認が必要です。
監査上の確認点
主要記述・判断は上記登録済み一次資料・継続調査記録へ追跡可能です。製品内部attempt数、独立fixture、breakerの分散永続性は未確認として本文で限定しました。READY、AUDIT_PASS、GIT_INTEGRATED、ACCEPTEDは本candidateでは自己判定しません。
よくある失敗・反証
Nested 再試行 amplification: durable engineが1 stepを再実行し、その各step内でSDK/transportが複数回再試行することでwire callが乗算されます。
再試行 ownership ambiguity: orchestrator、agent 実行環境、SDK、gatewayのどこが再試行責任を持つか不明確で、複数層が同じ障害へ反応します。
Circuit breaker bypass: 上位層のbreakerが開いても、既に開始済みの下位再試行や別経路失敗時の代替処理が継続する場合があります。
Hidden 失敗時の代替処理/処理先の振り分け: gatewayや提供元内部の処理先の振り分け/失敗時の代替処理は、agentから観測できるrequest数と一致しない場合があります。
Durable replay ambiguity: durable 処理の流れの再実行では、前回attemptが外部効果を残したか不明なまま次attemptへ進むと、再試行 stormだけでなく重複副作用も生じます。
Hedging/speculation: latency低減のための並列・投機要求は再試行とは別機構でも、下流attempt budgetを消費します。
「再試行は常に一層だけにする」という普遍則ではありません。異なる失敗 domainに対して別層の再試行が合理的な場合があります。重要なのは、各層の責任・上限・相互作用を明示し、総attempt envelopeを制御することです。また、提供元内部処理先の振り分けや再試行が公開されない場合、外部からexact attempt countを保証できません。Circuit breakerも既に飛行中の要求を必ず取り消すものではなく、全提供元で同一の永続化・分散整合性を持つとは限りません。
まだ確認できていないこと
- EA-505-UNKNOWN-01
・提供元内部再試行/処理先の振り分け/失敗時の代替処理のexact attempt accounting(非公開部分)。 ・breaker 状態の永続化、partition時の挙動、複数worker間共有の製品別差異。 ・hedged/speculative requestを含むend-to-end budgetの製品別実装。 ・version-pinned Pydantic AI + durable 実行等での独立したwire-call実測fixture。 ・提供元 gatewayを跨ぐ場合の内部attemptと課金/レート制限カウンタの対応。
根拠資料
この記事には、直接開ける外部出典が登録されていません。出典IDや検証情報は末尾で確認できます。
更新履歴
EA-505-R1-20261011: 正式な 監査/publication 対応付け
出典ID・検証情報・機械可読データ
根拠の種類と情報の鮮度は、ラベルとアイコンで確認できます。
- 記事ID
- EA-505
- 最終確認日
- 2026-10-11
- 提供元・モデル・プラン・利用環境
- —
- 対象地域
- —
元資料の全文と収録照合記録
概要
AIエージェントやワークフローでは、単一の「再試行回数」だけを見ても実際の外部呼び出し回数は制御できません。オーケストレータ、durable execution、エージェント実行系、provider SDK、HTTP transport、gateway、fallback、tool、output validationなどが独立して再試行すると、各層の試行回数が乗算され、障害中の下流サービスへ負荷を集中させる retry storm が発生します。本項の運用原則は、再試行を層別に棚卸しし、観測可能な各層について明示的なownerと有限budgetを定め、重複する自動再試行を可能な範囲で無効化し、実際のattempt identityを記録することです。
なぜ問題になるか
AWS Builders’ Libraryは、複数階層でそれぞれ再試行すると下流負荷が乗算されることを説明し、backoffとjitter、再試行箇所の制御を推奨しています。Google SREのoverload/retry guidanceも、障害時の再試行が負荷を増幅し、回復を遅らせ得ることを扱います。AzureのRetry StormおよびCircuit Breakerパターンも、失敗中の依存先へ無制限に要求を送り続けない設計を要求します。したがって「agent側のrequest_limitが3だから最大3回」という推論は、下位SDKやtransport、gatewayが追加attemptを生成する構成では成立しません。
主要なfailure mode
- Nested retry amplification: durable engineが1 stepを再実行し、その各step内でSDK/transportが複数回retryすることでwire callが乗算されます。
- Retry ownership ambiguity: orchestrator、agent runtime、SDK、gatewayのどこが再試行責任を持つか不明確で、複数層が同じ障害へ反応します。
- Circuit breaker bypass: 上位層のbreakerが開いても、既に開始済みの下位retryや別経路fallbackが継続する場合があります。
- Hidden fallback/routing: gatewayやprovider内部のrouting/fallbackは、agentから観測できるrequest数と一致しない場合があります。
- Durable replay ambiguity: durable workflowの再実行では、前回attemptが外部効果を残したか不明なまま次attemptへ進むと、retry stormだけでなく重複副作用も生じます。
- Hedging/speculation: latency低減のための並列・投機要求はretryとは別機構でも、下流attempt budgetを消費します。
具体的control / implementation implication
・Retry domain inventory: orchestrator/durable engine、agent runtime、model/provider SDK、HTTP transport、gateway/router、fallback、tool、output validation、hedgingを別々のdomainとして列挙します。 ・Single explicit owner per observable layer: 同一障害を複数層が無制御にretryしないよう、どの層が再試行するかを明示します。durable step retryを採用する場合、provider SDKやtransport retryを無効化または最小化できる構成ではそうします。 ・Finite budgets: attempts、elapsed time、deadline、concurrency、downstream request rateを有限値として設定します。無期限retryを既定値のまま残しません。 ・Worst-case envelope: 観測可能な層について、上位attempt × 下位retry × fallback候補 × hedged copies の最大包絡を設計時に計算します。ただしprovider内部attemptを観測できない場合、その値を推測で加算せずUNKNOWNとして扱います。 ・Backoff + jitter: 一斉再試行を避けるため指数backoff等とjitterを使い、deadlineを超える再試行を止めます。 ・Circuit breaker / load shedding: 下流障害率やlatencyが閾値を超えた場合、短時間に新規attemptを増幅させず、fail-fast、queue/backpressure、degraded modeへ移します。breakerはretry budgetの代替ではなく併用する制御です。 ・Attempt identity and telemetry: logical operation IDと各層のattempt IDを分け、どの層が何回呼んだかを観測可能な範囲で記録します。agent-visible response countだけをwire-call countとして扱いません。 ・Side-effect boundary: 非冪等な外部効果は、retry budgetとは別にidempotency/reconciliationを必要とします。timeoutを単純FAILEDとみなして再試行せず、外部状態を確認できる場合は先にreconcileします。
適用境界
この設計は、LLM API、tool/API invocation、durable workflow、gateway経由のprovider routing、複数model fallbackなど、複数の自動再試行層が重なる系に適用します。単一同期呼び出しでretryが完全に一箇所へ集約されている系では管理対象は減りますが、SDK既定retryやproxy/gateway挙動は確認が必要です。
Counterevidence / limitations
「再試行は常に一層だけにする」という普遍則ではありません。異なるfailure domainに対して別層のretryが合理的な場合があります。重要なのは、各層の責任・上限・相互作用を明示し、総attempt envelopeを制御することです。また、provider内部routingやretryが公開されない場合、外部からexact attempt countを保証できません。Circuit breakerも既に飛行中の要求を必ず取り消すものではなく、全providerで同一の永続化・分散整合性を持つとは限りません。
OPEN_UNKNOWN
・provider内部retry/routing/fallbackのexact attempt accounting(非公開部分)。 ・breaker stateの永続化、partition時の挙動、複数worker間共有の製品別差異。 ・hedged/speculative requestを含むend-to-end budgetの製品別実装。 ・version-pinned Pydantic AI + durable execution等での独立したwire-call実測fixture。 ・provider gatewayを跨ぐ場合の内部attemptと課金/レート制限カウンタの対応。
SAFE_WORDING
「agentのrequest_limitだけでproviderへの総attempt数が保証される」とは表現しません。「retryを完全に排除すべき」とも表現しません。公開可能な主張は、複数層のretryは負荷を増幅し得るため、retry domainを列挙し、観測可能な層ごとにownerと有限budgetを定め、重複retryを抑制し、backoff/jitter、breaker/backpressure、attempt telemetryを組み合わせる、という範囲です。provider内部の非公開attempt数やexactly-onceを保証しません。
Source / provenance locator ・Amazon Builders’ Library — Timeouts, retries, and backoff with jitter(登録済みprovenance) ・Google SRE / SRE Workbook — retry amplification, handling overload, Niantic incident(登録済みprovenance) ・Microsoft Azure Architecture Center — Retry Storm pattern / Circuit Breaker pattern(登録済みprovenance) ・AWS SDK retry behavior(登録済みprovenance) ・Pydantic AI current Retries / Durable Execution / Tool Execution documentation(2026-10-16確認記録) ・EA_Research_Continuation_Log / EA-505 bounded refresh records(発展拡張統合管理台帳にlocator記録済み)
監査上の確認点
主要claimは上記登録済み一次資料・継続調査記録へ追跡可能です。製品内部attempt数、独立fixture、breakerの分散永続性は未確認として本文で限定しました。READY、AUDIT_PASS、GIT_INTEGRATED、ACCEPTEDは本candidateでは自己判定しません。
EA-505-CURRENT-APPROVAL研究資料研究資料根拠の出所: AUDITED_CANONICAL_RESEARCH_PACKET現行本文の監査・revision対応
- 裏付ける内容
- 現行台帳のAUDIT_PASSと候補・revision・本文ハッシュの対応を確認しています。
- 確認日
- —
- 出典・実験ID
- ORPHAN-RESCUE-EA505-20261019-C1
- 検証箇所
- 1KqhJtiSb2S84rWmeYVwKcT_76dBwZ_B0ZZuAWQqH0rQ/EA_REVISION_LEDGER#ea_id=EA-505&revision_id=EA-505-R1-20261011&candidate_id=ORPHAN-RESCUE-EA505-20261019-C1 · EA-505-R1-20261011
- 適用範囲
- —
- 出典・来歴
- CURRENT_CANONICAL_APPROVAL_READBACK
- 限界
- 監査状態と来歴の記録です。外部根拠の最新性や本文の全主張を追加保証しません。
EA-505-CURRENT-BODY-READBACK実装資料実装資料根拠の出所: IMPLEMENTATION_READBACK現行本文の収録照合
- 裏付ける内容
- 公開生成入力の本文SHA-256が、監査済み候補に結び付いたハッシュと一致しています。
- 確認日
- 2026-10-19
- 出典・実験ID
- BODY-SHA256:ce7dd6b82c8a1cb77f68ce747fa5fa26ba2bc54b457fb754a45f69f5502aca6e
- 検証箇所
- content/staging/EA-505.md · ce7dd6b82c8a1cb77f68ce747fa5fa26ba2bc54b457fb754a45f69f5502aca6e · EA-505-R1-20261011
- 適用範囲
- —
- 出典・来歴
- CURRENT_APPROVED_BODY_HASH_MATCH
- 限界
- 本文の同一性の検査です。外部システムの挙動や全主張の真偽を実証したものではありません。
- 出典ID
- ORPHAN-RESCUE-EA505-20261019-C1, BODY-SHA256:ce7dd6b82c8a1cb77f68ce747fa5fa26ba2bc54b457fb754a45f69f5502aca6e
- 追跡中のUNKNOWN ID
- EA-505-UNKNOWN-01
- 再確認のきっかけ
- 正式な 改訂版/publication 状態 change · 本文 成果物 hash change · 出典 現行性 change · new contradiction or 実装 結果の照合
機械検査: 通過 — 機械検査の結果です。情報の正確性や実行の承認を保証するものではありません。
同じ記事IDの機械可読データです。