[toc]

一、sentinel降级说明

Sentinel熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。

当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。

二、降级演示

1. 慢调用比例

慢调用比例:当资源的响应时间超过最大RT(以ms为单位,最大RT即最大响应时间)之后,资源进入准降级状态。如果接下来1s内持续进入5个请求(最小请求数),它们的RT都持续超过这个阈值,那么在接下来的熔断时长之内,就会对这个方法进行服务降级。其中的“比例阈值”我设置发现无效,下次编辑会重置成1

1. 参数配置

image.png

2. 代码编写

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

3. 测试

image.png
当接入数超过预期值,就会进行开启熔断

4. 反思

如上:条件组合

  1. 一秒内最小接收5个请求数
  2. 每个请求平均响应时长超过1ms
  3. 10秒内熔断窗口期,超过窗口期,熔断关闭
    image.png

注意Sentinel默认统计的RT上限是4900ms,超出此阈值的都会算作4900ms,若需要变更此上限可以通过启动配置项-Dcsp.sentinel.statistic.max.rt=xxx来配置

2. 异常比例

异常比例:当资源的每秒请求数大于等于最小请求数,并且异常总数占通过量的比例超过比例阈值时,资源进入降级状态。

1. 参数配置

异常比例为0.2,窗口期为5秒,请求数为5
image.png

2. 代码

    @GetMapping("/testD")
    public String testD() {
        int age = 10/0;
        return "------testD";
    }

3. 测试

image.png
异常比例达到后,进行开启熔断,时长为5秒,5秒过后,再次进行判断是否开启熔断

4. 反思

如上:条件组合

  1. 一秒内最小接收5个请求数
  2. 所有请求数,异常比例超过0.2后,触发熔断
  3. 5秒内熔断窗口期,超过窗口期,熔断关闭

3. 异常数

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

1. 参数设置

最小5个请求,异常数为3时,触发熔断,熔断窗口为5秒。
image.png

时间窗口一定要大于等于60秒
注意由于统计时间窗口是分钟级别的,若 timewindow小于60s,则结束熔断状态后仍可能再进入熔断状态。

2. 代码

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

3. 测试

当异常数,达到3时,触发熔断
image.png

4. 反思

image.png
如上:条件组合

  1. 一秒内最小接收5个请求数
  2. 所有请求数,异常超过3个,触发熔断
  3. 5秒内熔断窗口期,超过窗口期,熔断关闭

Q.E.D.


只有创造,才是真正的享受,只有拚搏,才是充实的生活。