分散システムでは、呼び出しが失敗します。バックオフを伴う再試行は一時的なエラーから回復します。サーキットブレーカーは本当にダウンしている依存関係を叩き続けるのを防ぎます。これらは相補的です: ちょっとした不具合は再試行し、障害時は遮断します。
指数バックオフ + ジッターを伴う再試行
一時的な障害(タイムアウト、短いネットワーク障害、503)の場合、再試行してください — ただしして、再試行が同期して雷群になるのではなく分散するようにします。
attempt 1 → wait ~1s (+ random jitter)
attempt 2 → wait ~2s (+ random jitter)
attempt 3 → wait ~4s (+ random jitter)
→ cap at maxRetries (e.g. 3) and a max delay → don't retry forever
主な注意点:
サーキットブレーカーは依存関係への障害を追跡し、閾値の後に開きます — 停止したサービスを呼び出す代わりに高速失敗(またはフォールバックを返します)します。クールダウン後に半開になって復帰をプローブします。
CLOSED → calls pass through; count failures
too many failures → trip → OPEN
OPEN → fail fast immediately (no call); start cooldown timer
cooldown elapsed → HALF-OPEN
HALF-OPEN → allow a few probe calls
success → CLOSED (recovered) ; failure → back to OPEN
Retry → transient, likely-to-succeed-soon errors (1 slow call)
Circuit breaker → repeated/sustained failures (the dependency is down)
→ use together: breaker prevents retries from piling onto a dead service
これなしでは、1つの失敗した依存関係が呼び出し元を巻き込みます: リクエストはタイムアウトで蓄積され、再試行は負荷を増幅し、障害はサービス全体に連鎖します。ジッター付き指数バックオフは不具合から再試行ストーム無しで回復します。キャップとべき等性は再試行を安全に保ちます。サーキットブレーカーは停止した依存関係のリソース浪費を停止し、復帰の余地を与えます。これらを組み合わせることで、依存関係の障害を包含された自己回復イベントに変えます。
ジュニアからシニアまで、詳細な回答付きのIT面接質問ライブラリ。
寄付する