流控规则
资源名
指当条规则所针对的访问路径
阈值类型+ 单机阈值
针对不同的阈值类型,QPS的单机阈值代表每秒最多允许请求多少次资源,并发线程数的单机阈值代表代表可以同时运行的线程数量
流控模式
直接
代表超过阈值直接限流
关联
代表关联的资源达到阈值时也进行限流。A、B接口关联,如果A接口被限流了,那么B接口也无法访问
链路
代表当服务到达阈值时,所有使用该服务的服务也限流。A->B->C接口为链路调用关系时,当其
中一个接口出现限流,那么整个链路上的接口都无法使用
流控效果
快速失败
指直接进行限流
Warm Up
冷启动,某个接口平时访问量不大,突然某段时间访问量突增,针对某些抽奖类型的接口。开始
时QPS的通过量为(请求数量/3),经设置预热时长才逐渐升至设定的QPS阈值。
排队等待
就是简单队列形式的等待,让限流的请求排队等待系统空闲时再通过,需要配置超时时间,过
了超时时间再拒绝请求。
熔断规则
慢调用比例
最大RT(请求的最大调用时间),当一个请求响应时间超过该时间就被判断为慢调用,当慢调用
的接口的比例超过比例阈值就进行熔断降级处理。
在统计时长内请求资源的次数超过最小请求数,并且这些请求响应时间超过最大RT,总的慢调用
比例超过比例阈值,就进行熔断降级处理
上图表示:在1000ms内,请求/testA访问次数超过5次,请求响应时间超过100ms的比例超过0.8就
进行熔断降级处理
异常比例
在统计时长内当请求超过最小请求数,且异常比例超过比例阈值时进行熔断降级。
异常数
在统计时长内当请求超过最小请求数,且异常请求数超过异常数时进行熔断降级。
热点规则
针对于接口中某个参数请求次数过多,对其进行限流或者其他操作。
@GetMapping("/testHotkey")
@SentinelResource(value = "testHostkey123",blockHandler = "del_testHotkey")
public String testHotkey(@RequestParam(value = "p1",required = false) String p1,
@RequestParam(value = "p1",required = false) String p2) {
return "------testHostkey"+p1;
}
public String del_testHotkey(String p1, String p2, BlockException blockException){
return "------del_testHotkey o(╥﹏╥)o";
}
启动后,应针对名为@SentinelResource注解value的资源进行热点规则的添加
参数索引代表针对从第0位开始,依次向后递增代表第几个参数,在统计窗口时长内访问次数超过
单机阈值,则会交由@SentinelResource注解blockHandler所指向的方法进行熔断处理。
高级选项-参数例外项
当某些参数为一些特殊值需要进行特殊放行的处理时,需配置该选项
参数类型
选中之后,代表参数类型与之相符
参数值
例外项的具体参数值
限流阈值
代表访问次数需超过该值
表示当访问资源testHostkey123的第一个参数类型为Stirng、参数值为qwe时,限流阈值变为200
系统规则
前面规则只针对于单一资源,系统规则针对的是整个应用入口
官网解释:
LOAD
当系统1分钟内的load(即系统的负载)超过阈值,且并发线程数超过系统容量时触发。
建议设置为CPU核心数 * 2.5 (仅对LInux/Unix-like机器生效)
load,系统平均负载,linux中使用命令 uptime查看load指标
系统容量(sentinel计算出来的) = maxQps * minRt
maxQps: 秒级统计出来的最大QPS,minRt : 秒级统计出来的最小响应时间
RT
前面已经使用过,即是平均响应时间。当单台机器上所有入口流量的平均 RT 达到阈值即触发系
保护,单位是毫秒。
线程数
即是指线程的并发数,与前面类似。当并发线程数超过设定的阈值,就会发生服务的熔断降级
QPS
所有入口流量在1秒钟内的请求达到设置阈值都会触发。
QPS = 总请求数 / ( 进程总数 * 请求时间 )
CPU 使用率
1.5.0+ 版本,当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0),比较灵敏。