本篇继续我们的Sentinel,本篇记录一下Sentinel的熔断降级,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

详细资料看官方文档  点此查看  

环境说明: 统一改为官方推荐的版本。

版本对应 点此查看

目录

降级规则介绍

降级策略 - 慢调用比例

完善测试类

配置

测试 

降级策略 - 异常比例

完善测试类

配置

测试 

降级策略 - 异常数

配置

测试


降级规则介绍

先看下Sentinel降级规则的添加页面:


熔断降级规则(DegradeRule)包含下面几个重要的属性:

Field说明默认值
resource资源名,即规则的作用对象
grade熔断策略,支持慢调用比例/异常比例/异常数策略慢调用比例
count慢调用比例模式下为慢调用临界 RT(超出该值计为慢调用);异常比例/异常数模式下为对应的阈值
timeWindow熔断时长,单位为 s
minRequestAmount熔断触发的最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断(1.7.0 引入)5
statIntervalMs统计时长(单位为 ms),如 60*1000 代表分钟级(1.8.0 引入)1000 ms
slowRatioThreshold慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入)

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 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

下面分别对三种熔断策略进行记录

降级策略 - 慢调用比例

完善测试类

在FlowLimitController类中增加以下测试方法。

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

配置

以下配置的含义为:如果1秒内持续进入大于等于5个请求,并且请求响应的时间大于200ms时,这个请求即为慢调用,当慢调用的比例大于1时会触发降级,直到5秒后新的请求的响应时间小于200ms时,才结束熔断。

测试 

使用jmeter创建如下线程组访问 http://localhost:8401/testD

启动线程组后我们在浏览器访问 http://localhost:8401/testD 报错如下,说明降级生效: 

过几秒后jmeter线程跑完再次访问 http://localhost:8401/testD 可以正常访问。

降级策略 - 异常比例

完善测试类

在FlowLimitController类中增加以下测试方法。

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

配置

以下配置的含义为:如果1秒内持续进入大于等于5个请求,并且请求中报异常的比例超过0.2则触发降级(降级时间持续5秒),5秒后,新的请求若正常返回,才结束熔断。 

测试 

访问 http://localhost:8401/testE 结果如下:

使用上面创建的线程组并修改http请求的访问地址为 http://localhost:8401/testE 

启动线程组后我们再浏览器访问 http://localhost:8401/testE 报错如下,说明降级生效: 

过几秒后jmeter线程跑完再次访问 http://localhost:8401/testE 结果如下:

降级策略 - 异常数

配置

以下配置的含义为:如果1秒内持续进入大于等于5个请求,并且请求异常数超过5时,会触发降级(降级时间持续5秒),5秒后,新的请求若正常返回,才结束熔断。

测试

效果同 降级策略 - 异常比例。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐