速率限制服务 (RLS) (proto)
service.ratelimit.v3.RateLimitRequest
[service.ratelimit.v3.RateLimitRequest proto]
速率限制请求的主要消息。速率限制服务的设计目的是完全通用的,因为它可以对任意分层键值对进行操作。加载的配置将解析请求并找到要应用的最具体的限制。此外,RateLimitRequest 可以包含多个“描述符”以限制。当提供多个描述符时,服务器将对所有描述符进行限制,并在其中任何一个超过限制时返回 OVER_LIMIT 响应。如果需要,这将启用更复杂的应用程序级速率限制场景。
{
"domain": ...,
"descriptors": [],
"hits_addend": ...
}
- domain
(string) 所有速率限制请求都必须指定一个域。这使得配置能够按应用程序进行,而不必担心重叠。例如,“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) 一个 DescriptorStatus 消息列表,其长度与 RateLimitRequest 中传递的描述符列表的长度匹配。调用者可以使用它来确定哪些单独的描述符失败,以及/或所有描述符的当前配置限制是什么。
- 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) 可选的响应元数据,将作为动态元数据发出,供下一个过滤器使用。此元数据位于由需要它的扩展过滤器规范名称指定的命名空间中。
envoy.filters.http.ratelimit 用于 HTTP 过滤器。
envoy.filters.network.ratelimit 用于网络过滤器。
envoy.filters.thrift.rate_limit 用于 Thrift 过滤器。
service.ratelimit.v3.RateLimitResponse.RateLimit
[service.ratelimit.v3.RateLimitResponse.RateLimit proto]
按每时间单位的请求数和单位本身来定义实际的速率限制。
{
"name": ...,
"requests_per_unit": ...,
"unit": ...
}
- name
(string) 此限制的名称或描述。
- requests_per_unit
(uint32) 每时间单位的请求数。
枚举 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
响应代码,用于通知请求数超过限制。