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

Alibaba Cloud Service Mesh:RateLimitingPolicy フィールドの説明

最終更新日:Jan 13, 2025

RateLimitingPolicy を使用すると、Service Mesh(ASM)トラフィックスケジューリングスイートでポリシーを事前に設定できます。ASMインスタンス内のサービスのグローバルトラフィックのスロットリングを宣言的に設定できます。このトピックでは、RateLimitingPolicy のフィールドについて説明します。

次の設定は、Kubernetesクラスター内の HTTPBin サービスでスロットリングが実行されることを示しています。スロットリングに使用されるトークンバケットには、30秒ごとに 2 つのトークンが補充されます。つまり、30秒ごとに 2 つのリクエストが許可されます。トークンバケットの最大トークン数は 2 で、これはバーストトラフィックが許可されないことを示しています。リクエストは、user_id リクエストヘッダーによってグループ化されます。システムは、異なる user_id リクエストヘッダーを持つリクエストに対して個別にスロットリングを実行するかどうかを判断し、異なる user_id リクエストヘッダーを持つリクエストは、それぞれのトークンバケット内のトークンを消費します。

apiVersion: istio.alibabacloud.com/v1
kind: RateLimitingPolicy
metadata:
  name: ratelimit
  namespace: istio-system
spec:
  rate_limiter:
    bucket_capacity: 2
    fill_amount: 2
    parameters:
      interval: 30s
      limit_by_label_key: http.request.header.user_id
    selectors:
    - agent_group: default
      control_point: ingress
      service: httpbin.default.svc.cluster.local

RateLimitingPolicy フィールドの説明

RateLimitingPolicy は、ASMトラフィックスケジューリングスイートにおけるグローバルスロットリングポリシーを定義します。スロットリングが有効になるサービス、スロットリングポリシーの実行時パラメーター、およびスロットリングに使用されるトークンバケットの属性を指定します。

RateLimitingPolicySpec

RateLimitingPolicySpec は、RateLimitingPolicy のコア設定であり、spec フィールドに対応します。

フィールド

タイプ

必須

説明

rate_limiter

RateLimiter

はい

スロットリングポリシーを実行するリミッターの設定。

RateLimiter

RateLimiter は、リミッターのパラメーターと、リミッターが使用するトークンバケットを指定します。

フィールド

タイプ

必須

説明

fill_amount

double

はい

トークンバケットに毎回補充されるトークンの数。このフィールドは、RateLimiterParameters の interval フィールドと組み合わせて使用​​して、リクエストのスロットリングを実装できます。

bucket_capacity

double

はい

リミッターが使用するトークンバケットの最大容量。リクエストレートがトークンバケットの補充レートよりも低い場合、トークンバケット内のトークン数は、最大容量 bucket_capacity に達するまで増加し続けます。bucket_capacity を使用すると、ある程度のバーストトラフィックを許可できます。bucket_capacity フィールドが fill_amount フィールドと同じ値に設定されている場合、短期間でバーストトラフィックがスロットリングレートを超える状態は禁止されます。

parameters

RateLimiterParameters

はい

リミッターの設定パラメーター。

request_parameters

RateLimiterRequestParameters

いいえ

リミッターがリクエストに対して実行する操作の設定。

selectors

[]Selector

はい

スロットリングが有効になる特定のリクエスト。

RateLimiterParameters

RateLimiterParameters は、リミッターの設定パラメーターを指定します。

フィールド

タイプ

必須

説明

interval

Duration

はい

リミッターが毎回トークンバケットを補充する間隔。たとえば、値 30s は、トークンバケットが 30 秒間隔でトークンで補充されることを示します。

limit_by_label_key

string

いいえ

スロットリングポリシーがリクエストをグループ化するために使用するリクエストラベル。このフィールドを指定すると、異なるラベルを持つリクエストに対して個別にスロットリングが実行され、異なるラベルを持つリクエストは独自のトークンバケットを使用します。リクエストのラベルを指定する方法の詳細については、「リクエストラベルの説明」をご参照ください。

continuous_fill

bool

いいえ

リミッターがトークンバケットをスムーズに補充するかどうかを指定します。このフィールドが true に設定されている場合、リミッターは、interval フィールドで指定された期間が経過した直後に一度に一定数のトークンを補充するのではなく、interval フィールドで指定された期間内に一定数のトークンを継続的に補充します。補充されるトークン数は、fill_amount フィールドで指定されます。デフォルト値:true。

delay_initial_fill

bool

いいえ

スロットリングポリシーが有効になったときにトークンバケットの補充を遅延させるかどうかを指定します。このフィールドが false に設定されている場合、最初のリクエストを受信するとすぐにトークンバケットが補充されます。これにより、最初の間隔で指定されたレート制限よりも多くのリクエストが受け入れられる可能性があります。デフォルト値:false

lazy_sync

RateLimiterParametersLazySync

いいえ

リミッターの遅延同期機能の設定。

max_idle_time

Duration

いいえ

このフィールドは、limit_by_label_key が指定されている場合に有効になります。このフィールドは、ラベル付きのリクエストが受信されない場合に、ラベルに対応するトークンバケットが解放されるまでの最大待時間を指定します。デフォルト値:7200s

RateLimiterRequestParameters

RateLimiterRequestParameters は、リミッターがリクエストに対して操作を実行するためのカスタム設定を指定します。

フィールド

タイプ

必須

説明

denied_response_status_code

int

いいえ

このフィールドを使用して、スロットリングが発生したときに返されるデフォルトの HTTP 429 ステータスコードをオーバーライドできます。

tokens_label_key

string

いいえ

このフィールドを使用して、リクエストによって消費されるトークン数をオーバーライドできます。リクエストが指定されたラベルを持っている場合、ラベルの数値は消費されるトークン数を示します。

RateLimiterParametersLazySync

RateLimiterParametersLazySync は、リミッターの遅延同期機能に関連する設定パラメーターを指定します。遅延同期は、ASMトラフィックスケジューリングスイートのリミッターの機能です。遅延同期が有効になっていない場合、Envoy はリモートエージェントとリクエストごとに同期して、スロットリングが必要かどうかを判断します。これにより、単一サービスの正確なスロットリングが可能になります。遅延同期が有効になっている場合、Envoy はローカルでスロットリングの決定を行い、リモートエージェントと定期的に同期します。これにより、スロットリングの精度は低下しますが、スロットリングの決定が高速化され、リクエストレイテンシが短縮されます。

フィールド

タイプ

必須

説明

enabled

bool

いいえ

遅延同期を有効にするかどうかを指定します。デフォルト値:false。

num_sync

int

いいえ

Envoy が interval フィールドで指定された期間内に、スロットリングが実行されたリクエスト数をリモートエージェントと同期させる回数。デフォルト値:4。

リクエストラベルの説明

ASMトラフィックスケジューリングスイートでは、リクエストラベルは、リクエストの特性または分類を示すキーと値のペアです。ラベルに基づいて、異なるリクエストに対してスケジューリングを実行できます。たとえば、特定のリクエストラベルに従ってリクエストをグループ化し、各リクエストグループのスロットリングに個別のトークンバケットを使用できます。リクエストのラベルは、リクエストメタデータや Baggage ヘッダーなど、複数のソースから取得できます。

リクエストメタデータ

各 HTTP リクエストの基本メタデータは、リクエストの一連のラベルに自動的に変換されます。HTTP リクエストのメタデータとリクエストラベル間のマッピング:

  • http.method:HTTP リクエストのメソッド。例:POST

  • http.flavor:HTTP リクエストのプロトコルバージョン。例:1.1

  • http.host:HTTP リクエストのホスト。例:httpbin.default.svc.cluster.local

  • http.target:HTTP リクエストのパス名。例:/get

  • http.request_content_length:HTTP リクエストボディのサイズ。例:431

  • http.request.header.header_name:HTTP リクエストヘッダー内の header_name という名前のリクエストヘッダー。たとえば、http.request.header.user_agent は、user_agent リクエストヘッダーを示します。

Baggage

Baggage は、OpenTelemetry によって開発された標準化されたメカニズムであり、分散システムのコールチェーン全体でコンテキスト情報をプロセス間で転送します。baggage という名前の HTTP ヘッダーを HTTP ヘッダーに追加できます。baggage ヘッダーの値は、キーと値のペア形式です。baggage ヘッダーを使用して、テナント ID、トレース ID、セキュリティ資格情報などのコンテキストデータを転送できます。このようにして、コードを変更することなく、トレース分析機能とログ関連付け機能を使用できます。例:

baggage: userId=alice,isProduction=false

リクエストが Baggage ヘッダーを持っている場合、Baggage ヘッダー内の各キーと値のペアは、同じ名前のリクエストラベルに自動的に変換されます。たとえば、前の例の Baggage ヘッダーは、userId: aliceisProduction: false の 2 つのリクエストラベルに変換されます。