目录:
(1)限流规格-流控模式
入门案例:直接模式
关联模式:
链路模式:
(2) 流控效果:warm up
排队等待:
(3)热点参数限流:
(1)流量控制-限流规格
接下来我们学习Sentinel的用法来解决我们之前提到的雪崩问题,在雪崩问题的时候,我们提到了四种解决方案,Sentinel主要实现了其中的三种:流量控制、线程隔离、降级熔断
首先我们学习限流规则:
点击Sentinel控制台的簇点链路:
sentinel_spring_web_context:是根Controller中的方法都是以它为根,是它的子链路,比如这里我们有一个controller
后面有一些按钮,可以给这个资源做一些操作,做一些一些设置:
入门案例:流控模式默认是:直接模式
给这个接口添加流量控制,点击流控按钮:
成功添加:
怎么测试:一种在浏览器狂刷,一种中超过5次就能触发,这种不好做到,再一种可以通过工具JMeter进行并发的模拟测试,打开编写好的测试计划:
20/2=10 QPS就是10大于设置的QPS=5,会触发流量控制
发现请求 发出了,但是每次通过的只有5个,另外5个失败了
显示429显示失败
打开Sentinel控制台:实时监控:发现通过5个,拒绝5个,限流的控制就生效了
在添加流控设置的时候点击高级选项
出现流控模式、流控效果这两个就是Sentinel限流的高级设置了
先研究流控模式:
关联模式:
编写2个接口:
重新启动项目,访问这连个接口
Sentinel控制台刷新出现在链路当中了
给谁添加流控规则呢?给谁限流,就给谁添加流控规则,我们要给query限流,就给它添加规则:
点击高级选项,选择关联,关联资源给/order/update 当update超过阈值5时,就给query做限流
点击query的流控按钮:在点击高级
点击新增,流控规则添加成功了
打开测试工具:
请求的QPS:1000/100=10 大于设置的QPS=5
请求地址:
启动:
这个请求本身没有受到任何影响:但是query受到影响了
访问query:
这样就实现了关联模式
链路模式:
添加方法:service
controller:添加调用servie的方法queryGoods,再添加一个保存的方法
在Sentinel默认只会监控Controller中的接口端点,不会监控service层的方法queryGoods这个方法没有被监控,就不能配置一些限流规则,那怎么办呢?我们应该监控这个方法,需要用到Sentintl中的注解:
如果不关闭,默认会认为是同一个根链路,发展过来的子链路,就不能做链路控制了,只有不同的链路才能做控制
重新启动:先访问接口
在刷新Sentinel控制台,点击簇点链路:
发现他俩变成一个独立的链路,现在可以给goods添加链路规则了,这两个goods是同一个,点击
流控按钮
添加阈值,从/order/query链路进来的
测试:QPS=4>设置的QPS=2
同时发送连个请求一个是save一个query
因为从query访问的QPS设置为2,query这个请求会被阻塞
可以看到save不受影响:
query请求一直有两个是失败的
(2) 流控效果
warm up:做一个预热,(就像人做剧烈运动之前,先做一些拉伸的动作,给身体做一个预热)比如服务器的QPS阈值是10,刚启动立马就把QPS打满,他可能没有反应过来,就挂了,所以说服务刚刚启动,不能把QPS直接打满,在预热模式当中给为最大阈值的三位之一,就是为了冷启动那一刻过高并发导致的故障
先访问一下,控制台才能出来:
设置QPS为10,加热时间为5秒
刚开始成功只有3个,随着时间的推移,QPS会越来越高,成功的越来越多
QPS是有变化的
排队等待:
假设请求是波动类型的,比如说第一秒钟一个请求没来,这个时候度一列是空的,第二秒一下子来了10个请求,其实这一秒的QPS已经到达10了,但是没关系,把你扔到这个队列,然后放行的速度是2秒放行一个,换算成QPS=5,不管你进入的QPS是怎么波动的,出去的QPS一定是一个稳定的,按照200ms去发,起到流量整型的作用,这就是对位服务的一种保护了
点击编辑:
流控规则:排队等待
测试:
设置的QPS为300/20=15>设置的阈值10
像以前就会报错,但是现在不会
页面实时监控:通过的QPS是10,超过的都去队列中去了
发送的QPS是多么的剧烈,放出去的是均衡的,起到了流量整型的作用
(3)热点参数限流:
上面的设置,对商品来讲,不同的商品的热度是不一样的,有一些商品他访问的频率高一些,有一些商品访问的频率低一些,上面的配置,所有都按照这个来,但是比如说有几个特殊的商品它的访问频率就是比较高可不可以把QPS跳的高一点呢?这就是热点参数的高级配置了。
需要添加注解:这个热点参数才会有效
重启:先去访问一下
它的下面多了hot
配置热点参数限流:注意不是点击流控,而是点击热点:这个里面没有高级选项
还可以从左侧栏进行配置:
点击热点规则:点击新增热点限流规则
在点击高级:
热点参数限流就配置好了
测试:
第一个请求:
第二个请求:
第三个请求:
101是默认的QPS是2
102QPS最大是4
103QPS最大是10
而发送给的是5:
启动:
101允许的只有2个成功:
102允许的只有4个成功:
103所有请求成功
热点参数限流:是一种更细粒度的限流,精细到了参数级别,所以有更细粒度的限流需求,可以使用热点参数限流,否则可以使用传统的限流