Spring Cloud Alibaba——Sentinel熔断降级

本文详细解析Sentinel熔断降级的三种策略:慢调用比例、异常比例和异常数。通过实例代码和配置,演示了如何设置规则以及使用Jmeter进行测试,验证了熔断效果。当请求达到一定比例的慢调用或异常时,Sentinel将自动进行熔断,保护系统稳定性。
摘要由CSDN通过智能技术生成

官方说明

先附上Sentinel官网地址,来看看官方是如何说的

在这里插入图片描述

在这里插入图片描述
以上便是官网的说明及为什么要使用熔断降级。理解了之后,我们就来讨论下熔断策略

熔断策略

Sentinel 提供以下几种熔断策略:

慢调用比例 (SLOW_REQUEST_RATIO):选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。

异常比例 (ERROR_RATIO):当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。

异常数 (ERROR_COUNT):当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

测试

慢调用比例

或许有的小伙伴对新版本中的慢调用比例策略不理解,我们结合测试来慢慢分析它。我们在源项目的controller层新添加了代码如下
在这里插入图片描述
若不熟悉的小伙伴可以去看之前的sentinel文章,或者简单理解,就是新添加了一个"/testD"访问路径,在浏览器输入http://ip地址:端口号/testD,页面显示"---------testD".
接下来我们在sentinel平台为资源/testD添加熔断规则如图:
在这里插入图片描述
这里还需给大家看一个图

在这里插入图片描述
结合两张图以及官方对慢调用比例的说明我们来分析到底是什么意思
首先我们规定的是最大RT为200ms,即最大的响应时间。正常情况下,
若每次请求/testD,它的处理时间都在200ms以下,则属于正常请求资源。此时我们在代码中使testD睡眠一秒(假装它不稳定),如图:
在这里插入图片描述
这个时候当我们再去请求/testD时,请求的响应时间已经大于最大RT了。此时,超过最大RT的请求则记为慢调用,而当单位统计时长内(我们设置的为1s)请求数目大于设置的最小请求数目(我们设置的为5),并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。什么是慢调用的比例大于阈值?当我们出现超过最大RT的请求,它则记为慢调用,若接下来有10个请求,并且10个请求中有5个以上响应时间都超过了最大RT,则慢调用数量占比是不是就大于了我们设置的比例阈值(我们设置的为0.5)呢?是不是忽然就理解了,此时,两个条件我们都已满足(①请求数目大于设置的最小请求数目,②慢调用的比例大于阈值),则接下来的熔断时长内(我们设置为1s)请求会自动被熔断,自动被熔断的意思就是此时后台此资源不服务,你无法请求它,明确告诉你结果,别等了,我暂时不工作。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。理解了之后,我们用Jmeter来测试一下,看看它的结果如何如图:

创建线程组,每秒中有10个请求去请求/testD资源,很显然它会使请求自动熔断,接下来运行该线程组。

在这里插入图片描述
我们此时用浏览器去访问该资源,出现如下情况
在这里插入图片描述
当我们停掉线程组,1s过后,再次去访问
在这里插入图片描述
该服务又成功活了过来,嘿嘿嘿!!!

异常比例

有了上面的讲解之后,异常比例也就容易理解多了,结合官方的说明,我就直接又复制过来,省的你们往上翻
在这里插入图片描述
代码修改模拟异常:
在这里插入图片描述

我们直接上配置
在这里插入图片描述
这下不需要一一解释了吧,直接开启Jmeter进行测试,
在这里插入图片描述
由于此时次次都是异常,明显异常数的比例大于我们设定的0.2,并且请求数量也大于我们设定的5,所以必定触发熔断。
在这里插入图片描述
果然,结果符合我们的期待。
当我们停下Jmeter测试之后,经过熔断时长1s后,再去访问此资源,页面也就报错了如图
在这里插入图片描述

异常数

官方:
在这里插入图片描述
配置:
在这里插入图片描述
代码:
在这里插入图片描述
当统计时长内(60000ms=1min),一旦超过5次异常,则直接熔断,我们只需多刷新几次即可,如图:
在这里插入图片描述
经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

Tip

本文章针对 Sentinel 1.8.0 及以上版本。1.8.0 版本对熔断降级特性进行了全新的改进升级,请使用最新版本以更好地利用熔断降级的能力。个人参照官网理解,若哪里有错,感谢指正!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值