准入控制¶
Attention
准入控制过滤器属于实验性功能,目前正在积极开发中。
有关每个配置项的详细信息,请参见 v3 API 参考。
概览¶
准入控制过滤器会根据滑动时间窗口内之前请求的成功率,概率性的拒绝请求。它基于 谷歌 SRE 手册 中的 客户端侧节流。唯一值得一提的关于准入控制过滤器的降载 与客户端侧节流定义的降载的区别是:用户可以配置触发主动降载的成功率阈值。用户还可以通过配置成功请求的定义来计算拒绝的概率。
过滤器将按照如下的方式来计算拒绝请求的概率:
其中,
n 指一个滑动窗口内的请求量总和。
threshold 是一个可配置的值,该值表示过滤器将 不再拒绝 请求的最低请求成功率。该值被归一化为 [0,1] 进行计算。
aggression 控制拒绝率曲线,因此 1.0 表示拒绝率随成功率降低而线性增加。当 aggression 增大时, 随着成功率增大,拒绝概率相对更大。更详细的解释请参见 Aggression。
Note
成功率计算基于每个线程单独执行,以提升性能。此外,线程间隔离也可以降低单个不良连接引起的成功率异常的影响范围。因此, 各工作线程间的拒绝率可能不相等。
Note
健康检查流量不会计入过滤器的任何测量结果。
关于此参数的更详细信息,请参见 v3 API 参考。
成功请求的定义是一个 可配参数,对 HTTP 和 gRPC 请求都可以配置。
Aggression¶
关于 aggression 的值对拒绝率的影响,如下图所示:
由于第一张图中成功率阈值被设置为 95%,因此在低于此值前拒绝率一直保持为 0。在第二张图中,成功率低于 50% 前,三个拒绝率一直 保持为 0。在所有的情况下,当成功率跌至 0% 时,拒绝率将达到一个接近 100% 的值。aggression 的值决定了在指定的成功率下,拒绝率 将达到多高,因此它将更 积极的 降载。
配置示例¶
如下所示,这是一个过滤器的配置示例。并非所有字段都是必要的,并且许多字段都可以通过运行时设置来覆盖。
name: envoy.filters.http.admission_control
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.admission_control.v3alpha.AdmissionControl
enabled:
default_value: true
runtime_key: "admission_control.enabled"
sampling_window: 120s
sr_threshold:
default_value: 95.0
runtime_key: "admission_control.sr_threshold"
aggression:
default_value: 1.5
runtime_key: "admission_control.aggression"
success_criteria:
http_criteria:
http_success_status:
- start: 100
end: 400
- start: 404
end: 404
grpc_criteria:
grpc_success_status:
- 0
- 1
上述配置可以理解为:
计算请求成功率的滑动窗口是 120 秒。
在滑动窗口内的请求成功率低于 95% 前,不执行降载。
HTTP 请求响应为 1xx、 2xx、 3xx、或 404 时,将被视为成功请求。
gRPC 请求响应为 OK 或 CANCELLED 时,将被视为成功请求。
统计¶
准入控制过滤器将统计信息输出在 http.<stat_prefix>.admission_control. 命名空间下。 stat prefix 来自于所属的 HTTP 连接管理器。
名称 |
类型 |
描述 |
---|---|---|
rq_rejected |
Counter |
过滤器未接受的请求总数。 |
rq_success |
Counter |
被视为成功的请求总数。 |
rq_failure |
Counter |
被视为失败的请求总数。 |