このトピックでは、スロットリングプラグインの構成について説明し、いくつかの一般的なシナリオの例を示します。
1. 概要
スロットリングプラグインは、API 呼び出しのレートを制限します。トラフィックは、
API、App (アクセスに使用される AccessKey)、user (アプリのオーナー)、またはカスタムパラメーターに基づいてスロットルできます。スロットリングプラグインは 2 つの構成テンプレートをサポートしています:パラメーターベースのスロットリング構成: このテンプレートは、
カスタムパラメーターに基づいてスロットリングを構成するために使用されます。基本的なスロットリング構成: このテンプレートは、コンソールの
スロットリング機能と互換性があります。
スロットリング機能は現在、プラグインシステムの一部です。既存のスロットリングインターフェイスとコンソールは引き続き利用できます。スロットリングポリシーとスロットリングプラグインは同じタイプのプラグインです。API にスロットリングプラグインをバインドすると、既存のスロットリングポリシーは無効になります。元のスロットリングインターフェイスまたはコンソールでスロットリングポリシーを作成または変更すると、変更はプラグインシステムに同期されます。ただし、プラグインシステムで行った変更は、スロットリングインターフェイスまたはコンソールに同期できません。
2. 基本的なスロットリング構成
2.1 スロットリング機能
2.1.1 スロットリングのしきい値
API トラフィック制限: ポリシーにバインドされている API に対して、単位時間あたりに許可される呼び出しの最大数。時間の単位は、秒、分、時間、または日にすることができます。例: 5,000 コール/分。
APP トラフィック制限: ポリシーにバインドされている任意の API に対して、各アプリから単位時間あたりに許可される呼び出しの最大数。例: 50,000 コール/時間。
ユーザーのトラフィック制限: ポリシーにバインドされている任意の API に対して、各 Alibaba Cloud アカウントから単位時間あたりに許可される呼び出しの最大数。Alibaba Cloud アカウントは複数のアプリを持つことができ、この制限はアカウントに属するすべてのアプリからの合計トラフィックに適用されます。例: 500,000 コール/日。
1 つのスロットリングプラグインで、前述のすべてのしきい値を同時に指定できます。ユーザーレベルのスロットリングしきい値は API レベルのスロットリングしきい値を超えることはできず、アプリケーションレベルのスロットリングしきい値はユーザーレベルのスロットリングしきい値を超えることはできません。
スロットリングポリシーに特別なアプリケーションまたはユーザーを追加することもできます。これにより、各アプリケーションまたはユーザーに特別なスロットリングしきい値を設定できます。特別なスロットリングしきい値は、API レベルのスロットリングしきい値を超えることはできません。
2.1.2 時間単位とスロットリングアルゴリズム
API Gateway スロットリングプラグインは、時間単位として秒 (SECOND)、分 (MINUTE)、時間 (HOUR)、および日 (DAY) をサポートします。固定タイムウィンドウアルゴリズムは、分、時間、および日の単位に使用されます。トークンバケットアルゴリズムは、デフォルトで秒単位に使用されます。トークンバケットアルゴリズムがニーズを満たさない場合は、代わりに固定タイムウィンドウアルゴリズムを構成できます。2 つのアルゴリズムは次のように説明されます:
トークンバケットアルゴリズム: これは、秒レベルのスロットリングのデフォルトのアルゴリズムです。トークンバケットアルゴリズムには、トークンバケットと待機キューという 2 つの概念があります。API Gateway エンジンは、定期的にトークンをトークンバケットに追加します。クライアントリクエストが API Gateway に到着すると、まずバケットからトークンを取得しようとします。トークンが取得されると、リクエストは通過します。トークンが取得されない場合、リクエストはキューに入ります。次のバッチのトークンは、キュー内のリクエストに優先的に割り当てられます。キューがいっぱいの場合、後続のリクエストは 429 エラーを受け取ります。リクエストがキューに入るのを防ぐには、
blockingMode: QUICK_RETURNを構成します。これを構成すると、リクエストがトークンの取得に失敗した場合、システムはすぐに 429 エラーを返します。固定タイムウィンドウアルゴリズム: 分、時間、または日を時間単位として使用する場合に使用されるアルゴリズムです。このアルゴリズムは、単位時間内に受け入れられるリクエストの総数を制限します。たとえば、1 分あたり 1,000 リクエストの制限は、制限を超えるリクエストに対して 429 コードが返されることを指定します。リクエスト数は、次の分の開始時にリセットされます。
2.2 基本的なスロットリングプラグインの構成
プラグインは JSON または YAML フォーマットで構成できます。どちらのフォーマットも同じスキーマを使用します。yaml to json 変換ツールを使用して、フォーマット間で変換できます。次のコードは、YAML フォーマットのテンプレートを示しています。
---
unit: SECOND # 時間の単位。有効な値: SECOND、MINUTE、HOUR、DAY。
apiDefault: 1000 # デフォルトの API レベルのスロットリングしきい値。
controlMode: FIX_WINDOW # 時間単位が秒の場合に固定タイムウィンドウアルゴリズムが使用されることを指定します。
blockingMode: QUICK_RETURN # トークンバケットアルゴリズムを使用しているときにトークンの取得に失敗したリクエストに対して 429 が返されることを指定します。
userDefault: 30 # オプション。デフォルトのユーザーレベルのスロットリングしきい値。このしきい値を 0 に設定すると、ユーザーレベルのスロットリングは実行されません。ユーザーレベルのスロットリングしきい値は、API レベルのスロットリングしきい値を超えることはできません。
appDefault: 30 # オプション。デフォルトのアプリケーションレベルのスロットリングしきい値。このしきい値を 0 に設定すると、アプリケーションレベルのスロットリングは実行されません。アプリケーションレベルのスロットリングしきい値は、ユーザーレベルのスロットリングしきい値を超えることはできません。
specials: # オプション。特別なスロットリング設定。スロットリングポリシーで、特別なアプリケーションまたはユーザーのスロットリングしきい値を設定できます。
- type: "APP" # 特別なスロットリングタイプ。値 APP は、AppKey に基づいて特別なアプリケーションに対してスロットリングが実行されることを指定します。
policies:
- key: 10123123 # アプリケーション ID。アプリケーションの詳細ページからアプリケーションの ID を取得できます。このページに移動するには、API Gateway コンソールの左側のナビゲーションウィンドウで [API の呼び出し] > [アプリ] を選択し、アプリケーションリストでアプリケーションの名前をクリックします。
value: 10 # アプリの特別なスロットリングしきい値。このしきい値は、スロットリングポリシーのユーザーレベルのスロットリングしきい値を超えることはできません。
- key: 10123123 # アプリケーション ID。
value: 10 # アプリの特別なスロットリングしきい値。このしきい値は、スロットリングポリシーのユーザーレベルのスロットリングしきい値を超えることはできません。
- type: "USER" # 特別なスロットリングタイプ。値 USER は、特別な Alibaba Cloud アカウントに対してスロットリングが実行されることを指定します。
policies:
- key: 123455 # Alibaba Cloud アカウントの ID。Alibaba Cloud コンソールの右上隅にあるプロファイル画像の上にポインターを移動すると、ID を取得できます。
value: 100 # Alibaba Cloud アカウントの特別なスロットリングしきい値。このしきい値は、スロットリングポリシーの API レベルのスロットリングしきい値を超えることはできません。2.3 プラグインデータセットと基本的なスロットリングプラグインの併用
2.3.1 プラグインデータセットの作成
API Gateway コンソールにログインします。左側のナビゲーションウィンドウで、 をクリックし、[プラグインデータセット] タブをクリックします。
右上隅にある [データセットの作成] をクリックします。表示されるダイアログボックスで、データセットの [名前] を入力します。[タイプ] を TRAFFIC_CONTROL_POLICY に設定します。[OK] をクリックしてデータセットを作成します。
作成したデータセットに移動します。右上隅にある [データセットエントリの作成] をクリックします。表示されるページで、スロットリングプラグインのキーと値を構成します。キー は AppId または Alibaba Cloud アカウント ID です。値 は対応するスロットリング値です。
2.3.2 スロットリングプラグインでのプラグインデータセットの使用例
基本的なスロットリングプラグインは、プラグインデータセットをサポートしています。プラグインデータセットを使用して、特定のアプリケーションまたはアカウントに特別なスロットリングしきい値を構成できます。次のコードは例を示しています:
---
unit: SECOND # 時間の単位。有効な値: SECOND、MINUTE、HOUR、DAY。
apiDefault: 1000 # デフォルトの API レベルのスロットリングしきい値。
userDefault: 30 # オプション。デフォルトのユーザーレベルのスロットリングしきい値。このしきい値を 0 に設定すると、ユーザーレベルのスロットリングは実行されません。ユーザーレベルのスロットリングしきい値は、API レベルのスロットリングしきい値を超えることはできません。
appDefault: 30 # オプション。デフォルトのアプリケーションレベルのスロットリングしきい値。このしきい値を 0 に設定すると、アプリケーションレベルのスロットリングは実行されません。アプリケーションレベルのスロットリングしきい値は、ユーザーレベルのスロットリングしきい値を超えることはできません。
specials: # オプション。特別なスロットリング設定。スロットリングポリシーで、特別なアプリケーションまたはユーザーのスロットリングしきい値を設定できます。
- type: "APP" # 特別なスロットリングタイプ。値 APP は、AppKey に基づいて特別なアプリケーションに対してスロットリングが実行されることを指定します。
policyDatasetId: 87 b65008e92541938XXXXXXXX6eda5 # プラグインデータセットの ID。
policies:
- key: 10123123 # アプリケーション ID。アプリケーションの詳細ページからアプリケーションの ID を取得できます。このページに移動するには、API Gateway コンソールの左側のナビゲーションウィンドウで [API の呼び出し] > [アプリ] を選択し、アプリケーションリストでアプリケーションの名前をクリックします。
value: 10 # アプリの特別なスロットリングしきい値。このしきい値は、スロットリングポリシーのユーザーレベルのスロットリングしきい値を超えることはできません。
- key: 10123123 # アプリケーション ID。
value: 10 # アプリの特別なスロットリングしきい値。このしきい値は、スロットリングポリシーのユーザーレベルのスロットリングしきい値を超えることはできません。
- type: "USER" # 特別なスロットリングタイプ。値 USER は、特別な Alibaba Cloud アカウントに対してスロットリングが実行されることを指定します。
policyDatasetId: 87 b65008eXXXXXXXXXXXXa236eda5 # プラグインデータセットの ID。
policies:
- key: 123455 # Alibaba Cloud アカウントの ID。Alibaba Cloud コンソールの右上隅にあるプロファイル画像の上にポインターを移動すると、ID を取得できます。
value: 100 # Alibaba Cloud アカウントの特別なスロットリングしきい値。このしきい値は、スロットリングポリシーの API レベルのスロットリングしきい値を超えることはできません。プラグインデータセットは、基本的なスロットリングプラグインでのみサポートされます。パラメーターベースのスロットリングプラグインは、プラグインデータセットをサポートしていません。
3. パラメーターベースのスロットリング構成
パラメーターベースのスロットリングを使用すると、呼び出し元のリクエストパラメーターと条件付き実行に基づいてトラフィックを制御できます。次のパラメーターベースのスロットリング構成がサポートされています:
秒、分、時間、または日レベルでのスロットリングをサポートします。
リクエストパラメーターとシステムパラメーターに基づいて条件を設定し、異なるスロットリングルールを実行できます。
単一のパラメーターまたは複数のパラメーターの組み合わせを使用してスロットリングを設定できます。
スロットリングの範囲を API またはプラグインに設定できます。
3.1 パラメーターベースのスロットリングのクイックスタート
各クライアント IP アドレスに次のスロットリングルールを適用するシナリオを考えます。ユーザーが AppId 10001 を持つキーで認証する場合、スロットルを 100 リクエスト/秒 に設定します。その他のすべてのケースでは、スロットルを 10 リクエスト/秒 に設定します。
このシナリオでは、プラグインを次のように構成します。この例では、yaml を使用してプラグインを構成します。
---
scope: "PLUGIN"
#
# このスロットリングは 2 つのシステムパラメーターに依存します:
# 1. ユーザーの署名に使用される AppId。システムパラメーター CaAppId から取得されます。
# 2. ユーザーのソース ClientIP。システムパラメーター CaClientIp から取得されます。
parameters:
AppId: "System: CaAppId"
ClientIP: "System: CaClientIp"
rules:
# 最初のスロットリングポリシー。`AppId` が `10001` の場合に有効になります。各 ClientIP を `100/秒` にスロットルします。
- name: "Vip"
condition: "$AppId = 10001"
byParameters: "ClientIP"
limit: 100
period: SECOND
# 2 番目のスロットリングポリシーは `PerClientIP` という名前です。各 ClientIP を `10/秒` にスロットルします。
- name: "PerClientIP"
byParameters: "ClientIP"
bypassEmptyValue: true # `rules` 内のルールに条件がなく、byParameters パラメーターを条件として使用する場合、パラメーターが空であるか空の値が渡されると、このルールは有効になりません。代わりに、デフォルトのスロットリングポリシーが使用されます。
limit: 10
period: SECOND3.2 パラメーターベースのスロットリングプラグインの構成
プラグインのメタデータは、yaml または同等の json フォーマットを使用して構成できます。
---
scope: "PLUGIN" # スロットリングプラグインの範囲。有効な値: PLUGIN および API。
blockingMode: QUICK_RETURN # トークンを持たないリクエストがキューに入らないように指定します。代わりに、429 コードが返されます。詳細については、次のフィールドの説明をご参照ください。
controlMode: FIX_WINDOW # 時間単位が秒の場合に固定タイムウィンドウアルゴリズムが使用されることを指定します。
defaultLimit: 100 # デフォルトのスロットリング値 (デフォルト値が指定されている場合)。
defaultPeriod: SECOND # スロットリングのデフォルトの時間単位。
defaultRetryAfterBySecond: 60 # 次のリクエストまで待機する時間に関するアドバイスを提供する Retry-After ヘッダーを返します。
defaultErrorMessage: "Throttled by 100/SECOND"
parameters: # スロットリングに使用できるパラメーター。
clientIp: "System:CaClientIp"
userId: "Token:userId"
rules:
- name: "ByClientIp"
byParameters: "clientIp"
condition: "$clientIp !in_cidr '61.7.XX.XX/24'"
limit: 10
period: MINUTE
retryAfterBySecond: 60 # 次のリクエストまで待機する時間に関するアドバイスを提供する Retry-After ヘッダーを返します。
errorMessage: "Throttled by 10/MINUTE from ${clientIp}"
- name: "A maximum of 10 requests per minute are allowed for each user, except the administrator."
byParameters: "clientIp"
condition: "$userId !like 'admin%'"
limit: 10
period: MINUTE
retryAfterBySecond: 60 # 次のリクエストまで待機する時間に関するアドバイスを提供する Retry-After ヘッダーを返します。
- name: "A maximum of 10 requests per minute are allowed for each client IP address."
byParameters: "clientIp"
condition: "$clientIp in_cidr '67.0.XX.XX/8'"
limit: 10
period: MINUTE
- name: "A maximum of 15 requests per minute are allowed for each user."
condition: "$userId !like 'admin%'"
limit: 15
period: MINUTE
byParameters: "clientIp"フィールド:
scope(必須): スロットリングプラグインの範囲。有効な値はAPIとPLUGINです。複数の API が同じプラグインにバインドされている場合、scopeの値はスロットリングポリシーの範囲に影響します。たとえば、ポリシーが10 コール/秒に設定されている場合:値が
APIの場合、スロットリングポリシーは各 API に個別に適用されます。この例では、各 API の制限は10 コール/秒です。値が
PLUGINの場合、このプラグインにバインドされているすべての API がこの制限を共有します。この例のプラグインが API のグループにバインドされている場合、グループの合計トラフィック制限は10 コール/秒です。
parameters(必須): スロットリングに関与するパラメーターのリスト。詳細については、「パラメーターと条件式の使用」をご参照ください。rules(オプション): スロットリングポリシーのリスト。defaultLimitとperiodが設定されていない場合、このフィールドを空にすることはできません。各スロットリングポリシーには、次のフィールドが含まれます:name(必須): スロットリングポリシーの名前。値は[A-Za-z0-9_-]+に一致する有効な文字列である必要があり、同じプラグイン内で一意である必要があります。byParameters(必須): スロットリングパラメーター。複数のパラメーターを組み合わせる場合は、カンマ (,) で区切ります。たとえば、ClientIPは、ClientIPの各値に対して個別にスロットリングが実行されることを意味します。UserId,Actionは、これら 2 つのパラメーターの組み合わせ値に対して個別にスロットリングが実行されることを意味します。bypassEmptyValue(オプション): true に設定した場合、`byParameters` パラメーターが空であるか、空の値が渡された場合、このルールは有効になりません。これは、ルールに `condition` がなく、`byParameters` を条件として使用する場合にのみ適用されます。この場合、代わりにデフォルトのスロットリングポリシーが使用されます。condition(オプション): 条件が設定されている場合、このスロットリングポリシーは条件が満たされた場合にのみ実行されます。limit(必須): スロットリング値。これは正の整数である必要があります。値-1は、この条件が満たされた場合にスロットリングが適用されないことを意味します。period(必須): スロットリング期間。有効な値:SECOND、MINUTE、HOUR、またはDAY。errorMessage(オプション): カスタムエラーメッセージ。テンプレートとして定義できます。parametersで定義されたパラメーターは、${Name}フォーマットを使用して参照できます。retryAfterBySecond(オプション): 次のリクエストを行う前に待機する時間を示唆する Retry-After ヘッダーを返します。
defaultLimit(オプション): デフォルトのスロットリング値。これは正の整数である必要があります。defaultPeriod(オプション): スロットリング期間。有効な値:SECOND、MINUTE、HOUR、またはDAY。defaultErrorMessage(オプション): カスタムエラーメッセージ。カスタムエラーメッセージが構成されている場合、返されるX-Ca-Error-Messageヘッダーはカスタムメッセージを使用します。このメッセージはパラメーターを使用できません。defaultRetryAfterBySecond(オプション): デフォルトで返される Retry-After ヘッダー。次のリクエストを行う前に待機する時間を示唆します。blockingMode(オプション): API Gateway は、標準のトークンバケットアルゴリズムを使用してスロットリングを実装します。次のリストは、フィールド値とアルゴリズムについて説明しています。QUEUE (デフォルト): トークンバケットアルゴリズムには、トークンバケットと待機キューという 2 つの概念があります。API Gateway エンジンは、定期的にトークンをトークンバケットに追加します。クライアントリクエストが API Gateway に到着すると、まずバケットからトークンを取得しようとします。トークンが取得されると、リクエストは通過します。トークンが取得されない場合、リクエストはキューに入ります。次のバッチのトークンは、キュー内のリクエストに優先的に割り当てられます。キューがいっぱいの場合、後続のリクエストは 429 エラーを受け取ります。
QUICK_RETURN: この値を使用すると、リクエストはキューでトークンを待機しません。代わりに、429 コードが返されます。
controlMode: 時間単位が `SECOND` の場合に使用するスロットリングアルゴリズムを指定します。デフォルト値は TOKEN_BUCKET (トークンバケットアルゴリズム) です。FIX_WINDOW (固定タイムウィンドウアルゴリズム) に設定できます。
3.3 スロットリングプラグインでサポートされるパラメーター
次の表に、スロットリングプラグインでサポートされるパラメーターを示します。
ロケーション名 | 範囲 | 説明 |
メソッド | リクエスト | HTTP リクエストメソッド (大文字)、 |
パス | リクエスト | 完全な HTTP リクエストパス、 |
ヘッダー | リクエスト |
|
クエリ | リクエスト |
|
フォーム | リクエスト |
|
ホスト | リクエスト |
|
パラメーター | リクエスト |
|
システム | リクエスト |
|
トークン | リクエスト |
|
3.4 実行ルール
API Gateway は、次のルールを使用してパラメーターベースのスロットリングを実行します:
プラグインは、
parameters構成を使用して、リクエストコンテキストからパラメーター値を取得します。conditionがtrueと評価されるか、conditionが構成されていないすべてのルールが実行されます。リスト内の複数のマッチングするルールが同じ
byParameters構成を持つ場合、構成順で最初のルールのみが実行されます。他のルールは有効になりません。
4. 例
4.1 基本的なスロットリング
基本的なスロットリングは、API レベル、AppKey ベース、およびユーザーレベルのスロットリングをサポートします。
---
unit: SECOND # スロットリングのデフォルトの時間単位。有効な値: SECOND、MINUTE、HOUR、DAY。
apiDefault: 50 # デフォルトの API レベルのスロットリングしきい値。
defaultRetryAfterBySecond: 60 # デフォルトでは、Retry-After ヘッダーが返され、次のリクエストまで待機する時間に関するアドバイスが提供されます。
appDefault: 20 # オプション。デフォルトのアプリケーションレベルのスロットリングしきい値。このしきい値は、ユーザーレベルのスロットリングしきい値を超えることはできません。
userDefault: 30 # オプション。デフォルトのユーザーレベルのスロットリングしきい値。このしきい値は、API レベルのスロットリングしきい値を超えることはできません。
specials: # オプション。特別なスロットリング設定。スロットリングポリシーで、特別なアプリケーションまたはユーザーのスロットリングしきい値を設定できます。
- type: "APP" # 特別なスロットリングタイプ。値 APP は、AppKey に基づいて特別なアプリケーションに対してスロットリングが実行されることを示します。
policies:
- key: 10001 # アプリケーション ID。アプリケーションの詳細ページからアプリケーションの ID を取得できます。このページに移動するには、API Gateway コンソールの左側のナビゲーションウィンドウで [API の呼び出し] > [アプリ] を選択し、アプリケーションリストでアプリケーションの名前をクリックします。
value: 3 # アプリケーションの特別なスロットリングしきい値。このしきい値は、ユーザーレベルのスロットリングしきい値を超えることはできません。
- key: 10003
value: 40
- type: "USER" # 特別なスロットリングタイプ。値 USER は、特別な Alibaba Cloud アカウントに対してスロットリングが実行されることを示します。
policies:
- key: 102 # Alibaba Cloud アカウントの ID。Alibaba Cloud 管理コンソールの右上隅にあるプロファイル画像の上にポインターを移動すると、ID を取得できます。
value: 10 # Alibaba Cloud アカウントの特別なスロットリングしきい値。このしきい値は、API レベルのスロットリングしきい値を超えることはできません。
- key: 233
value: 354.2 パラメーターベースのスロットリング
この例は、レート制限ポリシーを構成する方法を示しています。
各ソース IP は
100 コール/分許可されます。クライアント IP が
58.66.XX.XX/24の範囲にある場合、アクセスは制限されません。63.0.XX.XXおよび73.0.XX.XX/24の範囲のクライアント IP の場合、アクセスは5 コール/日に制限されます。
---
scope: API # スロットリングの範囲。有効な値: API および PLUGIN。
parameters: # スロットリングに使用されるパラメーター。スロットリングは ClientIP パラメーターにのみ基づいて実行されます。このパラメーターの値は、CaClientIp システムパラメーターから取得できます。
ClientIp: "System:CaClientIp"
rules:
- name: whitelist # ホワイトリストポリシー。このポリシーで指定された条件を満たすクライアント IP アドレスに対しては、スロットリングは実行されません。
condition: "$ClientIp in_cidr '58.66.XX.XX/24'"
limit: -1 # 値 -1 は、スロットリングが実行されないことを示します。
- name: banList # 特別なスロットリングポリシー。クライアント IP アドレスがこのポリシーで指定された条件を満たす場合、クライアント IP アドレスに対して 1 日あたり最大 5 回の API 呼び出しが許可されます。
condition: "$ClientIp in_cidr '63.0.XX.XX' or $ClientIp in_cidr '73.0.XX.XX/24'"
byParameters: "ClientIp"
limit: 5
period: DAY
- name: 100perIp # デフォルトのスロットリングポリシー。各クライアント IP アドレスに対して、1 分あたり最大 100 回の API 呼び出しが許可されます。
byParameters: "ClientIp"
limit: 100
period: MINUTE # 時間の単位。有効な値: SECOND、MINUTE、HOUR、DAY。4.3 アンチ CC 攻撃の構成
このセクションでは、チャレンジコラプサー (CC) 攻撃を防ぐためにスロットリングプラグインを構成する方法の例を示します。
各ソース IP は
3 コール/秒許可されます。ソース IP が
3 コール/秒の制限を超えた場合、アクセスは 10 秒間ブロックされます。
---
scope: API # スロットリングの範囲。有効な値: API および PLUGIN。
defaultLimit: 3000 # デフォルトのスロットリングしきい値。
defaultPeriod: SECOND # スロットリングのデフォルトの時間単位。
defaultRetryAfterBySecond: 60 # デフォルトでは、Retry-After ヘッダーが返され、次のリクエストまで待機する時間に関するアドバイスが提供されます。
parameters: # スロットリングに使用されるパラメーター。スロットリングは ClientIP パラメーターにのみ基づいて実行されます。このパラメーターの値は、CaClientIp システムパラメーターから取得できます。
clientIp: "system:CaClientIp"
rules:
-name: "Each client IP address can initiate three API calls per second. If this threshold is exceeded, the client IP address is blocked for 10 seconds."
byParameters: "clientIp"
limit: 3
period: SECOND
blockingPeriodBySecond: 10 # 専用型インスタンスでのみ有効です。5. エラーコード
エラーコード | HTTP ステータスコード | エラーメッセージ | 説明 |
T429ID | 429 | Throttled by INNER DOMAIN Flow Control, ${Domain} is a test domain, only 1000 requests per day | デフォルトの第 2 レベルドメイン名を使用してアクセスする場合、制限は 1,000 コール/日 (中国本土以外のリージョンおよび中国 (香港) では 100 コール/日) です。この制限を解除するには、カスタムドメイン名をバインドしてください。 |
T429IN | 429 | Throttled by INSTANCE Flow Control | 現在のインスタンスのスロットリング制限がトリガーされました。 |
T429GR | 429 | Throttled by GROUP Flow Control | 現在のグループのスロットリング制限がトリガーされました。 |
T429PA | 429 | Throttled by API Flow Control | プラグインのデフォルトの API スロットリングがトリガーされました。 |
T429PR | 429 | Throttled by PLUGIN Flow Control | プラグインの特別なスロットリングルールがトリガーされました。 |
6. 制限事項
最大 16 個のパラメーターを定義できます。
単一の式は 512 文字を超えることはできません。
単一のプラグインのメタデータは、サイズが 50 KB を超えることはできません。
各プラグインは、最大 16 個の
rulesを持つことができます。各
ruleは、byParametersに最大 3 つのパラメーターを持つことができます。スロットリングパラメーターに多くのユニークな値がある場合、たとえば、ソース IP に基づいて日レベルのスロットリングを使用する場合、システムはメモリ使用量を管理するために一部のスロットリングレコードを解放することがあります。サーバーレスインスタンスの場合、パラメーターベースのスロットリングプラグインは最大 1,000 個の異なるパラメーター値を許可します。専用型インスタンスの場合、プラグインは最大 100,000 個の異なるパラメーター値を許可します。