Sentinel 降级规则

一 、Sentinel 熔断降级简介

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

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

Sentinel的熔断器是没有半开状态的。

半开的状态系统自动去检测是否请求有异常,没有异常就关闭熔断器恢复使用,有异常则继续打开断路器不可用。具体可参考Hystrix。

 

1.1 RT(平均响应时间,秒级)

  平均响应时间 超出阈值 且 在时间窗口内通过的请求>=5,两个条件同时满足后触发降级

  窗口期过后关闭熔断器

  RT最大4900(更大的需要通过-Dcsp.sentinel.statistic.max.rt=xxxxx才能生效)

  • 说明:

  平均响应时间:当1s内持续进入5个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以ms为单位),那么在接下的时间窗口(DegradeRule中的timeWindow,以s为单位)之内,对这个方法的调用都会自动的熔断(抛出DegradeException)。

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

  • 修改java代码:
package com.ckfuture.springcloud.alibaba.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.TimeUnit;

@RestController
@Slf4j
public class FlowLimitController {
    @GetMapping("/testA")
    public String testA() {
        log.info(Thread.currentThread().getName()+"\t"+".....testA");
        return "------testA";
    }

    @GetMapping("/testB")
    public String testB() {
        return "------testB";
    }
    @GetMapping("/testD")
    public String testD(){
        try{
            TimeUnit.SECONDS.sleep(1);
        }catch (InterruptedException e){e.printStackTrace();}
        log.info("testD 测试RT");
        return "------testD";
    }
}

配置降级规则:

 

 

 

 

1.2 异常比例(秒级)

  QPS>=5且异常比例(秒级统计)超过阈值时,触发降级;时间窗口结束后,关闭降级

 

修改java代码:

    @GetMapping("/testD")
    public String testD(){
        
        int i=10/0;
        log.info("testD 测试异常比例");
        return "------testD";
    }

配置降级规则:

 

利用jmeter测试并发测试后,访问接口熔断降级了。

 

总结:

单独访问一次,必然来一次报错一次(int i=10/0),调用一次错一次;

因为异常比例没有达到1秒请求量超过5个。没有触发降级配置条件,当开启jmeter后,直接高并发发送请求,多次调用达到我们的配置条件了,熔断器开启(保险丝跳闸)。微服务不可用了,不再报错error而是服务降级了。

1.3 异常数(分钟级)

  异常数(分钟统计)超过阈值时,触发降级;时间窗口结束后,关闭降级

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

时间窗口一定要大于等于60秒。

 

 

posted @ 2022-03-15 16:09  创客未来  阅读(399)  评论(0编辑  收藏  举报