Alibaba Sentinel 三 :Sentinel降级

除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积。Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。

sentinel降级策略主要有3点:

  •  RT
  •  异常比例
  •  异常数

RT

官方文档这样解释:平均响应时间,当 1s 内持续进入 N 个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以 ms 为单位),那么在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地熔断(抛出 DegradeException)。注意 Sentinel 默认统计的 RT 上限是 4900 ms,超出此阈值的都会算作 4900 ms,若需要变更此上限可以通过启动配置项 -Dcsp.sentinel.statistic.max.rt=xxx 来配置。

我用下面这张图来解释一下RT降级

1. 新建一个测试方法,每个进入该方法的线程睡眠2秒。

@GetMapping("/testD")
public String testD() {
    try {
        TimeUnit.SECONDS.sleep(2);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return "----testD";
}

2. 新建降级规则,设置RT为1000毫秒,时间窗口是1。我们可以预测一下,这样进行测试,由于RT要求的是1秒,但是我们的后台响应至少需要2秒,所以我们可以预测在接下来的时间窗口内,testD会被降级。

3. 使用postman进行测试

异常比例

当资源的每秒请求量 >= N(可配置),并且每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态,即在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。

1. 新建一个测试方法。

@GetMapping("/testE")
public String testE() {
    int age = 10 / 0;
    return "----testE 测试异常数";
}

2. 设置异常比例的降级规则

异常比例为0.3,当每秒有10个请求进入的时候,如果出现了大于等于3次的异常,服务就会被降级,在指定的时间窗口内不能被正常使用。

3. 接下来可以使用postman进行测试,测试的方式不再赘述。

异常数

异常数 :当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态。
 

异常数和异常比例都是根据异常从不同的维度来进行资源降级的。

可以按照异常比例的测试方法进行测试。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章