引言
书接上篇 微服务守护神-Sentinel-流控规则 ,上面介绍了Sentinel流控规则,本篇继续来Sentinel的降级规则。
降级规则
那啥为降级呢?降级可以理解为下降等次,比如:你从广州到北京,有钱时,你可以坐头等舱去北京,没钱时,你可以坐动车去北京。目标一样,方式不同,体验不同。飞机比动车,动车就是降级。开发中也是一样,比如:服务A调用服务B,理想状态返回服务A想要的结果,如果哪天服务B宕机了调不通,此时走降级,快速返回调用异常提示结果。保证时间用在该用的地方。
Sentinel降级规则就是设置当满足什么条件的时候,对服务进行降级。Sentinel提供了三个衡量条件:
-
慢调用比例: 选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。
-
异常比例: 当单位统计时长内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是
[0.0, 1.0]
,代表 0% - 100%。 -
异常数:当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。
慢调用比例案例
步骤1:在shop-order-server项目中新增FallBackController.java类
package cn.wolfcode.controller;
@RestController
@Slf4j
public class FallBackController {
@RequestMapping("/fallBack1")
public String fallBack1(){
try {
log.info("fallBack1执行业务逻辑");
//模拟业务耗时
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "fallBack1";
}
}
步骤2:新增降级规则
上面配置表示,如果在1S之内,有【超过1个的请求】且这些请求中【响应时间>最大RT】的【请求数量比例>10%】,就会触发熔断,在接下来的10s之内都不会调用真实方法,直接走降级方法。
比如: 最大RT=900,比例阈值=0.1,熔断时长=10,最小请求数=10
-
情况1: 1秒内的有20个请求,只有10个请求响应时间>900ms, 那慢调用比例=0.5,这种情况就会触发熔断
-
情况2: 1秒内的有20个请求,只有1个请求响应时间>900ms, 那慢调用比例=0.05,这种情况不会触发熔断
-
情况3: 1秒内的有8个请求,只有6个请求响应时间>900ms, 那慢调用比例=0.75,这种情况不会触发熔断,因为最小请求数这个条件没有满足.
注意: 我们做实验的时候把最小请求数设置为1,因为在1秒内,手动操作很难在1s内发两个请求过去,所以要做出效果,最好把最小请求数设置为1。
步骤3:测试访问: http://localhost:8091/fallBack1
异常比例案例
步骤1:在shop-order-server项目的FallBackController.java类新增fallBack2方法
int i=0;
@RequestMapping("/fallBack2")
public String fallBack2(){
log.info("fallBack2执行业务逻辑");
//模拟出现异常,异常比例为33%
if(++i%3==0){
throw new RuntimeException();
}
return "fallBack2";
}
步骤2:新增降级规则
上面配置表示,在1s之内,,有【超过3个的请求】,异常比例30%的情况下,触发熔断,熔断时长为10s.
步骤3:测试访问: http://localhost:8091/fallBack2
异常数案例
步骤1:在shop-order-server项目的FallBackController.java类新增fallBack3方法
@RequestMapping("/fallBack3")
public String fallBack3(String name){
log.info("fallBack3执行业务逻辑");
if("wolfcode".equals(name)){
throw new RuntimeException();
}
return "fallBack3";
}
步骤2:新增降级规则
上面配置表示,在1s之内,,有【超过3个的请求】,请求中超过2个请求出现异常就会触发熔断,熔断时长为10s
步骤3:测试访问: http://localhost:8091/fallBack3
ok,到这,sentinel的降级规则就ok啦,后面还有啥规则呢?且听下回分解。
看文字不过瘾可以切换视频版:SpringCloud Alibaba 极简入门