システム保護は、さまざまな予期しない状況に備えて、ノードレベルのトラフィック保護を提供します。たとえば、トラフィック保護ルールが設定されていないインターフェイスでトラフィックスパイクが発生した場合、システム保護はセーフティネットとして機能し、アプリケーションの安定性を確保します。
システム保護とトラフィック保護の関係については、「システム保護とトラフィック保護の比較」をご参照ください。
保護機能
Microservices Governance は、サーバー側トラフィックとクライアント側トラフィック向けに、次のシステム保護機能を提供します。トリガーメトリックとアプリケーションの負荷特性に基づいて、設定する機能を決定してください。
| 機能 | トリガーメトリック | 適用対象 | 最小エージェントバージョン |
| 適応型過負荷保護 | CPU 使用率 | すべてのサーバー側インターフェイス | 3.1.4 以降 |
| 合計 QPS スロットリング | ノードの合計 QPS | すべてのサーバー側インターフェイス | 4.2.0 以降 |
| 合計同時実行数スロットリング | ノードの合計同時実行数 | すべてのサーバー側インターフェイス | 4.2.0 以降 |
| 異常コールのサーキットブレーク | インターフェイスのエラー率 | インターフェイスレベルのサーキットブレークルールが設定されているインターフェイスを除く、すべてのクライアント側インターフェイス | 4.2.0 以降 |
| スローコールのサーキットブレーク | インターフェイスのスローコール率 | インターフェイスレベルのサーキットブレークルールが設定されているインターフェイスを除く、すべてのクライアント側インターフェイス | 4.2.0 以降 |
制限事項
システム保護を設定する前に、次の制限事項に注意してください。
優先度 :適応型過負荷保護、合計 QPS スロットリング、および合計同時実行数スロットリングは、トラフィック保護ルールよりも優先度が低くなります。
レスポンスステータスコード :スロットリングがトリガーされると、システム保護は 429 ステータスコードを返します。カスタムステータスコードはサポートされていません。
前提条件
アプリケーションを Microservices Governance に接続します。詳細については、「ACK マイクロサービスアプリケーションを MSE ガバナンスセンターに接続する」および「ECS マイクロサービスアプリケーションを MSE ガバナンスセンターに接続する」をご参照ください。
アプリケーションのエージェントが、設定したい機能をサポートするバージョンで実行されていること。
操作手順
MSE コンソールにログインし、上部のナビゲーションバーでリージョンを選択します。
左側のナビゲーションウィンドウで、マイクロサービス管理センター > アプリケーション管理 を選択します。
アプリケーション一覧 ページで、目的のアプリケーションのリソースカードをクリックします。左側のナビゲーションウィンドウで、[トラフィック管理] をクリックします。
[System protection] タブをクリックします。使用する各機能について、[Mode] を設定し、このトピックの該当セクションで説明されているしきい値を設定します。
機能が想定どおりにトラフィックを保護していることを確認するには、[System protection] タブの左側にあるイベントリストと、右側のトレンドチャートを確認します。機能によるスロットリングを停止するには、[Mode] を無効のオプションに設定します。
適応型過負荷保護
仕組み
適応型過負荷保護は、CPU 使用率を使用してシステム負荷を測定し、サーバー側トラフィックのスロットリング率を適応的に調整します。予期しないトラフィックスパイクが発生した場合でも、CPU 使用率を設定したしきい値内で比較的安定させます。
シナリオ
適応型過負荷保護は、サーバー側インターフェイスに対して CPU ベースのフォールバック保護を提供します。予期しないインターフェイスでのスパイクによりシステムの CPU 使用率が上昇し、主要インターフェイスの応答時間 (RT) に影響する CPU バウンドのアプリケーションで使用します。
コンソール
[System protection] タブの左側には、適応型過負荷保護イベントが表示されます。右側には、過去 5 分間におけるアプリケーションノードの平均 CPU 使用率の推移が表示されます。
ページ上部には、適応型過負荷保護の [Mode] 設定があります。右側の CPU 使用率の折れ線グラフでは、青の破線が 保護しきい値を示します。これは保護のウォーターマークとなるしきい値です。
イベントは、アルゴリズムの状態変化に基づいてノードレベルでレポートされます。イベントには、スロットリング開始、スロットリング継続中、およびスロットリング終了が含まれます。
イベントの [Actions] 列にある [View] リンクをクリックすると、該当するノード IP アドレスの CPU 使用率データを照会できます。タイムラインはイベントがレポートされた時刻に巻き戻されるため、イベントがトリガーされた時点の CPU 使用率とノードのスロットリング確率を確認できます。
| パラメータ | 説明 |
| [Mode] |
|
| CPU 使用率 | 想定する CPU 使用率のしきい値です。適応型過負荷保護は、実際のシステム CPU 使用率と設定した CPU 使用率しきい値を組み合わせ、アルゴリズムによりインターフェイスのスロットリング確率を適応的に調整します。高負荷時には、CPU 使用率が設定しきい値の周辺で小さく変動するように、システムが一部のリクエストを拒否します。定常状態の CPU 使用率は、各アプリケーションの特性によって異なります。負荷テストまたは履歴データから定常状態の CPU 使用率の最大値を特定し、その値にマージンを加えてください。 |
| 例外 | 詳細については、「例外の設定」をご参照ください。 |
合計 QPS スロットリング
仕組み
合計 QPS スロットリングは、ノードレベルの合計 QPS を追跡します。これは 1 つのノード上のすべてのサーバー側インターフェイスの QPS の合計であり、しきい値を超えるリクエストをスロットリングします。
シナリオ
すべてのシステムが CPU バウンドの傾向が強いとは限りません。一部のアプリケーションは、メモリ、ネットワーク、またはその他の制約により、CPU 負荷が低い場合でもパフォーマンスが低下します。合計 QPS スロットリングはノードの合計 QPS に基づいてトラフィックをスロットリングするため、トラフィックベースの保護方法を提供します。
予期しないインターフェイスでのスパイクが限られたリソースの競合を引き起こし、主要インターフェイスに影響する場合は、合計 QPS スロットリングを使用します。
コンソール
[System protection] タブの左側には、合計 QPS スロットリングイベントが表示されます。右側には、過去 5 分間におけるアプリケーションノードの平均合計 QPS の推移が表示されます。
右側の折れ線グラフには、[Total QPS]、[Passed QPS]、[Blocked QPS] の推移曲線が、しきい値の参照線とともに表示されます。これにより、スロットリングの効果を確認できます。
イベントは、合計 QPS スロットリングが実際に発生したノードとインターフェイスに基づき、ノードおよびインターフェイスレベルでレポートされます。イベントは 5 分ごとにレポートされ、直前の 5 分間に発生したスロットリングを対象とします。
イベントの [Actions] 列にある [View] リンクをクリックすると、該当するノード IP アドレスの合計 QPS を照会できます。タイムラインは、イベントがレポートされた時刻付近まで巻き戻されるため、ノードの合計 QPS とスロットリング動作が想定どおりかを確認できます。インターフェイス詳細ページとノード詳細ページでは、インターフェイスおよびノードレベルのデータなど、より詳細な情報を確認できます。
| パラメータ | 説明 |
| [Mode] |
|
| 合計 QPS しきい値 | ノードレベルの合計 QPS しきい値です。負荷テストまたは履歴データからノードの定常状態の合計 QPS を特定し、その値にマージンを加えてください。 |
| 例外 | 詳細については、「例外の設定」をご参照ください。 |
合計同時実行数スロットリング
仕組み
合計同時実行数スロットリングは、ノードレベルの合計同時実行数を追跡します。これは 1 つのノード上のすべてのサーバー側インターフェイスの同時リクエスト数の合計であり、しきい値を超えるリクエストをスロットリングします。
シナリオ
呼び出し RT が高い (一般的に 1 秒超) シナリオでは、QPS スロットリングには明確な問題があります。スレッドプール、メモリ、接続プールなどの競合するシステムリソースが占有されると、リクエストがキューに溜まり、インターフェイスの RT がさらに上昇します。QPS ベースのスロットリングだけに依存すると、毎秒少数のリクエストはシステムに流入し続けますが、キューに溜まったリクエストは数秒以内に処理できません。キューが増大し、RT がさらに上昇し、新規および既存の両方のリクエストの RT が大幅に増加します。
同時実行数スロットリングでは、一定数のリクエストが未完了のまま残っている間、新規リクエストが直ちに拒否されます。リクエストはスロットリングされますが、システムが現在のリクエストを処理し終えた後は、新規リクエストがより短い待ち時間で通過します。全体として、リクエストの成功率と平均 RT の両方が大幅に改善します。
予期しないインターフェイスでのスパイクが限られたリソースの競合、キューの増大、およびすべてのリクエストの RT 上昇を引き起こす場合は、合計同時実行数スロットリングを使用します。
コンソール
[System protection] タブの左側には、合計同時実行数スロットリングイベントが表示されます。右側には、過去 5 分間におけるアプリケーションノードの合計同時リクエスト数の平均値の推移が表示されます。
イベントは、合計同時実行数スロットリングが実際に発生したノードとインターフェイスに基づき、ノードおよびインターフェイスレベルでレポートされます。イベントは 5 分ごとにレポートされ、直前の 5 分間に発生したスロットリングを対象とします。
イベントの [Actions] 列にある [View] リンクをクリックすると、該当するノード IP アドレスの合計同時実行数を照会できます。タイムラインは、イベントがレポートされた時刻付近まで巻き戻されるため、ノードの合計同時実行数とスロットリング動作が想定どおりかを確認できます。インターフェイス詳細ページとノード詳細ページでは、インターフェイスおよびノードレベルのデータなど、より詳細な情報を確認できます。
| パラメータ | 説明 |
| [Mode] |
|
| 合計同時実行数しきい値 | ノードレベルの合計同時実行数しきい値です。負荷テストまたは履歴データからノードの定常状態の合計同時実行数を特定し、その値にマージンを加えてください。 |
| 例外 | 詳細については、「例外の設定」をご参照ください。 |
異常コールのサーキットブレーク
仕組み
異常コールのサーキットブレークは、各クライアント側インターフェイスのエラー率を追跡します。エラー率が設定したしきい値を超えると、そのインターフェイスのサーキットブレーカーがトリップします。サーキットブレーク中は、インターフェイスへのリクエストはフェイルファストします。一定間隔で、システムはプローブリクエストを通過させます。プローブリクエストが成功すると、サーキットブレークは終了します。
シナリオ
異常コールのサーキットブレークは、主に次の 2 つのシナリオを対象とします。
タイムアウトエラー :クライアント側インターフェイスでタイムアウトエラー率が高い場合は、通常、サービス提供側に問題があることを示します。これにより、呼び出し元であるアプリケーションにリクエストが溜まり、アプリケーションの他のインターフェイスにも影響します。サーキットブレークにより、提供側が異常な間はこれらのリクエストがフェイルファストし、滞留を防止します。
タイムアウト以外のエラー :クライアント側インターフェイスのタイムアウト以外のエラー率が高すぎる場合、異常コールのサーキットブレークは、処理可能なスロットリング例外をスローします。これにより縮退効果が得られ、異常時のユーザーエクスペリエンスが向上します。
コンソール
[System protection] タブの左側には、異常コールのサーキットブレークイベントが表示されます。右側には、過去 5 分間におけるアプリケーションのエラー率上位 10 インターフェイスが表示されます。
イベントは、異常コールのサーキットブレークが実際に発生したノードとインターフェイスに基づき、ノードおよびインターフェイスレベルでレポートされます。イベントは 5 分ごとにレポートされ、直前の 5 分間に発生したスロットリングを対象とします。
| パラメータ | 説明 |
| [Mode] |
|
| サーキットブレーク率しきい値 (%) | インターフェイスレベルのサーキットブレーク率しきい値です。 |
| 例外 | 詳細については、「例外の設定」をご参照ください。 |
詳細設定
| パラメータ | 説明 |
| 統計ウィンドウ期間 (秒) | 統計時間ウィンドウの長さです。有効な値:1 秒~120 分。 |
| サーキットブレーク期間 (s) | サーキットブレークがトリガーされた後に継続する期間です。リソースがサーキットブレーク状態に入ると、設定したサーキットブレーク期間内はすべてのリクエストがフェイルファストします。 |
| 最小リクエスト数 | サーキットブレークをトリガーするために必要な最小リクエスト数です。現在の統計ウィンドウ内のリクエスト数がこの値未満の場合、サーキットブレーク条件を満たしていてもルールはトリガーされません。 |
| サーキットブレーク復旧戦略 | サーキットブレーカーが復旧フェーズ (ハーフオープン状態) に入ったときに使用する復旧戦略です。
|
スローコールのサーキットブレーク
仕組み
スローコールのサーキットブレークは、各クライアント側インターフェイスのスローコール率を追跡します。スローコール率が設定したしきい値を超えると、そのインターフェイスのサーキットブレーカーがトリップします。サーキットブレーク中は、インターフェイスへのリクエストはフェイルファストします。一定間隔で、システムはプローブリクエストを通過させます。プローブリクエストが成功すると、サーキットブレークは終了します。
シナリオ
スローコールのサーキットブレークは、基本的に異常コールのサーキットブレークのタイムアウトシナリオと同じシナリオを対象とします。違いは、タイムアウト設定に依存せずに、スローコールを定義する RT の基準を動的に調整できる点です。
コンソール
[System protection] タブの左側には、スローコールのサーキットブレークイベントが表示されます。右側には、過去 5 分間におけるアプリケーションの平均 RT 上位 10 インターフェイスが表示されます。
イベントは、スローコールのサーキットブレークが実際に発生したノードとインターフェイスに基づき、ノードおよびインターフェイスレベルでレポートされます。イベントは 5 分ごとにレポートされ、直前の 5 分間に発生したスロットリングを対象とします。
| パラメータ | 説明 |
| [Mode] |
|
| スローコール RT (ms) | レスポンスタイムがこの値を超えるリクエストは、スローコールと見なされます。 |
| 縮退しきい値 (%) | 設定したスローコール RT を超える RT のリクエスト割合がこのしきい値を超えると、サーキットブレークがトリガーされます。 |
| 例外 | 詳細については、「例外の設定」をご参照ください。 |
詳細設定
| パラメータ | 説明 |
| 統計ウィンドウ期間 (秒) | 統計時間ウィンドウの長さです。有効な値:1 秒~120 分。 |
| サーキットブレーク期間 (s) | サーキットブレークがトリガーされた後に継続する期間です。リソースがサーキットブレーク状態に入ると、設定したサーキットブレーク期間内はすべてのリクエストがフェイルファストします。 |
| 最小リクエスト数 | サーキットブレークをトリガーするために必要な最小リクエスト数です。現在の統計ウィンドウ内のリクエスト数がこの値未満の場合、サーキットブレーク条件を満たしていてもルールはトリガーされません。 |
| サーキットブレーク復旧戦略 | サーキットブレーカーが復旧フェーズ (ハーフオープン状態) に入ったときに使用する復旧戦略です。
|
例外
仕組み
すべてのシステム保護機能に対して例外を設定できます。システム保護は、例外リストに含まれるインターフェイスを、ルールをチェックせずに常に通過させます。
例外を使用するには、エージェントバージョン 4.2.0 以降が必要です。
シナリオ
多くの場合、例外を設定する必要があるのは、ヘルスチェックエンドポイントと重要なシステムインターフェイスのみです。ヘルスチェックエンドポイントの例外により、ノードのヘルスステータスが影響を受けることを防止します。重要なシステムインターフェイスには、独自のインターフェイスレベルのスロットリング制限があり、システムレベルのスロットリングの影響を受けないことが想定されています。
コンソール
[System protection] タブの左側には、直接選択できるインターフェイスが表示されます。これらは直近に呼び出されたインターフェイスです。左側に表示されないインターフェイスについては、入力ボックスに名前を入力して Enter を押し、選択したインターフェイスに追加します。
選択したインターフェイスは、× をクリックして 1 つずつ削除するか、[Remove all] をクリックしてすべてクリアできます。システム保護は、選択したインターフェイスに設定済みのルールを適用しません。
システム保護とトラフィック保護の比較
システム保護と トラフィック保護 はどちらもアプリケーションを定常状態に保ちますが、対象とするシナリオと、発生するトラフィック損失のレベルが異なります。
システム保護は、ノードレベルのメトリックに基づいてトラフィック保護を提供します。アプリケーション自体を定常状態に保ち、ほとんどのシナリオをカバーします。しかし、システム保護はアプリケーションの観点で動作し、すべてのインターフェイスを同等に扱います。一方で、同一アプリケーション内でもインターフェイスは重要度やシステム負荷への影響が異なります。トラフィック保護では、インターフェイスごとに異なるしきい値を設定できるため、より多くのシナリオをカバーし、同等の保護を提供しながら可能な限りトラフィックのスロットリングを抑えられます。
全体として、システム保護とトラフィック保護はいずれも有効です。シナリオカバレッジとトラフィック損失の観点ではトラフィック保護の方が優れており、システム保護は設定が容易です。そのため、ベストプラクティスは両者の併用です。システム保護でアプリケーションの安定性を確保し、トラフィック保護できめ細かい設定を行うことで、保護効果を損なわずに損失 (スロットリングされるトラフィック) を低減します。
関連ドキュメント
トラフィック保護ポリシーの詳細については、「トラフィック保護」をご参照ください。