速率限制服務 (RLS) (proto)

service.ratelimit.v3.RateLimitRequest

[service.ratelimit.v3.RateLimitRequest proto]

速率限制請求的主要訊息。速率限制服務的設計是完全通用的,意即它可以對任意階層的鍵/值對進行操作。載入的配置將會解析請求,並找到要應用的最精確限制。此外,RateLimitRequest 可以包含多個要限制的「描述符」。當提供多個描述符時,伺服器將會限制所有描述符,並且當任何一個描述符超過限制時,返回 OVER_LIMIT 回應。如果需要,這可以實現更複雜的應用層速率限制情境。

{
  "domain": ...,
  "descriptors": [],
  "hits_addend": ...
}
domain

(string) 所有速率限制請求都必須指定一個 domain。這可以讓配置基於每個應用程式進行,而不用擔心重疊。例如,「envoy」。

descriptors

(repeated extensions.common.ratelimit.v3.RateLimitDescriptor) 所有速率限制請求都必須指定至少一個 RateLimitDescriptor。每個描述符都會由服務處理(請參閱下文)。如果任何描述符超過限制,則整個請求會被視為超過限制。

hits_addend

(uint32) 速率限制請求可以選擇性地指定請求添加到匹配限制的次數。如果訊息中沒有設定此值,則請求會將匹配的限制增加 1。此值可以通過將篩選器狀態值 envoy.ratelimit.hits_addend 設定為所需數字來覆寫。無效的數字(< 0)或數字將被忽略。

service.ratelimit.v3.RateLimitResponse

[service.ratelimit.v3.RateLimitResponse proto]

來自 ShouldRateLimit 呼叫的回應。

{
  "overall_code": ...,
  "statuses": [],
  "response_headers_to_add": [],
  "request_headers_to_add": [],
  "raw_body": ...,
  "dynamic_metadata": {...}
}
overall_code

(service.ratelimit.v3.RateLimitResponse.Code) 總體回應代碼,它會考慮 RateLimitRequest 訊息中傳遞的所有描述符。

statuses

(repeated service.ratelimit.v3.RateLimitResponse.DescriptorStatus) 與 RateLimitRequest 中傳遞的描述符列表長度相符的 DescriptorStatus 訊息列表。呼叫者可以使用此列表來判斷哪些個別描述符失敗,和/或所有描述符目前設定的限制為何。

response_headers_to_add

(repeated config.core.v3.HeaderValue) 要添加到回應的標頭列表

request_headers_to_add

(repeated config.core.v3.HeaderValue) 轉發時要添加到請求的標頭列表

raw_body

(bytes) 當回應代碼不是 OK 時,要傳送給下游客戶端的回應主體。

dynamic_metadata

(Struct) 可選的回應元資料,將會作為動態元資料發出,供下一個篩選器使用。此元資料位於需要它的擴充功能篩選器的標準名稱指定的命名空間中

service.ratelimit.v3.RateLimitResponse.RateLimit

[service.ratelimit.v3.RateLimitResponse.RateLimit proto]

根據每單位時間的請求次數和單位本身定義實際的速率限制。

{
  "name": ...,
  "requests_per_unit": ...,
  "unit": ...
}
name

(string) 此限制的名稱或描述。

requests_per_unit

(uint32) 每單位時間的請求次數。

unit

(service.ratelimit.v3.RateLimitResponse.RateLimit.Unit) 時間單位。

列舉 service.ratelimit.v3.RateLimitResponse.RateLimit.Unit

[service.ratelimit.v3.RateLimitResponse.RateLimit.Unit proto]

識別速率限制的時間單位。

UNKNOWN

(預設) ⁣時間單位未知。

SECOND

⁣代表秒的時間單位。

MINUTE

⁣代表分鐘的時間單位。

HOUR

⁣代表小時的時間單位。

DAY

⁣代表天的時間單位。

MONTH

⁣代表月的時間單位。

YEAR

⁣代表年的時間單位。

service.ratelimit.v3.RateLimitResponse.DescriptorStatus

[service.ratelimit.v3.RateLimitResponse.DescriptorStatus proto]

{
  "code": ...,
  "current_limit": {...},
  "limit_remaining": ...,
  "duration_until_reset": {...}
}
code

(service.ratelimit.v3.RateLimitResponse.Code) 個別描述符的回應代碼。

current_limit

(service.ratelimit.v3.RateLimitResponse.RateLimit) 伺服器設定的目前限制。對除錯等情況很有用。

limit_remaining

(uint32) 目前時間單位中剩餘的限制。

duration_until_reset

(Duration) 到目前限制視窗重設的持續時間。

列舉 service.ratelimit.v3.RateLimitResponse.Code

[service.ratelimit.v3.RateLimitResponse.Code proto]

UNKNOWN

(預設) ⁣回應代碼未知。

OK

⁣通知請求次數在限制以下的回應代碼。

OVER_LIMIT

⁣通知請求次數超過限制的回應代碼。