Sentinel降级
降级
除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积。
Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。
当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。
sentinel的断路器是没有半开状态的,要么是打开,要么是关闭。
降级相对于流控设置比较简单,我们来看一下
在sentinel的界面
我们针对资源/test-a进行降级设置,Sentinel具有3种降级策略,我们来一一说明
降级策略:
- RT
- 异常指数
- 异常数
RT
什么是RT?
RT:平均响应时间 (DEGRADE_GRADE_RT);当 1s 内持续进入 5 个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以 ms 为单位),那么在接下来的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地熔断(抛出 DegradeException)。
注意 Sentinel 默认统计的 RT 上限是 4900 ms,超出此阈值的都会算作 4900 ms,若需要变更此上限可以通过启动配置项 -Dcsp.sentinel.statistic.max.rt=xxx 来配置。
我们来个流程图更清晰点
异常比例
**异常比例:**当资源的每秒请求量 >= 5,并且每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态,即在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。
我们也来上个图:
异常数
异常数:当资源近1分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态。所以时间窗口一定要大于等于60秒。
注意:异常数是分钟统计的
总结
上面阐述了Sentinel的降级设置,还是比较灵活的;还有一点就是Sentinel的断路器是没有半开状态的,也许之后的版本会有。
半开的状态系统自动去检测是否请求有异常,没有异常就关闭断路器,有异常则继续打开断路器。具体可以参考Hystrix