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パスを指定します。