降级规则
官网: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,触发降级。