速率限制策略 (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,而不是 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_unit0(拒绝所有请求)时忽略。

枚举类型 type.v3.RateLimitStrategy.BlanketRule

[type.v3.RateLimitStrategy.BlanketRule proto]

在允许所有请求和拒绝所有请求之间选择。

ALLOW_ALL

(默认)

DENY_ALL