共计 2277 个字符,预计需要花费 6 分钟才能阅读完成。
Sentinel 除了流量管制以外,对调用链路中不稳固的资源进行熔断降级也是保障高可用的重要措施之一。因为调用关系的复杂性,如果调用链路中的某个资源不稳固,最终会导致申请产生沉积。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 状态),若接下来的一个申请胜利实现(没有谬误)则完结熔断,否则会再次被熔断。
熔断降级规定阐明:
熔断降级规定(DegradeRule)蕴含上面几个重要的属性:
Field | 阐明 | 默认值 |
---|---|---|
resource | 资源名,即规定的作用对象 | |
grade | 熔断策略,反对慢调用比例 / 异样比例 / 异样数策略 | 慢调用比例 |
count | 慢调用比例模式下为慢调用临界 RT(超出该值计为慢调用);异样比例 / 异样数模式下为对应的阈值 | |
timeWindow | 熔断时长,单位为 s | |
minRequestAmount | 熔断触发的最小申请数,申请数小于该值时即便异样比率超出阈值也不会熔断 | 5 |
statIntervalMs | 统计时长(单位为 ms),如 60*1000 代表分钟级 | 1000 ms |
slowRatioThreshold | 慢调用比例阈值,仅慢调用比例模式无效 |
接下来咱们对这三种熔断策略别离进行配置测试:
1、寿险在 SystemController.java 外面增加须要熔断测试的接口
@ApiOperation(value = "慢调用比例熔断策略")
@GetMapping(value = "sentinel/slow/request/ratio")
public Result<String> sentinelRR() {
try {
double randomNumber;
randomNumber = Math.random();
if (randomNumber >= 0 && randomNumber <= 0.80) {Thread.sleep(300L);
} else if (randomNumber >= 0.80 && randomNumber <= 0.80 + 0.10) {Thread.sleep(10L);
}
} catch (InterruptedException e) {e.printStackTrace();
}
return Result.success("慢调用比例熔断策略");
}
@ApiOperation(value = "异样比例熔断策略")
@GetMapping(value = "sentinel/error/ratio")
public Result sentinelRatio() {
int i = 1/0;
return Result.success("异样比例熔断策略");
}
@ApiOperation(value = "异样数熔断策略")
@GetMapping(value = "sentinel/error/count")
public Result sentinelCount() {
int i = 1/0;
return Result.success("异样数熔断策略");
}
2、浏览器关上 Sentinel 治理控制台,关上降级规定菜单,新增降级规定,首先测试“慢调用比例”,依据官网介绍,最大 RT 是指最大容许的响应工夫,咱们这里设置成 200ms,比例阈值设置成 0.8,熔断时长为 10s,最小申请数为 5,意思是指:在 1ms 内申请数目大于 5,并且慢调用的比例大于 80%,则接下来的熔断时长内申请会主动被熔断,熔断时长是 10 秒,10 秒之后会进入探测复原状态(HALF-OPEN 状态),若接下来的一个申请响应工夫小于 200ms,则完结熔断,若大于 200ms 则会再次被熔断。
3、关上 Jmeter,点击新建 -> 测试计划 -> 线程组 ->HTTP 申请 - 聚合报告。线程组设置为 15,循环次数 1000
4、测试后果
5、异样比例和异样数参考下面的测试方法进行测试,这里不再赘述,只是测试之前须要把 GitEgg-Platform 外面 GitEggControllerAdvice.java 对立异样解决的代码正文掉,否则测试代码抛出的异样会被捕捉,达不到料想的成果。
本文源码在 https://gitee.com/wmz1930/GitEgg 的 chapter-15 分支。