スロットリングは、過剰な外部リクエストによるバックエンドサービスの過負荷を防ぎ、カスケード障害を回避します。Cloud-native API Gateway は、指定された時間枠内でルート上のリクエスト数を制限するルートレベルのスロットリングポリシーをサポートしています。
スロットリングポリシーの設定
設定するスロットリングしきい値は、ゲートウェイレベルのしきい値です。ゲートウェイノードのスロットリングしきい値は、次の式で計算できます:ゲートウェイレベルのスロットリングしきい値 / ノード数。計算結果が小数の場合、小数点以下は切り上げられます。たとえば、デモルートの秒間クエリ数 (QPS) が 1001 で、ゲートウェイに 2 つのノードがある場合、各ゲートウェイノードのデモルートに対する QPS 制限は 501 になります。
-
Cloud-native API Gateway インスタンスの内部または外部でスロットリングポリシーを設定できます。
外部 API
-
Cloud-native API Gateway コンソールにログインします。左側のナビゲーションペインで、[API] をクリックします。上部メニューで、リージョンを選択します。
-
対象の API をクリックします。ドロップダウンリストから、スロットリングを設定するインスタンスを選択するか、All Instances を選択します。上部メニューにあるインスタンスのドロップダウンリストから、対象のインスタンスを選択します。
-
Routes で、対象のルートをクリックします。
内部 API
-
Cloud-native API Gateway コンソールにログインします。左側のナビゲーションペインで、Instance をクリックします。上部メニューで、リージョンを選択します。
-
Instance ページで、対象のゲートウェイインスタンスの ID をクリックします。左側のナビゲーションペインで、[API] をクリックし、対象の API をクリックします。
-
Routes で、対象のルートをクリックします。
-
-
Configure Policy タブをクリックし、Inbound Processing セクションで Enable Policy/Plug-in をクリックします。
-
スロットリングポリシーを追加します。オプションには、[トラフィックコントロール]、[同時実行コントロール]、[サーキットブレーカー] があります。
トラフィックコントロール
スロットリングルールはルートの QPS を監視し、しきい値に達すると即座にトラフィックをブロックして、トラフィックの急増によるバックエンドサービスの障害を防ぎます。
[トラフィック制御] カードをクリックします。Add Policy:[トラフィック制御] パネルで、パラメーターを設定し、Add をクリックします。
パラメーター
説明
[Enable or Not]
このスイッチをオンにすると、トラフィックコントロールポリシーが有効になります。
[Overall QPS Threshold]
[Overall QPS Threshold]です。
[Web Fallback Behavior]
[Web Fallback Behavior]を Return Specific Content または Redirect to Specified Page に設定します。
Web Fallback Behavior を Return Specific Content に設定した場合:
[HTTP Status Code]
返す [HTTP Status Code]です。デフォルト値は 429 です。
[Type of Returned Content]
レスポンスボディの [Type of Returned Content]です。Regular Text または [JSON] を選択できます。
[HTTP Text]
返すレスポンスボディです。
Web Fallback Behavior を Redirect to Specified Page に設定した場合:
[Redirect URL]
[Redirect URL] です。
同時実行コントロール
同時実行ルールは、ゲートウェイで処理中のリクエスト総数を追跡し、その数が指定されたしきい値に達するとトラフィックをブロックして、高同時実行シナリオにおいてバックエンドサービスの可用性を保護します。
[同時実行数制御] カードをクリックします。Add Policy: [同時実行数制御] パネルで、パラメーターを設定し、Add をクリックします。
パラメーター
説明
[Enable or Not]
このスイッチをオンにすると、同時実行ルールが有効になります。
[Overall Concurrency Threshold]
[Overall Concurrency Threshold]です。
[Web Fallback Behavior]
[Web Fallback Behavior]を Return Specific Content または Redirect to Specified Page に設定します。
Web Fallback Behavior を Return Specific Content に設定した場合:
[HTTP Status Code]
返す [HTTP Status Code]です。デフォルト値は 429 です。
[Type of Returned Content]
レスポンスボディの [Type of Returned Content]です。Regular Text または [JSON] を選択できます。
[HTTP Text]
返すレスポンスボディです。
Web Fallback Behavior を Redirect to Specified Page に設定した場合:
[Redirect URL]
[Redirect URL] です。
サーキットブレーカー
サーキットブレーカールールは、ルートのレスポンスタイム (RT) または例外率が指定されたしきい値に達すると作動 (トリップ) します。一度作動すると、ゲートウェイはバックエンドサービスを保護するために、設定された期間、そのルートへのすべてのリクエストを拒否し、その後自動的に呼び出しを再開します。
[サーキットブレーキング] カードをクリックします。Add Policy:[サーキットブレーキング] パネルでパラメーターを設定し、Add をクリックします。
パラメーター
説明
[Enable or Not]
このスイッチをオンにすると、サーキットブレーカールールが有効になります。
[Statistical Window Duration]
時間枠の期間です。有効な値:1 秒~120 分。
[Minimum Number of Requests]
サーキットブレーカーを作動させるための最小リクエスト数です。現在の時間枠内のリクエスト数がこのパラメーターの値より少ない場合、サーキットブレーカールールが満たされてもサーキットブレーカーは作動しません。
[Threshold Type]
サーキットブレーカーを作動させるために使用されるメトリックです。Slow Call Ratio (%) または Exception Ratio (%) を選択できます。
-
Slow Call Ratio (%) を選択した場合は、最大レスポンスタイムである Slow Call RT を設定する必要があります。リクエストのレスポンスタイムがこの値を超えると、低速コールと見なされます。ルールを有効にすると、統計ウィンドウ内のリクエスト数が最小リクエスト数を超え、かつ低速コール率が指定のしきい値を超えた場合、ブレーカーの持続時間中、リクエストは拒否されます。ブレーカーの持続時間が経過すると、サーキットブレーカーはハーフオープン状態になります。次のリクエストのレスポンスタイムが指定された Slow Call RT 未満であれば、サーキットはクローズします。そうでない場合、サーキットは再びオープンします。
-
Exception Ratio (%) を選択した場合は、サーキットブレーカーを作動させる例外率を設定する必要があります。ルールを有効にすると、統計ウィンドウ内のビジネス例外の数が最小リクエスト数を超え、かつ例外率がしきい値を超えた場合、ブレーカーの持続時間中、リクエストは拒否されます。
[Slow Call RT]
許容される [Slow Call RT] (最大レスポンスタイム) です。
[Circuit Breaking Ratio Threshold]
低速コール率または例外率のパーセンテージしきい値です。指定されたしきい値に達するか、超えた場合、サーキットブレーカーが作動します。有効な値:0~100。これらの値は 0%~100% を表します。
[Circuit Breaking Duration (s)]
サーキットブレーカーがアクティブな状態を維持する期間です。この期間中、ルートへのすべてのリクエストは拒否されます。
[Web Fallback Behavior]
[Web Fallback Behavior]を Return Specific Content または Redirect to Specified Page に設定します。
Web Fallback Behavior を Return Specific Content に設定した場合:
[HTTP Status Code]
返す [HTTP Status Code]です。デフォルト値は 429 です。
[Type of Returned Content]
レスポンスボディの [Type of Returned Content]です。Regular Text または [JSON] を選択できます。
[HTTP Text]
返すレスポンスボディです。
Web Fallback Behavior を Redirect to Specified Page に設定した場合:
[Redirect URL]
[Redirect URL] です。
-
結果の確認
次のコマンドを実行して、テストリクエストを送信します。
curl -I http://121.196.XX.XX/demo/item/list // ゲートウェイのイングレス 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-envoy