ダウンストリームサービス の応答が遅い場合や、高いエラー率でエラーを返す場合、障害がカスケードし、アプリケーション全体のパフォーマンスが低下する可能性があります。Microservices Engine (MSE) のサーキットブレーカーは、これらのダウンストリームの依存関係を監視し、設定されたしきい値を超えると自動的にリクエストの送信を停止します。クールダウン期間の後、MSE は徐々にリクエストを再度許可することで回復をプローブします。
サーキットブレーカーは、アプリケーションが一時的に利用できなくなることを許容できるダウンストリームサービスである、弱い依存関係をターゲットとします。障害が即座に伝播する必要がある重要な依存関係については、代わりにリトライまたはフォールバック戦略を使用してください。
仕組み
サーキットブレーカーは、次の3つの状態を遷移します。
クローズ (正常動作) -- すべてのリクエストが通過します。MSE は、設定されたタイムウィンドウ内でメトリック (遅い呼び出し率またはエラー率) を追跡します。
オープン (サーキットトリップ) -- 追跡されたメトリックが設定されたしきい値を超え、最小リクエスト数が満たされると、MSE は設定された持続時間、すべてのリクエストをブロックします。ブロックされたリクエストは、タイムアウトを待つのではなく失敗します。
ハーフオープン (回復プローブ) -- サーキットブレーカーの持続時間が経過した後、MSE は次のリクエストをテストとして通過させます。
テストリクエストが成功した場合、サーキットブレーカーはクローズに戻ります。
テストリクエストが失敗した場合、サーキットブレーカーは別の完全な持続時間、オープンに戻ります。
MSE は、単一のテストリクエストに依存するのではなく、複数のステージで許可されたリクエストの割合を徐々に増加させるプログレッシブ回復もサポートしています。
前提条件
開始する前に、次のことを確認してください。
MSE Enterprise Edition がアクティブ化されています。
アプリケーションで Microservices Governance が有効になっています。セットアップ手順については、以下をご参照ください。
サーキットブレーカーのルールを作成する
-
MSE コンソールにログインし、トップナビゲーションバーでリージョンを選択します。
-
左側のナビゲーションウィンドウで、Microservices Governance > Application Governance を選択します。
「[アプリケーション一覧]」ページで、対象のアプリケーションをクリックします。次に、以下のいずれかの方法で「[サーキットブレーキングルールの追加]」ダイアログボックスを開きます。
パス A: 左側のナビゲーションウィンドウで、[API 詳細] をクリックします。[WEB サービス] タブで、[クライアント] タブをクリックします。インターフェイスを選択し、[サーキット ブレーカー] タブをクリックしてから、[追加されたフュージングルール] をクリックします。
パス B: 左側のナビゲーションウィンドウで、[トラフィック管理] をクリックします。[フロー保護] タブをクリックし、次に [ファイズルール] タブをクリックして、その後 [追加済みファイズルール] をクリックします。
[サーキットブレーカールールの追加]ダイアログボックスで、次のパラメーターを設定し、[新規]をクリックします。
ルールパラメーター
| パラメーター | 説明 | 有効な値 |
|---|---|---|
| インターフェイス名 | このルールで保護するインターフェイスです。 | -- |
| 統計ウィンドウの持続時間 | メトリックを計算するために使用されるタイムウィンドウの長さです。 | 1 秒~120 分 |
| 最小リクエスト数 | サーキットブレーカーがトリガーされる前に、タイムウィンドウ内で必要となる最小リクエスト数です。実際のリクエスト数がこの値を下回る場合、メトリックの比率に関わらず、サーキットブレーカーは閉じたままになります。 | 正の整数 |
| しきい値タイプ | サーキットブレーカーをトリガーするかどうかを評価するためのメトリックです。 | 遅延呼び出し比率 (%)、異常比率 (%) |
| 遅延呼び出しの応答時間 | 遅延呼び出しとみなす応答時間のしきい値(ミリ秒単位)です。この値を超える応答時間を要したリクエストは、遅延呼び出しとしてカウントされます。しきい値タイプ が 遅延呼び出し比率 (%) に設定されている場合にのみ適用されます。 | 正の整数(ms) |
| サーキットブレーキング比率しきい値 | サーキットブレーキングをトリガーする百分率のしきい値です。遅延呼び出し比率の場合、これは遅延呼び出しの割合を示します。異常比率の場合、これは異常リクエストの割合を示します。 | 0~100 (%) |
| サーキットブレーキングの持続時間 (s) | サーキットブレーカーがオープン状態を維持する期間です。この期間中、保護対象のインターフェイスへのすべてのリクエストは失敗します。 | 正の整数(秒) |
| サーキットブレーキングポリシー | サーキットブレーキングの持続時間が終了した後の復旧戦略です。 | 単一検出による復旧、段階的復旧 |
注:統計ウィンドウの持続時間 および 最小リクエスト数 の各パラメーターは、連携して動作します。たとえば、1 秒間のウィンドウを設定し、最小リクエスト数を 10 に指定した場合、トラフィックが少ないインターフェイス(1 秒あたり 10 未満のリクエスト)では、サーキットブレーカーがトリガーされません。トラフィックが少ないインターフェイスには、より長いウィンドウと、より低い最小リクエスト数を設定してください。
回復ポリシー
単一検出回復
サーキットブレーカーの持続時間が経過した後、MSE は次のリクエストをテストプローブとして通過させます。
リクエストが成功した場合 (応答時間が遅い呼び出し RT のしきい値を下回るか、エラーが発生しない場合)、サーキットブレーカーはクローズし、通常のトラフィックが再開されます。
リクエストが失敗した場合、サーキットブレーカーは別の完全な持続時間、再オープンします。
プログレッシブ回復
単一のテストリクエストの代わりに、MSE は複数の回復ステージでトラフィック比率を徐々に増加させます。これにより、回復直後にサーキットブレーカーが再トリップするリスクが軽減されます。
次の2つの追加パラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| 回復フェーズ数 | トラフィックを100%に戻すために使用されるステージ数。 |
| ステップあたりの最小通過数 | MSE が次のステージに進むかどうかを評価する前に、各ステージで必要となる最小リクエスト数。 |
各ステージで許可されるトラフィックの割合は、次のように計算されます。
Traffic ratio = 100% / Number of recovery phases
たとえば、3つの回復フェーズとステージあたり最小5リクエストの場合:
| ステージ | 許可されたトラフィック | 動作 |
|---|---|---|
| 1 | 33% | MSE はリクエストの33%を通過させます。少なくとも5つのリクエストが通過した後、MSE はメトリックをチェックします。しきい値を下回る場合、ステージ2に進みます。上回る場合、サーキットブレーカーを再オープンします。 |
| 2 | 67% | MSE はリクエストの67%を通過させます。ステージ1と同じ評価です。 |
| 3 | 100% | すべてのリクエストが通過します。サーキットブレーカーは完全にクローズします。 |
ステージ内のリクエスト数がステップあたりの最小通過数を下回る場合、すべてのリクエストが通過できるようになるまで、システムは次の回復ステージに入ります。
例
遅い呼び出しのサーキットブレーカー
シナリオ: アプリケーションがサードパーティサービスを呼び出し、そのサービスが時折応答が遅く、タイムアウトを引き起こしてアプリケーションのパフォーマンスを低下させます。
設定:
| パラメーター | 値 | 根拠 |
|---|---|---|
| インターフェイス名 | test | 遅いダウンストリームサービスを呼び出すインターフェイス。 |
| 統計ウィンドウ期間 | 1 second | 劣化を迅速に検出します。 |
| 最小リクエスト数 | 10 | 低トラフィックのインターフェイスでのトリガーを回避します。 |
| しきい値タイプ | 遅い呼び出し率 (%) | エラーではなく応答時間をモニターします。 |
| 遅い呼び出し RT | 1000 ms | 1秒を超えるリクエストは遅い呼び出しです。 |
| サーキットブレーカー比率のしきい値 | 80% | リクエストの80%が遅い場合にトリップします。 |
| サーキットブレーカーの持続時間 (秒) | 10 seconds | すべてのリクエストを10秒間ブロックします。 |
| サーキットブレーカーポリシー | 単一検出回復 | 各サーキットブレーカー期間後に1つのリクエストをテストします。 |
動作: 1 秒以内に 10 を超えるリクエストが到着し、その 80% を超えるリクエストの処理に 1000 ms を超える時間がかかった場合、サーキットブレーカーが開きます。test インターフェイスへのすべてのリクエストは、次の 10 秒間失敗します。10 秒後、MSE は 1 つのリクエストを通過させます。そのリクエストが 1000 ms 未満で完了した場合、サーキットブレーカーは閉じます。そうでない場合、サーキットブレーカーはさらに 10 秒間再び開きます。
異常なリクエストのサーキットブレーカー
シナリオ: アプリケーションがサードパーティサービスからコンテンツを表示します。異常なリクエストが急増すると、劣化したコンテンツがユーザーエクスペリエンスを損ないます。
設定:
| パラメーター | 値 | 根拠 |
|---|---|---|
| インターフェイス名 | test | 異常なダウンストリームサービスを呼び出すインターフェイス。 |
| 統計ウィンドウ期間 | 1 second | 異常なリクエストの急増を迅速に検出します。 |
| 最小リクエスト数 | 10 | 低トラフィックのインターフェイスでのトリガーを回避します。 |
| しきい値タイプ | 異常な割合 (%) | 異常なリクエスト比率をモニターします。 |
| サーキットブレーカー比率のしきい値 | 80% | リクエストの80%が異常な場合にトリップします。 |
| サーキットブレーカーの持続時間 (秒) | 10 seconds | すべてのリクエストを10秒間ブロックします。 |
| サーキットブレーカーポリシー | 単一検出回復 | 各サーキットブレーカー期間後に1つのリクエストをテストします。 |
動作: 1 秒以内に 10 件を超えるリクエストが到着し、そのうち 80% 以上が異常である場合、サーキットブレーカーが開きます。その後 10 秒間、test インターフェイスへのすべてのリクエストは失敗します。10 秒後、MSE は 1 つのリクエストを通過させます。そのリクエストが成功した場合は、サーキットブレーカーが閉じます。それ以外の場合は、さらに 10 秒間再び開きます。
ベストプラクティス
適切な「しきい値タイプ」を選択する
レイテンシーがユーザーエクスペリエンスに直接影響する同期 API 呼び出しなど、応答時間の劣化が主な懸念事項である場合は、[遅い呼び出し率] を使用してください。
信頼性の低いサードパーティサービスへの呼び出しなど、ダウンストリームエラーが主なリスクである場合は、[異常な割合] を使用してください。
適切なウィンドウとしきい値の値を設定する
統計ウィンドウ: 短いウィンドウ (1~10秒) は問題をより迅速に検出しますが、トラフィックバーストにより敏感です。長いウィンドウ (1~5分) は、低トラフィックのインターフェイスに対してより安定した信号を提供します。
最小リクエスト数: 誤検知を回避するために、これを十分に高く設定してください。低トラフィックのインターフェイスの場合、長いウィンドウで最小5~10リクエストは、1秒あたり10リクエストよりも一般的に信頼性が高くなります。
回復ポリシーを選択する
[単一検出回復] は、クリーンに回復するサービス (機能するかしないか) にうまく機能します。
[プログレッシブ回復] は、部分的に回復している可能性のあるサービスにとってより安全です。これにより、オンラインに戻ったばかりのサービスが突然のトラフィックの洪水によって圧倒されるのを防ぎます。
ルールがアクティブであることを確認する
サーキットブレーカールールを保存した後、期待どおりに動作していることを確認します。
左側のナビゲーションウィンドウで [トラフィック管理] をクリックします。[フロー保護] タブで [ヒューズルール] タブをクリックして、設定されているすべてのルールとそのステータスを表示します。
保護対象のインターフェイスにテストトラフィックを生成し、サーキットブレーカーメトリックをモニターして、ルールが正しく作動することを確認します。
関連トピック
サーキットブレーカーに加えてリクエストレートを制御するには、「速度制限ルールを設定する」をご参照ください。