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分支。