使用的是sentinel-dashboard来配置
流控规则
阈值类型
QPS
当每秒并发数大于配置,则进行限流并发数线程数
当执行的线程数大于配置,则进行限流
单机阈值
- 配置的具体值
流控模式
-
直接
默认项,就是在资源名配置的路径进行生效 -
关联
:被关联的资源达到阈值后,当前配置的资源会被限流。
如图,当资源test-b达到阈值后,test-a会被限流 -
链路
入口资源达到阈值后,当前配置的资源会被限流。
如图,sentinel中所有的最开始的入口资源都是sentinel_spring_web_context,如果此资源达到阈值,则test-a会被限流
流控效果
快速失败
默认项,直接进行流控warm up
当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。warm up冷启动主要用于启动需要额外开销的场景,例如建立数据库连接,秒杀等等,防止服务瞬间被打垮。其实就是根据冷加载因子,默认3,经过一段时间,才能达到预设的QPS。
如图,意思是初始阈值为10/3 = 3,在6秒内到达QPS到达10。排队等待
当达到阈值,请求进行排队一个一个的通过执行,如果等待时间超过2000ms,则抛出异常
熔断规则
熔断策略
-
慢调用比例
要同时满足两个条件才能够熔断- 请求数大于最小请求数
- 慢请求数(执行时间大于最大RT)达到设置的比例,也就是
执行时间大于最大RT的次数*比例阈值
- 如图,在统计时长1000ms内,请求数目大于设置的最小请求数目10,并且慢调用的比例大于阈值,熔断时长5s内自动触发熔断(调用方法时,抛出DegradeException)
- 熔断恢复:在熔断时长后,熔断器进入探测恢复状态(half-open状态),
如果接下来的请求响应时间 < 设置的最大RT响应时间,则结束熔断
如果接下来的请求响应时间 > 设置的最大RT响应时间,则继续在熔断时长内保持熔断
-
异常比例
依旧要同时满足两个条件才能够熔断- 请求数大于最小请求数
- 异常比例达到50%
- 如图,在统计时长1000ms内,请求数目大于设置的最小请求数目10,并且异常的比例大于50%,熔断时长5s内自动触发熔断(调用方法时,抛出DegradeException)
-
异常数
依旧要同时满足两个条件才能够熔断- 请求数大于最小请求数
- 异常数大于设置的值
- 如图,在统计时长1000ms内,请求数目大于设置的最小请求数目10,并且异常数大于10,熔断时长5s内自动触发熔断(调用方法时,抛出DegradeException)
注意异常降级仅针对业务异常,对 Sentinel 限流降级本身的异常(BlockException)不生效。为了统计异常比例或异常数,需要通过 Tracer.trace(ex) 记录业务异常
热点规则
- 如图,test-a接口如果有第一个参数,那么每秒的QPS阈值为10,如果第一个参数值为String类型,值为"student-1",QPS阈值为15
系统规则
系统保护规则是从应用级别的入口流量进行控制,从单台机器的总体 Load
、RT
、入口 QPS
、CPU
使用率和线程数五个维度监控应用数据,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。 系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量 (进入应用的流量) 生效。
Load(仅对 Linux/Unix-like 机器生效)
当系统 load1 超过阈值,且系统当前的并发线程数超过 系统容量时才会触发系统保护。系统容量由系统的 maxQps * minRt 计算得出。设定参考值一般 是 CPU cores * 2.5。RT
当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。
线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。入口QPS
当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。CPU使用率
当单台机器上所有入口流量的 CPU使用率达到阈值即触发系统保护
压测
压测接口
/testSentinel为接口,/testSentinelRpc为接口内的feign调用
流控规则
直接模式
对/testSentinel进行流控
结果
对/testSentinelRpc进行流控
结果
/testSentinelRpc为feign当被流控后会直接执行@FeignClient中的fallback处理类的方法
关联模式
结果
设置为/testSentinelV2关联/testSentinel,当/testSentinel达到设置的阈值后,/testSentinelV2会被流控
链路模式
结果
链路模式和直接模式结合
链路流控阈值为20,接口流控阈值为10
结果是当阈值超过10会进行流控
链路流控阈值为10,接口流控阈值为20
结果依旧是阈值超过10会进行流控
流控效果
warm up
结果
可以看出warm up模式整个过程是生效的
排队等待
结果
熔断规则
首先每秒15请求数,隔一段时间后为每秒5请求数进行压测
可以看到熔断是生效的