2-CloudAlibaba-Sentinel
(熔断降级)学习笔记2020.10.22
前言: (官网)
除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的时候,可能需要远程调用银联提供的 API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用。
熔断策略
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 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。也就是
Hystrix
的服务熔断、降级功能。
1.0 熔断策略-慢调用比例
1.1 api
接口
@GetMapping("/test3")
public String testD() {
try {
//睡眠1秒
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("test3-测试慢调用");
return "------test3";
}
1.2 进行配置与测试
按照下图进行配置
2.0 熔断策略-异常比例
2.1 api
接口
private static int count = 1;
@GetMapping("/test4")
public String testE() {
log.info("test4 测试异常数");
if (count < 15){
++count;
int age = 10 / 0;
}
return "------test4 测试异常数";
}
2.2 进行配置与测试
按下图进行配置与测试。
3.0 熔断策略-异常数
3.1 api
接口
private static int count = 1;
@GetMapping("/test4")
public String testE() {
log.info("test4 测试异常数");
if (count < 15){
++count;
int age = 10 / 0;
}
return "------test4 测试异常数";
}
3.2 进行配置与测试
按下图进行配置与测试。
注意: 请求在没开启熔断的时候, 是可以
通过
并返回异常结果的, 然后返回的异常结果达到了阈值就会开启熔断, 就会进行拒绝
请求。
1