Circuit Breaker
概要
Circuit Breaker ポリシーは、マイクロサービスアーキテクチャにおけるカスケード障害を防ぐために、上流サービスの健康状態を監視し、サービスが不安定になったときにリクエストをブロックするように設計されています。これにより、システムの安定性が確保され、ユーザーエクスペリエンスが向上し、障害からの回復が迅速になります。
サーキットブレーカーは、three states の間で遷移します:
- Closed: リクエストは通常通り処理されます。
- Open: リクエストは高い障害率のためにブロックされます。
- Half-Open: サービスが回復したかどうかを確認するために、限られた数のテストリクエストが送信されます。
このポリシーは、分散システムにおける prevent excessive retries、reduce latency、および ensure fault tolerance を支援します。
設定の詳細


フィールド設定
サーキットブレーカー ポリシーは、システム障害に基づいてリクエストがブロックされるタイミングと方法を決定するいくつかの configurable parameters を提供します。
| Field name | Key | Type | Required | Description |
|---|---|---|---|---|
| エラー測定単位時間 (秒) | window_time | number | true | ウィンドウサイズ(秒) |
| エラー率 (%) | failure_percent_threshold | number | true | 回路を開くために失敗すべきリクエストの割合 |
| 最小リクエスト数* | min_calls_in_window | number | true | 計算を開始するためにウィンドウ内に存在する必要がある最小呼び出し数 |
| API タイムアウト設定 (ミリ秒) | api_call_timeout_ms | number | true | リクエストがタイムアウトし、失敗としてカウントされるまでの待機時間 |
| オープン状態の持続時間 (s) | wait_duration_in_open_state | number | true | オープン状態からハーフオープン状態に自動的に遷移する前に待機する時間(秒) |
| ハーフオープン状態の持続時間 (s) | wait_duration_in_half_open_state | number | true | ハーフオープン状態で待機する時間(秒)から自動的にクローズ状態に遷移する前の時間 |
| ハーフオープン状態での最小(min)リクエスト数* | half_open_min_calls_in_window | number | true | 計算を開始するためにハーフオープン状態に存在する必要がある最小リクエスト数 |
| ハーフオープン状態での最大リクエスト数* | half_open_max_calls_in_window | number | true | ハーフオープン状態で許可される最大リクエスト数 |
| レスポンスエラーコードを設定* | error_status_code | number | false | エラーが発生した場合にレスポンスステータスコードを上書きする(サーキットブレーカーがリクエストをブロックする) |
| レスポンスエラーメッセージを設定* | error_msg_override | string | false | エラーが発生した場合にカスタムメッセージで上書きする |
| レスポンスヘッダーを設定* | response_header_override | string | false | エラーが発生した場合に「Content-Type」レスポンスヘッダーを上書きする |
| 例外パスを設定* | excluded_apis | string | true | これらのAPIでサーキットブレーカーを実行しないようにするための文字列化されたJSON. 各パスのプラスまたはマイナスボタンをクリックすることで、追加のパスを追加または削除できます。 |
| アクティブフォールバックパス | fallback path | string | false | メインサービスが利用できないときにリクエストを処理するために定義されたフォールバックパス。 |
サーキットブレーカーの動作に関する追加ノート
Circuit Breakerは、障害検出サイクルに基づいて動作し、3つの状態を遷移します:
- Closed: トラフィックが通過し、エラー率が監視される正常状態。
- Open: エラー率の閾値を超えたときにトリガーされ、すべての受信トラフィックを一時的にブロックします。
- Half-Open: 設定された時間の後、システムの回復をテストするために制限されたトラフィックが許可されます。
- Recovery: テストトラフィックが問題なく通過した場合、システムは通常の状態に戻ります(クローズ)。
各設定はこのライフサイクルの制御に寄与します:
| Field | Description |
|---|---|
| 最小リクエスト数 | エラーを測定し始めるための単位時間内の最小リクエスト数。 |
| APIタイムアウト | リクエストがこの閾値を超えると、失敗と見なされます。 |
| オープン状態の持続時間 | 回路がオープンのままでいる時間(秒単位)。 |
| ハーフオープンの持続時間 | 回路がハーフオープン状態のままでいる時間(秒単位)。 |
| ハーフオープン時の最小リクエスト数 | ハーフオープン中にエラー率を再度観察するために必要な最小トラフィック。 |
| ハーフオープン時の最大リクエスト数 | 回復を評価するための最大テストリクエスト数。 |
レスポンス設定オプション
- Custom Error Code: トラフィックがブロックされたときに返されるエラーコード。
- Custom Error Message: トラフィックがブロックされたときに返されるメッセージボディ。
- Custom Error Content-Type: エラー応答のContent-Type。
例外パス設定
回路ブレーカーを適用しない特定のパスを定義します。
フォーマット: METHOD + PATH
例: GET /example/v1
フォールバックパス設定
回路ブレーカーがアクティブ化された場合、リクエストは代替ページにリダイレクトされることがあります:
- フォールバックパスは、ブロックされたリクエストのためのカスタムリダイレクションルートを定義することを可能にします。
- フォールバックパスが定義されていない限り、デフォルトパスが使用されます。
- 同じAPI内の特定のパスにリダイレクトするには、フォールバックパスとして希望するAPIパスを指定します。

APIM回路ブレーカーを設定する際によくある質問
- サーキットブレーカーがいつアクティブになるか(閉じる → 開く)を実際に決定するパラメータはどれですか?
サーキットブレーカーは only when these threshold parameters work together でアクティブになります:
- Error measurement unit time (window_time)
- Minimum number of requests (min_calls_in_window)
- Error rate (%) (failure_percent_threshold)
- API timeout setting (api_call_timeout_ms)
サーキットは all conditions below are met within the configured time window のときに開きます:
- window_time の間に受信したリクエストの数 ≥ min_calls_in_window
- 失敗したリクエスト(タイムアウトを含む)が失敗率を failure_percent_threshold に達するか超える原因となります
- アクティベーションに影響を与えないが、しばしば閾値と混同されるパラメータはどれですか?
次のパラメータは do not participate in activation であり、after the circuit is already Open のみで使用されます:
- wait_duration_in_open_state
- wait_duration_in_half_open_state
- half_open_min_calls_in_window
- half_open_max_calls_in_window
- 失敗が発生したとき、サーキットブレーカーはすぐにアクティブになりますか?
いいえ。
アクティベーションは both volume and error rate に依存します:
- 十分なリクエストが発生する必要があります(min_calls_in_window)
- 失敗が閾値を超える必要があります(failure_percent_threshold)
- すべての評価は window_time 内で行われます
all activation conditions are satisfied のときにのみ、回路は Closed → Open から遷移します。
パラメータグループとその責任
- アクティベーション / 閾値パラメータ(閉じる → 開く)
これらのパラメータは一緒に評価され、when the circuit opens を決定します:
- window_time
- min_calls_in_window
- failure_percent_threshold
- api_call_timeout_ms
- 回復制御パラメータ(開く → 半開 → 閉じる)
これらのパラメータはアクティベーションではなく、how and when traffic is restored を制御します:
- wait_duration_in_open_state
- half_open_min_calls_in_window
- half_open_max_calls_in_window
- wait_duration_in_half_open_state
- レスポンスカスタマイズパラメータ
これらのパラメータは、クライアントに返されるレスポンスに影響を与えますが、状態遷移には影響しません。
- error_status_code
- error_msg_override
- response_header_override
一般的な誤設定
| Case | Reason |
|---|---|
| サーキットが決して開かない | min_calls_in_window が高すぎる |
| サーキットが頻繁に開く | window_time が短すぎるか、threshold が低すぎる |
| 回復が決して起こらない | half-open max calls が低すぎる |
| ヘルスチェックがオープン状態をトリガーする | excluded_apis が欠落している |