ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Sentinel**熔断降级**会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出`DegradeException`)。 一共有三种熔断降级策略: * RT平均响应时长 * 异常比例 * 异常数量 先为大家介绍第一种:RT平均响应时长降级策略。 ## 一、RT降级策略 ![](https://img.kancloud.cn/62/a1/62a1097fc0e7ea07f8515eb07a84de91_829x150.png) 以下的两个条件同时满足才能触发RT服务降级。 * 一秒钟内通过5个以上的请求,全部超时 * 超时是指超过RT平均响应时长的配置值(上图红色框配置) 触发RT服务降级规则之后,在时间窗口期内(上图绿色框配置)对资源的访问将被降级,即:断路器被打开。时间窗口期之后关闭断路器。 > 需要注意的是: > > 1. RT平均响应时长最大可配值为4900毫秒。当配置超过4900的时候,默认等于4900。 > 2. 官方之所以设置RT最大值为4900,是因为当一次请求超过5秒就到了用户能忍受的极限。 > 3. 如果确实希望修改RT可配最大值,使用`-Dcsp.sentinel.statistic.max.rt=xxx`进行配置 #### 问题:为什么要1秒超时5次才降级? 答:如果一个服务的请求量比较小,几秒钟才有一次请求,不巧这1次请求因为瞬时网络原因失败了,进而导致服务降级,这种情况是我们不愿意看到的。服务降级仍然是主要指针对高并发情况下,导致的服务资源紧张的情况下生效。 * 不能因为有一例新冠患者,就进行封城!同样道理,不能因为个别情况,就进行服务降级! * minRequestAmount=5秒钟,是在DeGradeRule中的配置`RuleConstant.DEGRADE_DEFAULT_MIN_REQUEST_AMOUNT`。 ![](https://img.kancloud.cn/20/ee/20eeaedd61d8b67dcbceb592cd60aa3e_1491x253.png) ## 二、RT熔断降级测试 为了更容易触发降级,我们将平均响应时长设置为0.1秒(我们的方法执行时间肯定大于0.1秒)。降级之后的时间窗口是10秒。 ![](https://img.kancloud.cn/e9/93/e993fe112c38b0393bc4f0b01831ca70_586x145.png) 参考Hystrix章节的《Jemeter模拟触发服务熔断》创建Jemeter接口测试用例。为了更明显的触发降级规则:配置1秒钟发送10个请求“/sysuser/pwd/reset”。 ![](https://img.kancloud.cn/e3/d2/e3d24b963cda0a8e82a7095e47d6ed12_349x144.png) * 下图为**服务熔断降级之前**的响应结果。需要注意的是:虽然超过了0.1秒平均响应时长,但是可以正常响应结果。 ![](https://img.kancloud.cn/51/e0/51e03df68a46c9ad8c4de8ff52e8b2f9_753x323.png) * 下图为**服务熔断降级之后**的响应结果,已经超过5次(一秒内发送的),所有请求处理均超过100ms。sentinel对于异常请求的临界状态判断并未执行的十分严格,有的时候是在第6次请求之后才进入服务降级。 ![](https://img.kancloud.cn/75/ae/75ae6669715318daa106ccf7cc726918_555x395.png) 哎,大家看“尊敬的客户您好,系统服务繁忙,请稍后再试!”这个响应结果是不是有点眼熟?没错,它就是我们上一节BlockHandler的处理方法。sentinel服务降级之后,有2种处理方法: * fallback方法(defaultFallback方法)处理DegradeException,即:处理服务熔断降级。fallback服务降级处理方法我们后面的章节讲! * 当服务降级没有定义fallback方法的时候,就会去执行BlockHandler方法。二者都定义了的话,也是执行BlockHandler方法。**BlockHandler优先** ## 三、sentinel流控规则与降级规则的区别 初学者咋一看sentinel流控规则与降级规则,好像没什么区别啊?为什么不统一叫做规则配置?还要去分开呢?为了方便大家的理解,我们来比较一下。 | 比较点 | 流控规则 | 降级规则 | | --- | --- | --- | | 内容比较 | QPS、线程数、关联、链路限流、冷启动及匀速排队 | 平均响应时长、异常比例、异常数量 | | 解决问题的方向 | 外部流量压力导致问题 | 内部编码及处理能力导致的问题 | | Exception | FlowException(BlockException) | DegradeException(BlockException) | | 降级处理方法 | BlockHandler | fallback或BlockHandler |