SpringCloud-高级篇(二)

目录:

(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所有请求成功 

热点参数限流:是一种更细粒度的限流,精细到了参数级别,所以有更细粒度的限流需求,可以使用热点参数限流,否则可以使用传统的限流

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵俺第一专栏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值