速率限制策略 (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
,而不是 Leaky Bucket、Sliding Window 或任何其他满足要求的速率限制算法。
{
"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