环境这里默认大家已经搭配好了,服务注册进了Nacos8848,并且sentinel也成功的监测到了当前服务。
由sentinel提供给我们的流控规则可知,流控模式分为三种:直接,关联,链路
直接模式(默认)
直接模式意思就是当出现我们配置的情况时,直接出现流控效果。我们这里简单测试一下。
如图:
我的测试项目有两个资源路径定位,我们拿A来测试。
QPS
QPS:每秒钟请求的数量。阈值设置为1
当我们频繁访问A资源时(由于设置的较低,此处刷新代替Jmeter测试工具),在一秒内疯狂刷新,结果出现如下情况
代表我们流控成功…
并发线程数
接下来切换为并发线程数,同时只能有指定的线程数在处理资源,此处指定一个
我们在代码处让它睡眠了5秒,大家别忘了
此时,当我们去访问资源时,至少5秒后,它才能处理完毕,而在这5秒当我们再去请求时,由于指定的线程数已经在处理其它请求,于是就出现如下页面
也是代表流控成功…
关联模式
先看配置图
意思就是当A与B相关联,当B出现指定情况时,A来受罪!!!举个简单例子就是下订单和支付两个模块关联,当支付模块承受太大压力时,订单模块你歇一会缓一缓,订单模块降下来,支付模块自然也就好起来了…
此处也可以使用Jmeter进行测试,使多个线程同时访问B,结果访问A时出现如下情况
代表流控成功…
链路模式
先上配置
链路模式意思是,当从某个接口过来的资源达到指定限流条件时,开启限流。它的功能有点类似于针对来源配置项,区别在于:针对来源是针对上级微服务,而链路流控是针对上级接口,也就是说它的粒度更细。这里直接测试了,自己还可以添加多级链路才测试下。
当刷新次数过多,出现这个,则代表流控成功…
流控效果
流控效果也是分为三种:快速失败,Warm up,排队等待。
我们之前一直使用默认的快速失败。这里简单说下其它两种
Warm up
warm up,预热。先来说明一个场景,就是秒杀系统(或者说身边常见的选课系统和报名4 6级),当到达指定时间时,一瞬间巨多的流量冲过来,这样做会产生什么效果呢?没错,系统可能一下子扛不住,直接瘫痪,这时候我们需要给系统一个缓冲的时间。
接着就看配置图
我们想让系统承受每秒为10的请求数量,但我们一开始并不需要里面去承受10的请求数量,我们给它5秒的缓冲时间,它一开始只需要承受3的请求数量。那为什么是3呢?这里就需要提到一个coldFactor,冷因子哈哈哈???和hashmap中的loadFactor差不多。它默认为3
刚开始的阈值=设定的阈值/coldFactor.
所以小总结一下,当我们设置流控效果为warm up时,当前资源从设定的阈值/coldFactor,经过预热时长,才达到真正的设定阈值。
排队等待
就字面意思,你来了没人处理你你就排好队等待,场景令牌桶等等
tips
若有错,欢迎指正