速率限制策略 (proto)

警告

此 API 功能目前正在開發中。標記為開發中的 API 功能不被視為穩定,不受威脅模型涵蓋,不受安全團隊支援,並且可能會發生重大變更。請在了解上述各點後再使用此功能。

type.v3.RateLimitStrategy

[type.v3.RateLimitStrategy proto]

{
  "blanket_rule": ...,
  "requests_per_time_unit": {...},
  "token_bucket": {...}
}
blanket_rule

(type.v3.RateLimitStrategy.BlanketRule) 允許或拒絕請求。如果未設定,則允許所有。

必須設定 blanket_rulerequests_per_time_unittoken_bucket 其中之一。

requests_per_time_unit

(type.v3.RateLimitStrategy.RequestsPerTimeUnit) 盡力而為地限制每個時間單位內的請求數量,例如每秒請求數。不指定任何特定的速率限制演算法,請參閱RequestsPerTimeUnit 以取得詳細資訊。

必須設定 blanket_rulerequests_per_time_unittoken_bucket 其中之一。

token_bucket

(type.v3.TokenBucket) 透過從令牌桶消耗令牌來限制請求。允許的請求數與令牌桶中可用的令牌數相同。

必須設定 blanket_rulerequests_per_time_unittoken_bucket 其中之一。

type.v3.RateLimitStrategy.RequestsPerTimeUnit

[type.v3.RateLimitStrategy.RequestsPerTimeUnit proto]

盡力而為地限制每個時間單位內的請求數量。

允許指定所需的每秒請求數 (RPS, QPS)、每分鐘請求數 (QPM, RPM) 等,而無需指定速率限制演算法的實作。

RequestsPerTimeUnit 策略不要求使用任何特定的速率限制演算法(與 TokenBucket 相比)。這表示只要達到設定的「每個時間單位的請求數」,速率限制演算法的實作細節就無關緊要。

請注意,TokenBucket 仍然是 RequestsPerTimeUnit 策略的有效實作,並且可以選擇強制執行速率限制。但是,不能保證它特別是 TokenBucket,而不是洩漏桶、滑動視窗或任何其他符合要求的速率限制演算法。

{
  "requests_per_time_unit": ...,
  "time_unit": ...
}
requests_per_time_unit

(uint64) 每個 time_unit 允許的請求數。如果設定為 0,則拒絕所有(相當於 BlanketRule.DENY_ALL)。

注意

請注意,演算法實作決定了超出限制的請求的處理方式。只要 requests_per_time_unit 收斂到所需的值,就允許將此欄位視為軟限制:允許爆發、隨著時間重新分配配額等。

time_unit

(type.v3.RateLimitUnit) 時間單位。當 requests_per_time_unit0 時(拒絕所有),將被忽略。

列舉 type.v3.RateLimitStrategy.BlanketRule

[type.v3.RateLimitStrategy.BlanketRule proto]

在允許所有和拒絕所有之間選擇。

ALLOW_ALL

(預設)

DENY_ALL