全部產品
Search
文件中心

Alibaba Cloud Service Mesh:RateLimitingPolicy CRD說明

更新時間:Jun 30, 2024

RateLimitingPolicy是服務網格ASM流量調度套件提供的一種預置策略,可以用聲明式的方式對網格內服務的全域流量配置限流。本文介紹RateLimitingPolicy的欄位說明。

配置樣本

以下配置表示為Kubernetes叢集中的httpbin Service進行限流,限流使用的令牌桶每30秒填充兩個令牌(即每30秒允許兩個請求),令牌桶內的令牌數量上限為兩個(即不容忍突發流量);同時,基於請求的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指定的時間段內持續地向令牌桶中填充fill_amount個令牌,而不是每過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都會和遠端agent進行同步以判斷是否限流,這可以實現針對單個服務的精準限流。當延遲同步開啟時,envoy會在本地進行限流決策,並定期與遠程agent進行同步,這會降低限流的精準度、但可以加快限流決策,減少請求延遲。

欄位

類型

是否必選

說明

enabled

bool

是否開啟延遲同步能力,預設為false。

num_sync

int

在interval指定的時間內,envoy和遠程agent同步限流數量的次數。預設為4。

請求標籤說明

在ASM流量調度套件中,請求標籤是一系列表示請求特徵或分類的索引值對,可以基於請求的標籤對不同請求進行針對性的調度。例如,可根據特定請求標籤對請求進行分組,每組請求分別使用獨立的令牌桶進行限流。一個請求可以從多種來源擷取標籤。包括請求中繼資料和Baggage的標籤。

請求中繼資料

對於每個HTTP請求,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推出的一種標準化機制,旨在實現分布式系統調用鏈路中跨進程傳遞上下文資訊。它通過在HTTP頭部增加名為“Baggage”的欄位實現,欄位值為索引值對格式,可傳遞租戶ID、追蹤ID、安全憑證等上下文資料,支援鏈路追蹤、日誌關聯等功能而無需修改代碼。例如:

baggage: userId=alice,isProduction=false

當請求攜帶Baggage時,Baggae中的每個索引值對將自動轉化為同名的請求標籤。例如上文樣本中的Baggage將轉化為userId: aliceisProduction: false兩個請求標籤。