有奖:语音产品征文挑战赛等你来> HOT
服务限流主要是保护服务节点或者数据节点,防止瞬时流量过大造成服务和数据崩溃,导致服务不可用。当资源成为瓶颈时,服务需要对请求做限流,启动流控保护机制。
限流的原理是监控服务流量的 QPS 指标,当达到指定的阈值时进行流量控制,避免被瞬时高峰流量冲垮,从而确保服务的高可用。限流模式有两种:
单机限流:通过统计单机 QPS 指标,当达到规则指定阈值时对流量进行限制,保障服务实例不被瞬时流量给冲垮。
分布式限流:通过统计全局 QPS 指标,当达到规则指定阈值时对流量进行限制,保障服务实例不被瞬时流量给冲垮。

操作步骤

1. 登录 TSE 控制台
2. 在左侧导航栏单击流量管理,选择好地域和实例后,在左侧选择访问限流页签。
3. 单击新建限流规则,在弹窗中配置好限流规则后,单击提交
单击限流
分布式限流
参数
是否必填
说明
接口名称
指定限流规则的接口过滤参数,接口名可对应方法名、HTTP、URL 等信息,不填写代表不过滤。
接口:规则生效所对应的接口名,用于匹配客户端传入的 method 参数,默认为空(全部)。
匹配方式:接口字段的匹配方式,支持全匹配、不等于、包含、不包含、正则表达式五种匹配模式。
请求匹配规则
指定限流规则的请求参数匹配条件,不填代表不过滤,支持以下四种参数类型:
自定义参数:自定义KEY和VALUE,具体的请求参数值可通过 SDK 进行传入。
请求头(HEADER):针对协议消息头(http header/grpc header)进行过滤。
请求参数(QUERY):针对协议请求参数(http query)进行过滤。
方法(METHOD):针对协议的 METHOD(http method/grpc method)进行过滤。
主调服务:针对微服务调用场景下,主调方的服务名进行过滤。
主调 IP:针对主调方机器的 IP 地址进行过滤。
每种类型参数值支持以下几种值匹配模式:
全匹配:全值匹配,传入的值与配置的值相同才匹配通过。
正则表达式:用户配置正则表达式,通过正则表达式对传入的值进行匹配,正则表达式支持 Google RE2 标准
不等于:取反匹配,传入的值与所配置的值不相等才算匹配成功。
包含:多字符串取 OR 匹配,传入的值只要匹配到其中一个字符串,就算匹配成功。字符串之间使用逗号进行分割。值格式为value1,value2,value3,匹配到其中一个就算成功。
不包含:多字符串取反匹配,传入的值必须都没有出现在所配置的字符串列表中,才算匹配通过。值格式为 value1,value2,value3,全部不等于才算成功。
限流阈值
指定统计周期内的统计阈值,达到阈值则进行限流。可以配置多个限流阈值,多个限流阈值可同时生效,任意触发了一个即可限流。
统计窗口时长:限流阈值的统计时长,单位秒,默认为1秒。
请求数阈值:达到限流条件的请求数阈值。默认为1。
合并计算阈值
如果目标请求匹配到多个接口及参数,则将匹配到的所有请求汇合,合并计算阈值。
限流效果
快速失败:直接拒绝。
匀速排队:根据设置的最大排队时长依次通过。

参数
是否必填
说明
接口名称
指定限流规则的接口过滤参数,接口名可对应方法名、HTTP U等信息,不填写代表不过滤。
接口:规则生效所对应的接口名,用于匹配客户端传入的 method 参数,默认为空(全部)。
匹配方式:接口字段的匹配方式,支持全匹配、不等于、包含、不包含、正则表达式五种匹配模式。
请求匹配规则
指定限流规则的请求参数匹配条件,不填代表不过滤,支持以下四种参数类型:
自定义参数:自定义KEY和VALUE,具体的请求参数值可通过SDK进行传入。
请求头(HEADER):针对协议消息头(http header/grpc header)进行过滤。
请求参数(QUERY):针对协议请求参数(http query)进行过滤。
方法(METHOD):针对协议的METHOD(http method/grpc method)进行过滤。
主调服务:针对微服务调用场景下,主调方的服务名进行过滤。
主调 IP:针对主调方机器的IP地址进行过滤。
每种类型参数值支持以下几种值匹配模式:
全匹配:全值匹配,传入的值与配置的值相同才匹配通过。
正则表达式:用户配置正则表达式,通过正则表达式对传入的值进行匹配,正则表达式支持Google RE2标准
不等于:取反匹配,传入的值与所配置的值不相等才算匹配成功。
包含:多字符串取OR匹配,传入的值只要匹配到其中一个字符串,就算匹配成功。字符串之间使用逗号进行分割。值格式为’value1,value2,value3‘,匹配到其中一个就算成功。
不包含:多字符串取反匹配,传入的值必须都没有出现在所配置的字符串列表中,才算匹配通过。值格式为’value1,value2,value3‘,全部不等于才算成功。
限流阈值
指定统计周期内的统计阈值,达到阈值则进行限流。可以配置多个限流阈值,多个限流阈值可同时生效,任意触发了一个即可限流。
统计窗口时长:限流阈值的统计时长,单位秒,默认为1秒。
请求数阈值:达到限流条件的请求数阈值。默认为1。
合并计算阈值
如果目标请求匹配到多个接口及参数,则将匹配到的所有请求汇合,合并计算阈值,具体规则查看
失败处理策略
分布式限流需要依赖token server,如果出现token server不可访问,则客户端可以根据配置的规则进行降级,保证用户请求最大限度不受影响。
退化成单机限流:默认策略,直接退化成单机计算配额的方式进行限流,单机配额=(全局配额/节点数)。
直接通过:不执行限流,所有请求都直接放通。
是否启用
启用后,限流规则将立即生效。


使用示例

针对服务进行限流

在 RateLimitServiceJava 服务下新建限流规则,指定 QPS 为10,限流效果选择直接拒绝。




针对接口 + 标签进行细粒度限流

在 RateLimitServiceJava 服务下新建限流规则,指定 QPS 为10,方法名为/echo,针对 HTTP 请求中的 HEADER user=foo 进行限流,限流效果选择直接拒绝。




针对接口 + 标签进行热点参数限流

热点参数限流规则配置需要满足2个条件,否则无法生效:
存在非全匹配规则:“接口名称”、“请求匹配规则”配置中至少存在一条规则是非全匹配规则,例如“不等于”;如果全是全匹配规则,那该限流只是普通限流。
不启用“合并计算阈值”。
热点参数限流是一种针对高并发请求中某些热点参数的限流策略;如上述规则的限流效果图如下:



在 RateLimitServiceJava 服务下新建限流规则,指定 QPS 为10,方法名为/echo,针对 HTTP 请求中的 header user 的每一个参数值进行单独限流,限流效果选择直接拒绝。




使用匀速排队

在 RateLimitServiceJava 服务下新建限流规则,指定 QPS 为10,限流效果选择匀速排队。