Sentinel系列之(五)降级规则

降级规则

官网:https://sentinelguard.io/zh-cn/docs/circuit-breaking.html

1. 基本介绍

​ Sentinel熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。
​ 当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。

注:Sentinel的断路器是没有半开状态的

降级策略

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

    秒级:平均响应时间(这个响应时间指的是接口的执行时间)超出阈值(指上图中设置的RT的值)且在1s内通过的请求 >=5,两个条件同时满足触发降级,时间窗口过后关闭断路器,RT最大值为4900(更大的通过)启动配置项-Dcsp.sentinel.statistic.max.rt=xxx来配置。

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

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

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

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

    注:异常数的时间窗口一定要大于等于60s

2. 降级策略
2.1 RT

基于cloudalibaba-sentinel-service8401项目继续进行配置

  • 修改FlowLimitController,增加如下代码

    @GetMapping("/testD")
    public String testD()
    {
        // 接口调用时间1s
        try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); }
        log.info("testD 测试RT");
    
        return "------testD";
    }
    
  • Sentinel中增加配置

    ​ 上述配置的含义是:1s内如果持续进入了5个请求,同时/testD接口的执行时间超过了200毫秒(RT的值),在未来的1s(时间窗口)内,断路器开启,改接口不可用,时间窗口后,接口恢复调用。

  • 配置JMeter

2.2 异常比例

基于cloudalibaba-sentinel-service8401项目继续进行配置

  • 修改FlowLimitController

    @GetMapping("/testD")
    public String testD()
    {
        log.info("testD 测试 异常比例");
        int count = 10 / 0;
        return "------testD";
    }
    
  • Sentinel中增加配置

    ​ 上述配置的含义是:1s内如果持续进入了5个请求,同时访问/testD接口每秒的异常比例超过了20%(异常比例的值),在未来的1s(时间窗口)内,断路器开启,改接口不可用,时间窗口后,接口恢复调用。

  • 配置JMeter

2.3 异常数

基于cloudalibaba-sentinel-service8401项目继续进行配置

  • 修改FlowLimitController,增加如下代码

    @GetMapping("/testE")
    public String testE()
    {
        log.info("testE 测试异常数");
        int age = 10/0;
        return "------testE 测试异常数";
    }
    
  • Sentinel中增加配置

    ​ 上述配置的含义是:1s内如果访问/testD接口的异常数目超过了5(异常数的值),在未来的70s(时间窗口)内,断路器开启,改接口不可用,时间窗口后,接口恢复调用。

  • 测试

    1秒内访问5次http://localhost:8401/testE,触发降级。

posted @   刘二水  阅读(193)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示