操作背景
限流主要是通过设置限流规则保护后端服务,防止瞬时流量过大造成服务和数据崩溃,导致服务不可用。当资源成为瓶颈时,需要对请求做限流,启动流控保护机制。TSE 云原生 API 网关支持服务级和路由级别的限流,本文介绍限流规则的配置方式。
前提条件
在配置限流策略前,请确保您的 tse-rate-limiting(流量控制)插件已升级到最新版本。如果需对限流阈值进行精细化配置,请确保您的 tse-global-configuration(全局配置)插件已升级到最新版本。
1. 登录 TSE控制台。
2. 在左侧导航栏单击云原生 API 网关 > 插件管理,在页面上方选择好网关实例。
3. 选择系统插件页签,查看插件是否已更新到最新版本,若未更新,单击操作列的安装最新版本即可。
服务级限流
服务级限流对服务下所有路由均生效,如需对路由配置限流,您可以前往路由管理页配置。
步骤1:配置限流策略
1. 登录 TSE 控制台。
2. 在左侧导航栏单击云原生 API 网关 > 路由管理,在页面上方选择好网关实例。
3. 单击服务页签,单击服务名称,进入服务详情页面。
4. 在页面上方选择限流策略页签,单击配置限流规则。
参数 | 是否必选 | 说明 |
是否启用 | 是 | 开启后,限流规则将会生效。 |
限流配置 | 是 | 基础限流:根据请求数阈值进行流量控制。当该服务上的请求数量在设定的时间周期内大于阈值将触发限流。支持秒、分钟、小时、天、月、年六种时间维度。 参数限流:根据用户请求参数及指定条件进行流量控制。 过滤条件(可选):仅对符合一定过滤条件(IP 或 Path)的请求才进行限流统计。 限流条件:统计的限流参数到达指定阈值即触发限流,支持依据 Header、Cookie、Path、IP、Query 参数进行流量控制,支持设置固定限流阈值以及使用全局配置针对不同限流参数值进行精细化配置。 |
计数策略 | 是 | 当选择默认 Redis 时,计数器保存在 Kong 实例自带的 Redis 服务节点实现分布式限流,支持300万个 Key。 存储当选择外部 Redis 时,可配置 Redis 访问地址(服务器地址、连接密码、超时时间),实现更大规模的分布式限流。 |
限流处理策略 | 是 | 直接返回:触发限流直接返回 429。 自定义返回:触发限流后,自定义 HTTP 应答行为,需输入状态码、响应头和响应内容。 请求转发:触发限流后,跳转到指定页面,需输入请求转发地址。 |
请求排队 | 否 | 请求处理的最大排队时间,支持 0-15 秒。配置为 0 ,代表不延迟处理。配置大于 0 ,每隔 1 秒网关重试处理该请求,如果达到最大排队时间还未被处理,则请求被限流。 |
隐藏限流响应头 | 否 | 默认开启,隐藏后客户端将不会收到限流相关响应头。 |
说明:
1. 精细限流阈值适用于不同限流参数有不同限流阈值的场景,例如,根据 Query 请求参数 appid 来进行限流,当 appid=1时,每分钟限流100,当appid=2时,每分钟限流200。
2. 精细限流阈值仅在配置了普通限流阈值后才支持配置,普通限流阈值会作为未匹配到指定请求参数的默认限流阈值。
3. 精细限流阈值使用全局配置定义,使用 JSON 格式描述,请按照限流 key:限流阈值格式配置,使用下划线(_)按顺序连接全部限流参数值作为限流 key。例如,当限流依据为 Query 参数 appid,当 appid=1时,限流阈值为 100,appid=2时,限流阈值为 200,全局配置如下:
{"1": 100,"2": 200}
5. 单击确定,完成规则创建。
步骤2:验证策略是否生效
发起请求触发限流规则,查看限流是否生效。
路由级限流
路由级限流仅对本路由生效,如需配置服务限流,您可以前往服务级限流策略页配置。
步骤1:配置限流策略
1. 登录 TSE控制台。
2. 在左侧导航栏单击云原生 API 网关 > 路由管理,在页面上方选择好网关实例。
3. 选择服务页签,单击目标服务名称,进入路由管理页面。
4. 单击路由级限流模块的配置限流规则。
参数 | 是否必选 | 说明 |
是否启用 | 是 | 开启后,限流规则将会生效。 |
限流配置 | 是 | 基础限流:根据请求数阈值进行流量控制。当该服务上的请求数量在设定的时间周期内大于阈值将触发限流。支持秒、分钟、小时、天、月、年六种时间维度。 参数限流:根据用户请求参数及指定条件进行流量控制。 过滤条件(可选):仅对符合一定过滤条件(IP 或 Path)的请求才进行限流统计。 限流条件:统计的限流参数到达指定阈值即触发限流,支持依据 Header、Cookie、Path、IP、Query 参数进行流量控制,支持设置固定限流阈值以及使用全局配置针对不同限流参数值进行精细化配置。 |
计数策略 | 是 | 当选择默认 Redis 时,计数器保存在 Kong 实例自带的 Redis 服务节点实现分布式限流,支持300万个 Key。 存储当选择外部 Redis 时,可配置 Redis 访问地址(服务器地址、连接密码、超时时间),实现更大规模的分布式限流。 |
限流处理策略 | 是 | 直接返回:触发限流直接返回 429。 自定义返回:触发限流后,自定义 HTTP 应答行为,需输入状态码、响应头和响应内容。 请求转发:触发限流后,跳转到指定页面,需输入请求转发地址。 |
请求排队 | 否 | 请求处理的最大排队时间,支持 0-15 秒。配置为 0 ,代表不延迟处理。配置大于 0 ,每隔 1 秒网关重试处理该请求,如果达到最大排队时间还未被处理,则请求被限流。 |
隐藏限流响应头 | 否 | 默认开启,隐藏后客户端将不会收到限流相关响应头。 |
5. 单击确定,完成规则创建。
步骤2:验证策略是否生效
发起请求触发限流规则,查看限流是否生效。