本篇继续我们的Sentinel,本篇记录一下Sentinel的熔断降级,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!
详细资料看官方文档 点此查看
环境说明: 统一改为官方推荐的版本。
版本对应 点此查看
目录
降级规则介绍
先看下Sentinel降级规则的添加页面:
熔断降级规则(DegradeRule)包含下面几个重要的属性:
Field | 说明 | 默认值 |
---|---|---|
resource | 资源名,即规则的作用对象 | |
grade | 熔断策略,支持慢调用比例/异常比例/异常数策略 | 慢调用比例 |
count | 慢调用比例模式下为慢调用临界 RT(超出该值计为慢调用);异常比例/异常数模式下为对应的阈值 | |
timeWindow | 熔断时长,单位为 s | |
minRequestAmount | 熔断触发的最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断(1.7.0 引入) | 5 |
statIntervalMs | 统计时长(单位为 ms),如 60*1000 代表分钟级(1.8.0 引入) | 1000 ms |
slowRatioThreshold | 慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入) |
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 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。
下面分别对三种熔断策略进行记录
降级策略 - 慢调用比例
完善测试类
在FlowLimitController类中增加以下测试方法。
@GetMapping("/testD")
public String testD() {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "------testD";
}
配置
以下配置的含义为:如果1秒内持续进入大于等于5个请求,并且请求响应的时间大于200ms时,这个请求即为慢调用,当慢调用的比例大于1时会触发降级,直到5秒后新的请求的响应时间小于200ms时,才结束熔断。
测试
使用jmeter创建如下线程组访问 http://localhost:8401/testD
启动线程组后我们在浏览器访问 http://localhost:8401/testD 报错如下,说明降级生效:
过几秒后jmeter线程跑完再次访问 http://localhost:8401/testD 可以正常访问。
降级策略 - 异常比例
完善测试类
在FlowLimitController类中增加以下测试方法。
@GetMapping("/testE")
public String testE() {
log.info("testE 测试异常比例");
int age = 10 / 0;
return "------testE 测试异常比例";
}
配置
以下配置的含义为:如果1秒内持续进入大于等于5个请求,并且请求中报异常的比例超过0.2则触发降级(降级时间持续5秒),5秒后,新的请求若正常返回,才结束熔断。
测试
访问 http://localhost:8401/testE 结果如下:
使用上面创建的线程组并修改http请求的访问地址为 http://localhost:8401/testE
启动线程组后我们再浏览器访问 http://localhost:8401/testE 报错如下,说明降级生效:
过几秒后jmeter线程跑完再次访问 http://localhost:8401/testE 结果如下:
降级策略 - 异常数
配置
以下配置的含义为:如果1秒内持续进入大于等于5个请求,并且请求异常数超过5时,会触发降级(降级时间持续5秒),5秒后,新的请求若正常返回,才结束熔断。
测试
效果同 降级策略 - 异常比例。