すべてのプロダクト
Search
ドキュメントセンター

Microservices Engine:AI トークンレート制限

最終更新日:Jan 09, 2025

このトピックでは、特定のキーと値に基づいてトークンレート制限を実行する ai-token-ratelimit プラグインについて説明します。キーと値は、URL パラメーター、HTTP リクエストヘッダー、クライアント IP アドレス、コンシューマー名、または Cookie のキー名から取得されます。

重要

ai-token-ratelimit プラグインと AI 可観測性プラグイン を同時に有効にして、トークン数をカウントする必要があります。

実行属性

プラグイン実行ステージ: デフォルトステージ。プラグイン実行優先度: 600

構成の説明

構成項目

データ型

必須

デフォルト値

説明

rule_name

string

はい

-

レート制限ルールの名前。レート制限ルール名、レート制限タイプ、レート制限キー名、およびレート制限キーの実際の値を Redis キーに連結できます。

rule_items

オブジェクトの配列

はい

-

指定された項目シーケンスに基づいてレート制限ルールを照合するために使用される項目。項目に基づいてレート制限ルールが一致した場合、他のルールを照合する必要はありません。

rejected_code

int

いいえ

429

リクエストが調整されたときに返される HTTP ステータスコード。

rejected_msg

string

いいえ

リクエストが多すぎます

リクエストが調整されたときに返されるレスポンスの本文。

redis

object

はい

-

Redis 関連の構成。

次の表は、rule_items の構成フィールドについて説明しています。

フィールド

データ型

必須

デフォルト値

説明

limit_by_header

string

いいえ。limit_by_* フィールドのいずれか 1 つを構成できます。

-

レート制限のキー値を取得するために使用される HTTP リクエストヘッダーの名前。

limit_by_param

string

いいえ。limit_by_* フィールドのいずれか 1 つを構成できます。

-

レート制限のキー値を取得するために使用される URL パラメーターの名前。

limit_by_header

string

いいえ。limit_by_* フィールドのいずれか 1 つを構成できます。

-

レート制限のキー値を取得するために使用される HTTP リクエストヘッダーの名前。

limit_by_param

string

いいえ。limit_by_* フィールドのいずれか 1 つを構成できます。

-

レート制限のキー値を取得するために使用される URL パラメーターの名前。

limit_by_consumer

string

いいえ。limit_by_* フィールドのいずれか 1 つを構成できます。

-

レート制限のキー値を取得するために使用される HTTP リクエストヘッダーの名前です。システムは、ルールに基づいて特定の HTTP リクエストヘッダーを照合し、各リクエストヘッダーに基づいてレートを個別に計算します。limit_keys を構成する場合、正規表現またはアスタリスク (*) がサポートされています。

limit_by_cookie

string

いいえ。limit_by_* フィールドのいずれか 1 つを構成できます。

-

レート制限のキー値を取得するために使用される URL パラメーターの名前です。システムは、ルールに基づいて特定の URL パラメーターを照合し、各 URL パラメーターに基づいて個別にレートを計算します。limit_keys を構成する場合、正規表現またはアスタリスク (*) がサポートされています。

limit_by_per_header

string

いいえ。limit_by_* フィールドのいずれか 1 つを構成できます。

-

レート制限のキー値を取得するために使用される HTTP リクエストヘッダーの名前。システムはルールに基づいて特定の HTTP リクエストヘッダーを照合し、各リクエストヘッダーに基づいてレートを個別に計算します。limit_keys を構成する場合、正規表現またはアスタリスク (*) がサポートされます。

limit_by_per_param

string

いいえ。limit_by_* フィールドのいずれか 1 つを構成できます。

-

レート制限のキー値を取得するために使用される URL パラメーターの名前。システムはルールに基づいて特定の URL パラメーターを照合し、各 URL パラメーターに基づいてレートを個別に計算します。limit_keys を構成する場合、正規表現またはアスタリスク (*) がサポートされます。

limit_by_per_consumer

string

いいえ。limit_by_* フィールドのいずれか 1 つを構成できます。

-

レート制限のキー値を取得するために使用される IP アドレス。リクエストヘッダーから IP アドレスを取得するために、from-header-x-forwarded-for などの from-header-ヘッダー名 を構成できます。また、from-remote-addr を構成して、ピアソケットの IP アドレスを直接取得することもできます。システムはルールに基づいて特定の IP アドレスを照合し、各 IP アドレスに基づいてレートを個別に計算します。

limit_keys

オブジェクトの配列

はい

-

特定のキー値が一致した後にレート制限がトリガーされる回数。

次の表は、limit_keys の構成フィールドについて説明しています。

フィールド

データ型

必須

デフォルト値

説明

key

string

はい

-

limit_by_per_headerlimit_by_per_paramlimit_by_per_consumerlimit_by_per_cookie では、一致するキー値です。正規表現またはアスタリスク (*) がサポートされています。正規表現を使用する場合は、正規表現の前に regexp: を付ける必要があります。アスタリスク (*) を使用すると、すべてのキー値が一致となります。正規表現の例: regexp: ^d.*。この例では、d で始まるすべての文字列が一致となります。limit_by_per_ip では、IP アドレスまたは CIDR ブロックがサポートされています。

token_per_second

int

いいえ。token_per_secondtoken_per_minutetoken_per_hourtoken_per_day フィールドのいずれか 1 つを設定できます。

-

1 秒あたりにリクエストできるトークンの数。

token_per_minute

int

いいえ。token_per_secondtoken_per_minutetoken_per_hourtoken_per_day フィールドのいずれか 1 つを設定できます。

-

1 分あたりにリクエストできるトークンの数。

token_per_hour

int

いいえ。token_per_secondtoken_per_minutetoken_per_hourtoken_per_day フィールドのいずれか 1 つを設定できます。

-

1 時間あたりにリクエストできるトークンの数。

token_per_day

int

いいえ。token_per_secondtoken_per_minutetoken_per_hourtoken_per_day フィールドのいずれか 1 つを設定できます。

-

1 日あたりにリクエストできるトークンの数。

次の表は、limit_keys の構成フィールドについて説明しています。

フィールド

データ型

必須

デフォルト値

説明

service_name

string

はい

-

Redis サービス名。my-redis.dns や redis.my-ns.svc.cluster.local などの特定のサービスタイプを持つ完全修飾ドメイン名 (FQDN) です。

service_port

int

いいえ

サービスタイプが静的サービスの場合、デフォルト値は 80 です。その他のサービスの場合、デフォルト値は 6379 です。

ApsaraDB for Redis インスタンスのサービスポート番号。

ユーザー名

文字列

いいえ

-

ApsaraDB for Redis インスタンスにログオンするために使用されるユーザー名。

パスワード

文字列

いいえ

-

ApsaraDB for Redisインスタンスにログオンするために使用するパスワード。

key

string

はい

-

ApsaraDB for Redisインスタンスの接続タイムアウト期間です。単位:ミリ秒。

設定例

apikey パラメーターに基づいてリクエストを識別し、リクエストに対して異なるレート制限操作を実行します。

rule_name: default_rule
rule_items:
  - limit_by_param: apikey
    limit_keys:
      - key: 9a342114-ba8a-11ec-b1bf-00163e1250b5
        token_per_minute: 10
      - key: a6a6d7f2-ba8a-11ec-bec2-00163e1250b5
        token_per_hour: 100
  - limit_by_per_param: apikey
    limit_keys:
      # 正規表現を使用して、a で始まるすべての文字列を照合します。 apikey パラメーターに一致する各リクエストに対して、1 秒あたり 10 トークン (TPS) が許可されます。
      - key: "regexp:^a.*"
           token_per_second: 10
      # 正規表現を使用して、b で始まるすべての文字列を照合します。 apikey パラメーターに一致する各リクエストに対して、1 分あたり 100 トークン (TPM) が許可されます。
      - key: "regexp:^b.*"
        token_per_minute: 100
      # すべてのリクエストが照合されます。 リクエストごとに、1 時間あたり 1,000 トークン (TPH) が許可されます。
      - key: "*"
        token_per_hour: 1000
redis:
  service_name: redis.static

リクエストヘッダー x-ca-key に基づいてリクエストを識別し、リクエストに対して異なるレート制限操作を実行します。

rule_name: default_rule
rule_items:
  - limit_by_header: x-ca-key
    limit_keys:
        - key: 102234
        token_per_minute: 10
      - key: 308239
        token_per_hour: 10
  - limit_by_per_header: x-ca-key
    limit_keys:
      # 正規表現を使用して、a で始まるすべての文字列を照合します。 apikey パラメーターに一致する各リクエストに対して、10 TPS が許可されます。
      - key: "regexp:^a.*"
        token_per_second: 10
      # 正規表現を使用して、b で始まるすべての文字列を照合します。 apikey パラメーターに一致する各リクエストに対して、100 TPM が許可されます。
      - key: "regexp:^b.*"
        token_per_minute: 100
      # すべてのリクエストが照合されます。 リクエストごとに、1,000 TPH が許可されます。
      - key: "*"
        token_per_hour: 1000          

redis:
  service_name: redis.static

リクエストヘッダー x-forwarded-for に基づいてピア IP アドレスを取得し、リクエストに対して異なるレート制限操作を実行します。

rule_name: default_rule
rule_items:
  - limit_by_per_ip: from-header-x-forwarded-for
    limit_keys:
      # 正確な IP アドレスが使用されます。
      - key: 1.1.1.1
        token_per_day: 10
      # CIDR ブロックが使用されます。 CIDR ブロック内の各 IP アドレスに対して、1 日あたり 100 トークン (TPD) が許可されます。
      - key: 1.1.1.0/24
        token_per_day: 100
      # デフォルトでは、IP アドレスごとに 1,000 TPD が許可されます。
      - key: 0.0.0.0/0
        token_per_day: 1000
redis:
  service_name: redis.static

コンシューマーに基づいてリクエストを識別し、リクエストに対して異なるレート制限操作を実行します。

rule_name: default_rule
rule_items:
  - limit_by_consumer: ''
    limit_keys:
      - key: consumer1
        token_per_second: 10
      - key: consumer2
        token_per_hour: 100
  - limit_by_per_consumer: ''
    limit_keys:
      # 正規表現を使用して、a で始まるすべての文字列を照合します。 特定のコンシューマーに一致する各リクエストに対して、10 TPS が許可されます。
      - key: "regexp:^a.*"
        token_per_second: 10
      # 正規表現を使用して、b で始まるすべての文字列を照合します。 特定のコンシューマーに一致する各リクエストに対して、100 TPM が許可されます。
      - key: "regexp:^b.*"
        token_per_minute: 100
      # すべてのリクエストが照合されます。 リクエストごとに、1,000 TPH が許可されます。
      - key: "*"
        token_per_hour: 1000   

redis:
  service_name: redis.static

Cookie のキーと値のペアに基づいてリクエストを識別し、リクエストに対して異なるレート制限操作を実行します。

rule_name: default_rule
rule_items:
  - limit_by_cookie: key1
    limit_keys:
      - key: value1
        token_per_minute: 10
      - key: value2
        token_per_hour: 100
  - limit_by_per_cookie: key1
    limit_keys:
      # 正規表現を使用して、a で始まるすべての文字列を照合します。 特定の Cookie 値に一致する各リクエストに対して、10 TPS が許可されます。
      - key: "regexp:^a.*"
        token_per_second: 10
      # 正規表現を使用して、b で始まるすべての文字列を照合します。 特定の Cookie 値に一致する各リクエストに対して、100 TPM が許可されます。
      - key: "regexp:^b.*"
        token_per_minute: 100
      # すべてのリクエストが照合されます。 リクエストごとに、1,000 TPH が許可されます。
      - key: "*"
        token_per_hour: 1000 
rejected_code: 200
rejected_msg: '{"code":-1,"msg":"Too many requests"}'
redis:
  service_name: redis.static