SpringCloudAlibaba Sentinel(二)降级和熔断
接着上篇文章的内容,在Sentinel中如何进行降级和熔断呢?
熔断降级规则
降级规则
在Sentinel中降级主要有三个策略:RT(最大的响应时间)、异常比例、异常数,也是针对某个资源的设置。而在1.8.0+版本后RT改为了慢调用比例
需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。
> RT:表示该资源1s内处理请求的平均响应时间。
注意:RT值的上限是4900ms,即使超过也是4900ms,如需自定义,可以在启动sentinel时增加参数
-Dcsp.sentinel.statistic.max.rt=x
> 慢调用比例
依旧是在簇点链路的列表视图选择/sentinelTest一行,进入熔断,设置参数如图:
RT设置为800ms,熔断时长设置为20s,为了测试效果,把接口睡眠1s。
@RequestMapping("/sentinelTest")
public String sentinelTest() throws InterruptedException {
Thread.sleep(1000);
return "sentinel-consumer9001 sentinelTest" + RandomUtils.nextInt(0, 1000);
}
解读:响应时间超过RT(即最大的响应时间)值的请求被称为慢调用。
在单位时间(上图的统计时长1s)内,请求的数量大于最小请求数(5),且慢调用的比例>=阈值,
此资源进入熔断状态(20s内不可用)。
Jmeter请求/sentinelTest,使用10个线程执行100次结果。
前面几个请求是正常返回数据,后面全部降级处理,直接返回提示信息(此时该资源已经进入了熔断状态,可以理解为家里的电闸给关了,必须重新打开电闸,才能恢复使用电力)。后面这个资源无论怎样被调用,都无法进入接口,直接返回提示。
异常比例
当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%
表示请求该资源的异常总数占比。先模拟一个异常
@RequestMapping("/sentinelTest")
public String sentinelTest() {
int i = 1 / 0; // 除数为0
return "sentinel-consumer9001 sentinelTest" + RandomUtils.nextInt(0, 1000);
}