バックエンドサービスが処理能力を超えるリクエストを受信すると、レスポンスタイムが増加し、カスケード障害がマイクロサービス全体に広がる可能性があります。MSE クラウドネイティブゲートウェイのスロットリングポリシーは、ルートレベルでリクエストレートを上限値に制限することで、過剰なトラフィックがサービスに到達する前に拒否します。
MSE では、ルートレベルの速度制限ルールとして以下の 3 種類をサポートしています。これらのルールは相互に独立しており、同一ルート上で組み合わせて使用できます。
| ルールタイプ | 制御対象 | 使用タイミング |
|---|---|---|
| 速度制限ルール | ルート上の秒間クエリ数 (QPS) | 急激なトラフィックスパイクからの保護 |
| 同時実行数ルール | 同時に処理されるリクエスト数 | 長時間実行されるリクエストによるリソース枯渇の防止 |
| サーキットブレーカールール | エラー率またはレスポンスタイムのしきい値 | 不健全なバックエンドを隔離し、回復を可能にする |
速度制限の仕組み
ノードごとのしきい値ディストリビューション
設定したしきい値はゲートウェイレベルで適用されます。複数ノードからなるゲートウェイの場合、MSE はこのしきい値をノード数で割り、切り上げた値を各ノードに均等に割り当てます。
ノードごとのしきい値 = ceil(ゲートウェイレベルのしきい値 / ノード数)たとえば、2 ノードのゲートウェイで QPS しきい値を 1001 に設定した場合、各ノードは 501 QPS の制限を適用します。
3 種類のルールタイプの相互作用
速度制限、同時実行数、およびサーキットブレーカーの各ルールは、それぞれ独立して評価されます。リクエストがバックエンドに到達するには、ルート上で有効になっているすべてのルールを通過する必要があります。
速度制限ルールはリクエストレート (QPS) をチェックします。レートがしきい値を超えた場合、そのリクエストは即座に拒否されます。
同時実行数ルールは現在処理中のリクエスト数をチェックします。この数がしきい値を超えた場合、そのリクエストは即座に拒否されます。
サーキットブレーカールールはスライドウィンドウ内でレスポンスタイムまたはエラー率をモニターします。しきい値を超えた場合、サーキットが開き、設定された期間中、そのルートへのすべてのリクエストが拒否されます。
異なる障害モードに対応するため、単一のルート上でこれらのルールを任意の組み合わせで有効化できます。
速度制限ルールの設定
速度制限ルールは、ルート上の QPS が指定されたしきい値を超えた場合にリクエストを拒否します。
構成インターフェイスはゲートウェイバージョンによって異なります。ゲートウェイ v1.2.25 以降ではページ上でのインライン構成を使用します。ゲートウェイ v1.1.0~v1.2.24 ではダイアログボックスを使用します。以下では両方のインターフェイスについて説明します。ゲートウェイ v1.0.0 は基本的なタイムウィンドウ方式の速度制限のみをサポートしています。詳細については、「ゲートウェイ v1.0.0 向けの速度制限の設定」をご参照ください。
速度制限設定の開き方
MSE コンソールにログインします。上部ナビゲーションバーでリージョンを選択します。
左側のナビゲーションウィンドウで、[クラウドネイティブゲートウェイ] > [ゲートウェイ] を選択します。[ゲートウェイ] ページで、ゲートウェイの名前をクリックします。
左側ナビゲーションウィンドウで Routes をクリックし、Routes タブを開きます。
対象のルートを見つけ、Actions 列の Policies をクリックします。
Policies セクションで、Throttling タブをクリックします。
ゲートウェイ v1.2.25 以降
Throttling タブで、Throttling Rules サブタブをクリックします。
以下のパラメーターを設定します。
パラメーター 説明 Gateway QPS Threshold このルートに対してゲートウェイ全体で許容される最大 QPS Web Fallback Behavior しきい値超過時の動作:Return Specified Content または Go to Specified Page Redirect URL (Go to Specified Page を選択した場合)リダイレクト先の URL HTTP Status Code (Return Specified Content を選択した場合)クライアントに返される HTTP ステータスコード。デフォルト:429 Returned Content Type (Return Specified Content を選択した場合)応答フォーマット:Plain Text または JSON Returned HTTP Text (Return Specified Content を選択した場合)応答本文の内容 Enable ルールの有効/無効を切り替えます New または Save をクリックします。確認メッセージで OK をクリックします。
ゲートウェイ v1.1.0~v1.2.24
Throttling タブで、Throttling Rules サブタブをクリックし、Add Throttling Rule をクリックします。
Add Throttling Protection Rule ダイアログボックスで以下の操作を行います。
Configure a Throttling Rule ステップで、Overall QPS Threshold フィールドに値を入力し、Whether to open スイッチをオンにします。Next をクリックします。
Configure Throttling Behavior ステップで、New behavior をクリックし、速度制限がトリガーされた際に返される HTTP 応答を定義します。
New をクリックします。
同時実行数ルールの設定
同時実行数ルールは、ルート上で処理中のリクエスト総数が指定されたしきい値を超えた場合にリクエストを拒否します。遅延または長時間実行されるリクエストによるリソース消費を抑制するために使用します。
速度制限の設定を開く
速度制限ルールの設定 > 速度制限設定の開き方 の手順に従ってください。
ゲートウェイ v1.2.25 以降
Throttling タブで、Concurrency Rules サブタブをクリックします。
以下のパラメーターを設定します。
パラメーター 説明 Gateway Parallelism Threshold このルートに対してゲートウェイ全体で許容される最大同時リクエスト数 Web Fallback Behavior しきい値超過時の動作:Return Specified Content または Go to Specified Page Redirect URL (Go to Specified Page を選択した場合)リダイレクト先の URL HTTP Status Code (Return Specified Content を選択した場合)クライアントに返される HTTP ステータスコード。デフォルト:429 Returned Content Type (Return Specified Content を選択した場合)応答フォーマット:Plain Text または JSON Returned HTTP Text (Return Specified Content を選択した場合)応答本文の内容 Enable ルールの有効/無効を切り替えます New または Save をクリックします。確認メッセージで OK をクリックします。
ゲートウェイ v1.1.0~v1.2.24
Throttling タブで、Concurrency Rules サブタブをクリックし、Add Concurrency Rules をクリックします。
Add Concurrency Protection Rule ダイアログボックスで以下の操作を行います。
Configure a Protection Rule ステップで、Overall Request Concurrency Threshold フィールドに値を入力し、Whether to open スイッチをオンにします。Next をクリックします。
Configure Throttling Behavior ステップで、Add Behavior をクリックし、速度制限がトリガーされた際に返される HTTP 応答を定義します。
New をクリックします。
サーキットブレーカールールの設定
サーキットブレーカールールは、ルート上のレスポンスタイムまたはエラー率がしきい値を超えた場合に、一時的にトラフィックのルーティングを停止します。サーキットブレーカー期間中、そのルートへのすべてのリクエストは設定されたフォールバック応答とともに拒否されます。期間終了後、ゲートウェイはプローブリクエストを送信し、通常のトラフィックを再開するか、再度サーキットブレーカーをトリガーするかを判断します。
速度制限設定の開き方
速度制限ルールの設定 > 速度制限設定の開き方 の手順に従ってください。
ゲートウェイ v1.2.25 以降
Throttling タブで、Fuse rule サブタブをクリックします。
以下のパラメーターを設定します。
パラメーター 説明 Statistical window duration 評価ウィンドウの長さ。有効範囲:1 秒~120 分 Minimum number of requests サーキットブレーカーがトリガーされる前にウィンドウ内で必要となる最小リクエスト数。リクエスト数がこの値未満の場合、しきい値を超えていてもサーキットブレーカーは作動しません Threshold Type サーキットブレーカー条件の評価に使用するメトリクス。詳細については、「しきい値タイプのオプション Fusing time (s) サーキットブレーカー期間の長さ。この期間中、そのルートへのすべてのリクエストが拒否されます Web Fallback Behavior サーキットブレーカー期間中の動作:Return Specified Content または Go to Specified Page Redirect URL (Go to Specified Page を選択した場合)リダイレクト先の URL HTTP Status Code (Return Specified Content を選択した場合)クライアントに返される HTTP ステータスコード。デフォルト:429 Returned Content Type (Return Specified Content を選択した場合)応答フォーマット:Plain Text または JSON Returned HTTP Text (Return Specified Content を選択した場合)応答本文の内容 Enable ルールの有効/無効を切り替えます しきい値タイプのオプション
Slow call ratio (%) — 遅延呼び出しの割合がしきい値を超えた場合にサーキットブレーカーをトリガーします。Slow call RT パラメーターを設定して、許容される最大レスポンスタイム (RT) を定義します。この値を超える RT のリクエストは遅延呼び出しとしてカウントされます。サーキットブレーカー終了後、ゲートウェイは次のリクエストをテストします。その RT が許容範囲内であればトラフィックを再開し、そうでなければ再度サーキットブレーカーをトリガーします。
Abnormal proportion (%) — 失敗したリクエストの割合がしきい値を超えた場合にサーキットブレーカーをトリガーします。サーキットブレーカー終了後、ゲートウェイは自動的にトラフィックを再開します。
Create または Save をクリックします。確認メッセージで OK をクリックします。
ゲートウェイ v1.1.0~v1.2.24
Throttling タブで、Fuse rule サブタブをクリックし、Added fusing rule をクリックします。
Add Circuit Breaking Protection Rule ダイアログボックスで以下の操作を行います。
Configure a Protection Rule ステップで、以下のパラメーターを設定し、Whether to open スイッチをオンにします。Next をクリックします。
パラメーター 説明 Statistical window duration 評価ウィンドウの長さ。有効範囲:1 秒~120 分 Minimum number of requests サーキットブレーカーがトリガーされる前に必要な最小リクエスト数 Threshold Type Slow call ratio (%) または Abnormal proportion (%)。遅延呼び出し比率の場合、Slow call RT パラメーターも設定してレスポンスタイムのしきい値を定義します Fusing time (s) サーキットブレーカー期間の長さ Fuse recovery strategy サーキットブレーカー期間終了後の回復動作。Single probe recovery を選択すると、トラフィック再開前に次のリクエストをテストします Configure Throttling Behavior ステップで、Add Behavior をクリックし、サーキットブレーカー期間中に返される HTTP 応答を定義します。
New をクリックします。
ゲートウェイ v1.0.0 向けの速度制限の設定
v1.0.0 を実行しているゲートウェイは、基本的なタイムウィンドウ方式の速度制限のみをサポートしています。速度制限、同時実行数、およびサーキットブレーカールールを使用するには、v1.1.0 以降にスペックアップしてください。
MSE コンソールにログインします。
左側ナビゲーションウィンドウで Cloud-native Gateway > Gateways を選択します。上部ナビゲーションバーでリージョンを選択します。
Gateways ページで、対象のゲートウェイ名をクリックします。
左側ナビゲーションウィンドウで Routes > Route Settings を選択します。対象のルートを見つけ、Actions 列の Policies をクリックします。
Policies セクションで、Throttling タブをクリックします。
スロットリングポリシーが存在しない場合は、Configure policy をクリックします。
スロットリングポリシーがすでに存在する場合は、スロットリングしきい値の横にある編集アイコンをクリックします。
Throttling Threshold セクションで、以下のパラメーターを設定し、OK をクリックします。
パラメーター 説明 Time Window リクエストをカウントする期間。デフォルト:1 秒 Maximum Number of Requests (Single-machine Request Threshold) タイムウィンドウ内で 1 つのゲートウェイノードが許容する最大シングルサーバーリクエスト数 Enabled をオンにして、スロットリングポリシーを有効化します。
有効化すると、ゲートウェイは設定されたタイムウィンドウとしきい値に基づいてこのルートのリクエストを制限します。
無効化すると、リクエストは制限されません。
設定の検証
スロットリングポリシーが期待通りに動作することを確認するため、テストリクエストを送信します。
curl -I http://<gateway-ip>/demo/item/list<gateway-ip> はご利用の Ingress ゲートウェイの IP アドレスに置き換えてください。
正常な応答(速度制限がトリガーされていない場合):
HTTP/1.1 200 OK
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
cache-control: no-cache, no-store, max-age=0, must-revalidate
pragma: no-cache
expires: 0
x-frame-options: DENY
content-type: application/json
content-length: 86
date: Mon, 29 Nov 2021 08:28:00 GMT
x-envoy-upstream-service-time: 4
server: istio-envoy速度制限された応答(HTTP 429):
HTTP/1.1 429 Too Many Requests
x-local-rate-limit: true
content-length: 18
content-type: text/plain
date: Mon, 29 Nov 2021 08:28:01 GMT
server: istio-envoyx-local-rate-limit: true ヘッダーにより、ゲートウェイのスロットリングポリシーがリクエストを拒否したことが確認できます。
よくある質問
同一ルートで複数のルールタイプを使用できますか?
はい。速度制限、同時実行数、およびサーキットブレーカールールは相互に独立しています。単一のルート上で任意の組み合わせを有効化できます。リクエストがバックエンドに到達するには、有効になっているすべてのルールを通過する必要があります。
複数ノードのゲートウェイにおけるノードごとのしきい値はどのように計算されますか?
MSE はゲートウェイレベルのしきい値をノード数で割り、切り上げた値を各ノードに適用します。たとえば、2 ノードのゲートウェイで QPS しきい値を 1001 に設定した場合、ノードごとの制限は 501 QPS になります。
サーキットブレーカー終了後はどうなりますか?
動作はしきい値タイプによって異なります。
Slow call ratio:ゲートウェイはプローブリクエストを送信します。レスポンスタイムが許容範囲内であればトラフィックを再開し、そうでなければ再度サーキットブレーカーをトリガーします。
Abnormal proportion:サーキットブレーカー期間終了後、トラフィックは自動的に再開されます。
各ルールタイプに必要なゲートウェイバージョンはどれですか?
| ルールタイプ | 最低必要なゲートウェイバージョン |
|---|---|
| 基本的なタイムウィンドウ方式の速度制限 | v1.0.0 |
| 速度制限、同時実行数、およびサーキットブレーカールール | v1.1.0 |
| インライン構成(ダイアログボックスなし) | v1.2.25 |