1.2 流量控制
一、快速入门
簇点链路
就是项目内的调用链路,链路中被监控的每一个接口就是一个资源。默认情况下sentinel会监控SpringMVC的每一个断电,因此SpringMVC的每一个端点就是调用链路中的一个资源
二、流控模式
流控,熔断等都是针对簇点链路中的资源来设置的,因此我们可以点击对应资源后面的按钮来设置规则(模拟测试工具:JMeter):
流控:针对某个资源进行控制,阈值QPS,单机阈值标识每秒钟允许请求1次,超出请求会报错
流控模式:
直接:统计当前资源的请求,触发阈值时,对当前资源直接限流,也就是默认模式
关联:统计与当前资源相关的另一个资源,连一个资源触发阈值时,对当前资源限流
链路:统计从指定链路访问到本资源的请求,触达阈值时,对指定链路限流
备注1:Sentinel默认只标记Controller中的方法为资源,如果要标记其他方法,需要使用
@SentinelResource注解 举例:
@SentinelResource("名称")备注2:Sentinel默认会将Controller方法作为context,导致链路模式的流控失效,需要对application.yml进行配置:
spring: clous: sentinel: web-context-unify: false # 关闭context整合也就是链路模式,必须关闭
web-context-unify
三、流控效果
流控效果是指请求达到流控阈值时应该采取的措施,包括三种:
快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常,默认处理方法
warm up:预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式的阈值会动态变化,从一个较小值主键增加到最大阈值
是对应服务冷启动的一种方案,请求阈值初始值是threshold/coldFactor,持续指定时长后,逐渐提高到threshold值,coldFactor默认值是3;
所以重要参数是threshold-最大qps值,还有预热时长
排队等待:让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长
如果等待时间超过超时时间,则会被直接拒绝
重要参数:超时时长,单位:毫秒
四、热点参数限流
之前的限流是统计访问某个资源的所有请求,判断是否超过QPS阈值。而热点参数限流是分别统计参数值相同的请求,判断是否超过QPS阈值
重要参数:
参数索引:第几个参数
单机阈值:阈值
统计窗口时长:多长时间内
高级配置:
列外参数值:热点不同,限流不同
注意:
热点参数限流对默认的SpringMVC资源无效,解决办法,在控制器上添加注解
@SentinelResource("名称")在左侧列表菜单点击热点,添加热点参数
最后更新于
这有帮助吗?