速率限制策略 (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_rule、requests_per_time_unit、token_bucket 其中之一。
- requests_per_time_unit
(type.v3.RateLimitStrategy.RequestsPerTimeUnit) 盡力而為地限制每個時間單位內的請求數量,例如每秒請求數。不指定任何特定的速率限制演算法,請參閱RequestsPerTimeUnit 以取得詳細資訊。
必須設定 blanket_rule、requests_per_time_unit、token_bucket 其中之一。
- token_bucket
(type.v3.TokenBucket) 透過從令牌桶消耗令牌來限制請求。允許的請求數與令牌桶中可用的令牌數相同。
必須設定 blanket_rule、requests_per_time_unit、token_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_unit 為
0
時(拒絕所有),將被忽略。
列舉 type.v3.RateLimitStrategy.BlanketRule
[type.v3.RateLimitStrategy.BlanketRule proto]
在允許所有和拒絕所有之間選擇。
- ALLOW_ALL
(預設)
- DENY_ALL