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 |
---|---|---|---|---|
エラー測定単位時間 (s) | window_time | number | true | ウィンドウサイズ(秒) |
エラー率 (%) | failure_percent_threshold | number | true | 回路を開くために失敗すべきリクエストの% |
最小リクエスト数* | min_calls_in_window | number | true | 計算を開始するためにウィンドウ内に存在する必要がある最小呼び出し数 |
APIタイムアウト設定 (ms) | api_call_timeout_ms | number | true | リクエストがタイムアウトし、失敗としてカウントされるまでの待機時間 |
オープン状態の持続時間 (s) | wait_duration_in_open_state | number | true | オープンからハーフオープン状態に自動的に遷移するまでの待機時間(秒) |
ハーフオープン状態の持続時間 (s) | wait_duration_in_half_open_state | number | true | ハーフオープン状態で待機する時間(秒) |
ハーフオープン状態での最小リクエスト数* | 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パスをフォールバックパスとして指定します。