配置限流策略

限流是流量控制中最常用的手段之一,能有效地防止外部请求超出后端服务的承载能力,从而避免发生级联雪崩。在高并发场景下,限流可以通过阻止一部分请求来保证后端服务一直可用。云原生API网关支持路由级别的限流策略,可以精确地控制某个路由上的请求数量在设定的时间周期内不超过阈值。本文介绍云原生API网关如何配置限流策略。

重要

实例内路由策略仅在对应实例可见并管理,实例外API的策略配置通过控制台首页的全局API列表统一管控。

配置限流策略

重要

配置的阈值均为整体阈值,每个网关节点的限流阈值=整体阈值/节点数,若限流阈值为小数则向上取整。例如,路由Demo上的QPS1001,如果您的网关节点数量是2,那么每个网关节点上,对路由DemoQPS限制是501。

  1. 登录云原生API网关控制台

  2. 配置限流策略有以下两种方式:

    实例内API

    1. 在左侧导航栏,选择实例,并在顶部菜单栏选择地域。

    2. 实例页面,单击目标网关实例ID。

    3. 选择左侧导航栏的API,单击进入目标API。选择路由列表中的目标路由。

    实例外API

    1. 在左侧导航栏,选择API,并在顶部菜单栏选择地域。

    2. 单击进入目标API。选择路由列表中的目标路由。

  3. 选择右侧策略配置页签,然后单击入站处理下的启用策略/插件

    image

  4. 添加限流策略,包括流量控制并发控制熔断策略。

    流量控制

    流控规则的原理是监控路由的QPS指标,当指标达到设定的阈值时立即拦截流量,避免后端服务被瞬时的流量高峰冲垮,从而保障高可用性。

    选择添加流量控制策略,并配置相关参数后,单击添加

    image

    配置项

    说明

    是否开启

    开启后,流量控制规则生效。

    总体QPS阈值

    设置总体QPS阈值

    Web fallback 行为

    选择Web fallback 行为返回指定内容或者跳转到指定页面

    选择Web fallback 行为返回指定内容时:

    HTTP状态码

    设置HTTP状态码。默认为429。

    返回 content-type

    选择返回 content-type普通文本JSON

    HTTP 返回文本

    输入返回文本。

    选择Web fallback 行为跳转到指定页面时:

    跳转地址

    输入跳转地址

    并发控制

    并发规则的原理是统计当前网关处理中的请求数之和,当指标达到设定的阈值时立即拦截流量,可配置为后端服务的最大并发处理请求数,实现在高并发下的后端服务可用性保护。

    选择添加并发控制策略并配置相关参数后,单击添加

    image

    配置项

    说明

    是否开启

    开启后,并发规则生效。

    总体并发数阈值

    设置总体并发数阈值

    Web fallback 行为

    选择Web fallback 行为返回指定内容或者跳转到指定页面

    选择Web fallback 行为返回指定内容时:

    HTTP状态码

    设置HTTP状态码。默认为429。

    返回 content-type

    选择返回 content-type普通文本JSON

    HTTP 返回文本

    输入返回文本。

    选择Web fallback 行为跳转到指定页面时:

    跳转地址

    输入跳转地址

    熔断

    熔断规则的原理是监控路由的响应时间或异常比例,当达到指定的阈值时立即降低依赖优先级。在指定的时间内,系统不会调用该不稳定的资源,避免后端服务受到影响,从而保障后端的高可用性。当指定时间过后,再重新恢复对该资源的调用。

    选择添加熔断策略并配置相关参数后,单击添加

    image

    配置项

    说明

    是否开启

    开启后,熔断规则生效。

    统计窗口时长

    统计的时间窗口长度,取值范围为1秒~120分钟。

    最小请求数目

    触发熔断的最小请求数目,若当前统计窗口内的请求数小于此值,即使达到熔断条件规则也不会触发。

    阈值类型

    选择以慢调用比例(%)异常比例(%)作为阈值。

    1. 选择以慢调用比例(%)作为阈值,需要设置允许的慢调用RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。在降级阈值中设置触发熔断的慢调用比例。规则开启后,在单位统计时长内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后,熔断器会进入探测恢复状态,若接下来的一个请求响应时间小于设置的慢调用RT,则结束熔断;若大于设置的慢调用RT,则会再次被熔断。

    2. 选择以异常比例(%)作为阈值,需要在降级阈值中设置触发熔断的异常比例。规则开启后,在单位统计时长内业务异常数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。

    慢调用RT

    设置允许的慢调用RT(即最大的响应时间)。

    熔断比例阈值

    触发熔断的慢调用比例阈值,取值范围 0-100(代表 0%-100%)。

    熔断时长(s)

    即熔断触发后持续的时间。资源进入熔断状态后,在配置的熔断时长内,请求都会快速失败。

    Web fallback 行为

    选择Web fallback 行为返回指定内容或者跳转到指定页面

    选择Web fallback 行为跳转到指定页面时:

    跳转地址

    输入跳转地址

    选择Web fallback 行为返回指定内容时:

    HTTP状态码

    设置HTTP状态码。默认为429。

    返回 content-type

    选择返回 content-type普通文本JSON

    HTTP 返回文本

    输入返回文本。

结果验证

执行以下测试请求命令:

curl -I http://121.196.XX.XX/demo/item/list     //网关入口IP
  • 未开启限流策略的响应结果:

    HTTP/1.1 200 OK
    x-content-type-options: nosniff
    x-xss-protection: 1; mode=block
    cache-control: no-cache, no-store, max-age=0, must-revalidate
    pragma: no-cache
    expires: 0
    x-frame-options: DENY
    content-type: application/json
    content-length: 86
    date: Mon, 29 Nov 2021 08:28:00 GMT
    x-envoy-upstream-service-time: 4
    server: istio-envoy
  • 开启限流策略的响应结果(HTTP状态码返回429):

    HTTP/1.1 429 Too Many Requests
    x-local-rate-limit: true
    content-length: 18
    content-type: text/plain
    date: Mon, 29 Nov 2021 08:28:01 GMT
    server: istio-envoy