sentinel qps与最大并发数区别,流控模式:直接,关联,链路, 流控效果: 直接,关联,链路 ,流控效果:快速失败,Warm Up,排队等待 等详解
流控配置与使用
基本配置-阈值类型
qps 类型
qps 相当于每秒请求数,和实际处理能力无关,也就是针对某资源,每秒请求数达到设定阈值,则触发限流
最大并发数 类型
最大并发数 相当于系统正在处理这个资源的线程数,也就是针对某资源,如果判断正则处理的线程数达到阈值,则触发限流
qps 与 最大并发数区别
下面是我的个人看法,为了方便大家更容易理解,可以把资源想象成一个饭店,
qps 是饭店的门口入口,如果饭店内已经坐满了,那么就触发限流,
具体后续怎么操作比如,是直接告诉顾客回去吧,还是排队那是饭店的策略
最大并发可以想象成后厨正在做饭的后厨团队,同时在给这个饭店做饭的是几个厨师,
也许做了100个客人点了红烧肉,其实规了只有5个厨师能做红烧肉,如果超过了那就触发限流
模拟图如下:
其实可以把qps 可以理解为spring boot 设置的maxconnections ,最大并发数理解为maxthreads ,只不过都是针对某资源而已
高级配置
流控模式-直接
直接模式就是当达到了设置的阈值就直接启动限流规则
流控模式-关联
关联模式是某一资源依赖其他资源或者内部请求依赖,比如fegin请求等,可以直接对内部依赖资源进行限流,当内部资源被先溜了,那么外部依赖资源也同样进行限流 比如我们订单创建请求依赖库存查询请求,比如/order -> /queryStock ,如果/queryStock 限流了那么/order 同时进行限流,如下图
流控模式-链路
链路模式和关联模式有点反过来的意思,比如上面关联模式,是被依赖的限流了,则入口端也同时限流,链路模式是设置某一入口,从指定设置入口请求的超过阈值被限流 比如 比如/order -> /queryStock ,/goodsStocks -> /queryStock 都请求了/queryStock,这次我们设置链路模式入口是/order ,则只有/order->/queryStock 这个请求会被限流,如下图
流控效果-快速失败
快速失败,字面意思,触发限流后直接返回sentinel blocked 或者自定义返回数据提示限流了
流控效果-Warm Up
字面意思看起来不太明白,可以举个例子就很好理解了 电商的秒杀活动,我们阈值如果设为了10,在秒杀开始之前很可能一直保持0请求, 在秒杀活动开始后,可能瞬间就会达到10触发流控,这时候其实对系统是很不友好的,因为很多数据可能还没来得及初始化或者设备没有唤醒就崩溃了 比如一些商品缓存,瞬间访问的时候可能商品信息还没有缓存完毕, 所以针对这种情况,有了预热效果,例如我设置了阈值是10,预热时长是5,系统默认的初始化阈值时3, 也就是说明。我们希望,5秒内阈值从3到10 第一秒是每秒递增量(10-3)/5 = 1.4 ,加上当前阈值 3 = 4.4 第二秒就是4.4 +1.4 = 5.8 第三秒就是5.8 +1.4 = 7.2 第四秒就是7.2 +1.4 = 8.6 第五秒就是8.6 +1.4 = 10 .刚好达到设定阈值,大体曲线图如下
流控效果-排队等待
等待排队顾名思义,就是所有请求都是平滑一个个通过,比如我们qps设置2,那么按照秒切割就是500ms通过一个请求,效果图如下