トラフィックスパイクや応答が遅い下流依存関係により、アプリケーション全体に障害が波及する可能性があります。SAE は Microservices Engine (MSE) のトラフィック保護機能を統合しており、マイクロサービスアプリケーションに対して、速度制限、同時実行数隔離、サーキットブレーカー、ホットスポットパラメーター保護の各ルールを SAE コンソールから一元的に適用できます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
デプロイ済みの SAE アプリケーション。詳細については、「アプリケーションのデプロイメント」をご参照ください。
MSE のマイクロサービスガバナンス Enterprise Edition が有効化されていること。詳細については、「マイクロサービスガバナンスの有効化」をご参照ください。
コストに関する考慮事項
MSE は SAE とは別途課金されます。料金の詳細については、「マイクロサービスガバナンスの課金概要」をご参照ください。
制限事項
トラフィック保護は、2023 年 11 月 8 日以降に作成されたマイクロサービスアプリケーションのみに適用されます。
トラフィック保護タブを開く
SAE コンソールにログインします。左側のナビゲーションウィンドウで、[アプリケーション] > [アプリケーション] を選択します。
上部のナビゲーションバーでリージョンを選択します。[名前空間] のドロップダウンリストから名前空間を選択し、アプリケーション名をクリックします。
左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [トラフィックガバナンス] を選択し、[トラフィック保護] タブをクリックします。
ルールの構成
すべてのルールタイプは、同一の 3 ステップ式ダイアログワークフローを共有します。
[保護シナリオの選択] — API の種類、トラフィックの方向、およびインターフェイス名を指定します。
[保護ルールの構成] — しきい値と動作を設定します。
[保護動作の構成] — ルールに関連付ける動作(フォールバック応答)を指定します。
ルールを作成した後は、対応するタブから編集または削除できます。
速度制限ルールの作成
速度制限ルールは、秒間クエリ数 (QPS) を監視します。QPS がしきい値に達すると、システムは着信トラフィックを遮断または遅延させることで、トラフィックスパイク時のアプリケーションの安定性を確保します。
[インターフェイスのフロー制御] タブで、[速度制限ルールの追加] をクリックします。
[速度制限保護ルールの追加] ダイアログボックスで、3 つのステップをすべて完了します。
[保護ルールの構成] ステップで、以下のパラメーターを設定します。
| パラメーター | 説明 | デフォルト |
|---|---|---|
| 開くかどうか | ON に切り替えると、ルールが作成直後に即時有効化されます。 | 無効 |
| [スタンドアロン QPS しきい値] | ルールをトリガーする QPS 値です。 | — |
| フロー制御効果 | ブロックされたリクエストの処理方法です。詳細については、「フロー制御効果の選択」をご参照ください。 | — |
フロー制御効果の選択
| 効果 | 動作 | 使用する場合 |
|---|---|---|
| 即時失敗 | QPS しきい値を超えたリクエストは即時に拒否されます。応答コンテンツは適応モジュールの構成によって決定されます。 | バックエンドのキャパシティ保護のために厳格なカットオフが必要な場合。 |
| キュー待ち | リクエストは一定のレートで処理され、超過分はキューに積まれます。タイムアウト期間を超えてキューに滞留したリクエストは失敗します。キューのタイムアウトを必ず設定してください。 | ピークシフト(バーストを破棄せず、遅延させる)を実現したい場合。 |
同時実行数隔離ルールの作成
同時実行数隔離ルールは、インターフェイスまたは依存関係に対する同時実行スレッド数の上限を設定します。上限に達すると、超過分のリクエストは拒否され、アクティブスレッド数がしきい値を下回るまで待機します。これにより、スレッド枯渇による障害のカスケードを防止できます。
[同時実行数隔離] タブで、[隔離ルールの追加] をクリックします。
[隔離保護ルールの追加] ダイアログボックスで、3 つのステップをすべて完了します。
[保護ルールの構成] ステップで、以下のパラメーターを設定します。
| パラメーター | 説明 | デフォルト |
|---|---|---|
| 開くかどうか | ON に切り替えると、ルールが作成直後に即時有効化されます。 | 無効 |
| 同時実行数のしきい値 | リクエスト処理に許可される最大同時実行スレッド数です。 | — |
サーキットブレーカールールの作成
サーキットブレーカールールは、下流依存関係のレスポンスタイム (RT) または異常リクエスト比率を監視します。しきい値を超えると、システムは依存先の下流アプリケーションの優先度を即座に低下させ、サーキットブレーカーの持続時間中は呼び出しません。持続時間が経過した後、サーキットブレーカーは構成済みポリシーに基づいて回復をテストします。
サーキットブレーカールールの作成手順:
[サーキットブレークルール] タブで、[サーキットブレークルールを追加] をクリックします。
[サーキットブレーキングルールの追加] ダイアログボックスで、3 つのステップをすべて完了します。
[保護ルールの構成] ステップで、以下のパラメーターを設定します。
| パラメーター | 説明 | デフォルト |
|---|---|---|
| [統計ウィンドウの持続時間] | しきい値評価に使用される時間ウィンドウです。有効範囲:1 秒~120 分。 | — |
| 最小リクエスト数 | サーキットブレーキングをトリガーするためにウィンドウ内で必要な最小リクエスト数です。この数に満たない場合、しきい値を満たしていてもルールはトリガーされません。 | — |
| しきい値の種類 | ルール評価に使用されるメトリックです:遅延呼び出し比率 (%) または 異常比率 (%)。 | — |
| 低速呼び出し RT | (遅延呼び出し比率のみ)ミリ秒単位の応答時間しきい値です。この値を超えるリクエストは遅延呼び出しとしてカウントされます。 | — |
| サーキットブレーク比率しきい値 | サーキットブレーキングをトリガーする遅延または異常呼び出しの割合です。 | — |
| [サーキットブレーキング持続時間 (秒)] | ([詳細オプションの表示] をクリック)サーキットが開いたままとなる時間です。この期間中、該当リソースへのすべての呼び出しは失敗します。 | — |
| サーキットブレーカー ポリシー | ([詳細オプションの表示] をクリック)持続時間が経過した後の回復テスト方法です。詳細については、「サーキットブレーキングポリシーの選択」をご参照ください。 | 単一検出による回復 |
サーキットブレーキングポリシーの選択
| ポリシー | 動作 | 使用する場合 |
|---|---|---|
| 単一検出による回復 | サーキットブレーキング持続時間が経過した後、次のリクエストがテストされます。そのリクエストが成功(遅延または異常でない)すれば、サーキットは閉じられます。失敗した場合は、再びサーキットが開きます。 | 依存関係は迅速かつ予測可能に回復します。 |
| 段階的回復 | トラフィックは N 段階の回復フェーズを通じて徐々に再導入されます。各フェーズでは、より大きな割合のリクエスト(T%、2T%、…、100%。ただし T = 100/N)が許可されます。いずれかのフェーズでしきい値を超えると、再びサーキットブレーキングがトリガーされます。[回復フェーズ数] および [各ステップでの最小通過数] を設定します。 | インシデント発生後に依存関係が不安定であり、徐々にウォームアップする必要がある場合。 |
段階的回復の例: 回復フェーズ数が 3、各フェーズでの最小通過数が 5 の場合、トラフィックは 33%、67%、100% の割合で導入されます。各フェーズでリクエスト数が 5 に達すると、しきい値チェックが実行されます。いずれかのフェーズで失敗した場合、サーキットは再び開きます。
RPC 向けホットスポットパラメーター保護ルールの作成
RPC 向けホットスポットパラメーター保護は、リソース呼び出し中に最も頻繁にアクセスされるパラメーターを特定し、パラメーター単位で速度制限を適用します。これにより、少数のホットパラメーターが不釣り合いなリソースを消費することを防ぎます。
パラメーターのインデックスは、SphU.entry(xxx, args) 内の位置に対応します。たとえば、SphU.entry(resourceName, EntryType.IN, 1, paramA, paramB) の場合、paramA のインデックスは 0、paramB のインデックスは 1 です。
[ホットスポットパラメーター保護 (RPC)] タブで、[ホットスポットパラメーター保護 (RPC) ルールの追加] をクリックします。
[ホットスポットパラメーター保護 (RPC) ルールの追加] ダイアログボックスで、3 つのステップをすべて完了します。
[保護ルールの構成] ステップで、以下のパラメーターを設定します。
| パラメーター | 説明 | デフォルト値 |
|---|---|---|
| パラメーター位置インデックス | SphU.entry(xxx, args) 内のホットパラメーターのインデックスです。 | — |
| 統計ディメンション | リクエスト数:指定期間内のリクエスト数を制限します。同時実行数:同時実行可能な最大リクエスト数を制限します。 | — |
| 統計サイクル時間 | 測定期間(単位:秒)です。例:サイクル = 10 秒、しきい値 = 5 の場合、各ホットパラメーターに対して 10 秒間に最大 5 回のアクセスが許容されます。 | — |
| 単一マシンしきい値 | 各ホットパラメーターに対する QPS しきい値です。 | — |
| フローコントロール効果 | ※「統計ディメンション = リクエスト数」の場合に利用可能です※即時失敗 または キュー待ち を選択できます。即時失敗 モードでは、バースト発生時に追加のリクエストを許容するため、バッファリングされたリクエスト数 を設定してください。キュー待ち モードでは、しきい値を超えたリクエストがキューに格納されます。キュー内で待機中のリクエストがタイムアウトした場合、そのリクエストは拒否されますので、適切なタイムアウト値を設定してください。 | — |
| 有効化の切り替え | ON に設定すると、ルール作成直後に即座に有効化されます。 | 無効 |
HTTP リクエスト向けホットスポットパラメーター保護ルールの作成
HTTP リクエスト向けホットスポットパラメーター保護は、クライアント IP、ホスト名、HTTP ヘッダー、URL パラメーターなどのリクエスト属性に基づき、値単位で速度制限を適用します。Web サービスに対する細かい制御に使用します。
[ホットスポットパラメーター保護 (HTTP リクエスト)] タブで、[新しいホットスポットパラメーター保護 (HTTP リクエスト)] をクリックします。
[新しいホットスポットパラメーター保護 (HTTP リクエスト)] ダイアログボックスで、3 つのステップをすべて完了します。
[保護ルールの構成] ステップで、以下のパラメーターを設定します。
| パラメーター | 説明 | デフォルト |
|---|---|---|
| [パラメーター属性] | 追跡対象のリクエスト属性です:[クライアント IP](プロキシ経由時は X-Forwarded-For を使用)、[リモートホスト]、[ヘッダー](ヘッダー名を指定。マッチングモードをサポート)、[URL パラメーター](パラメーター名を指定。マッチングモードをサポート)。 | — |
| しきい値の種類 | ルール評価に使用されるメトリックです。 | リクエスト数 |
| しきい値 | QPS しきい値です。サポートされる単位:秒、分、時、日。例:「1 分あたり 10 回」は、各パラメーター値あたり 1 分間に最大 10 回のリクエストを意味します。 | — |
| 開くかどうか | ON に切り替えると、ルールが作成直後に即時有効化されます。 | 無効 |
| [フロー制御方式] | ([詳細オプションの表示] をクリック)即時失敗:しきい値を超えたリクエストはブロックされ、カスタム動作応答またはデフォルトの HTTP 429 が返されます。キュー待ち:リクエストは一定のレートでキューに積まれ、タイムアウトを超えてキューに滞留したリクエストは即時に拒否されます。このモードを使用する場合は、QPS を 1,000 回/秒以下に設定してください。 | — |
| バーストサイズ | ([詳細オプションの表示] をクリック、即時失敗 のみ)トラフィックバースト時に許可される追加リクエスト数です。 | — |
| [タイムアウト期間] | ([詳細オプションの表示] をクリック、キュー待ち のみ)ミリ秒単位の最大キュー滞留時間です。この時間を超えてキューに滞留したリクエストは拒否されます。 | — |
動作の管理
動作とは、ルールがトリガーされた際に返されるフォールバック応答を定義するものです。たとえば、Web インターフェイスが速度制限の上限に達した場合、システムは汎用エラーではなくカスタム HTTP 応答を返すことができます。
動作の作成
[動作管理] タブで、[新しい動作] をクリックします。
[新しい動作] ダイアログボックスでパラメーターを構成し、[新規作成] をクリックします。
Apache Dubbo バージョン 2.7.0~2.7.3 ではカスタム動作がサポートされていません。これらのバージョンでは、速度制限がトリガーされた際に、java.lang.RuntimeException(SentinelBlockedExceptionを含む)が返されます。
戦略 = カスタム返却 の場合:
| パラメーター | 説明 | 例 |
|---|---|---|
| カスタムレスポンスクラス名 | 完全なクラスパス。 Map<K, V> や List<T> などのジェネリック型はサポートされていません。 | com.alibaba.demo.OrderService:getOrder(long) |
| カスタムレスポンスコンテンツ (JSON 形式) | ルールがトリガーされたときに返される JSON レスポンスボディです。 | {"id": "123", "name": "test"} |
戦略 = カスタム例外 の場合:
| パラメーター | 説明 | 例 |
|---|---|---|
| [例外クラス名] | 例外クラスの完全修飾パスです。 | java.lang.RuntimeException |
| 例外メッセージテキスト | ルールがトリガーされた際に返される例外メッセージです。 | "Operation failed" |
動作をルールに関連付ける
[トラフィック保護] タブで、対象のルールタイプのタブを開きます。目的のルールを見つけ、[操作] 列の [編集] をクリックします。
「[保護シナリオの選択]」および「[保護ルールの設定]」のステップを完了してください。
[保護動作の構成] ステップで、[関連付け動作] のドロップダウンリストから動作を選択するか、[新しい動作] をクリックして新規作成します。
[保存] をクリックします。
デフォルトのフォールバックを使用するには、[デフォルト動作] を選択し、[API タイプ] を未指定のままにしてください。
既に動作が関連付けられているインターフェイスに新しい動作を関連付けると、既存の動作は上書きされます。
[保護シナリオの選択] ステップでAPI タイプが指定されていない場合、デフォルトの動作が自動的に関連付けられます。
[API タイプ] を設定して動作を関連付けた後は、タイプを変更できません。
ユースケース
以下に、一般的なシナリオにおける各ルールタイプの構成例を示します。