RT(平均响应时间,秒级)
平均响应时间超出阈值且在时间窗口内通过的请求>=5,两个条件同时满足后触发降级
窗口期过后关闭断路器
RT最大4900(更大的需要通过-Dcsp.sentinel.statistic.max.rt=XXXX设置)
异常比例(秒级)
QPS>=5且异常比例(秒级统计)超过阈值时,触发降级,窗口期结束,关闭降级
异常数(分钟级)
异常数(分钟统计)超过阈值时,触发降级,窗口期结束,关闭降级
Sentinel熔断降级会在调用链路中的某个资源出现不稳定状态时(例如调用超时或者异常比例升高,对这个资源的调用进行限制,让请求快速失败),避免影响到其他的资源而导致级联错误
当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都是自动熔断(默认行为是跑出DegradeException)
Sentinel的断路器是没有半开状态的:
半开的状态系统自动去检测是否请求有异常,没有异常就关闭断路器恢复使用,有异常则继续打开断路器不可用。具体可以参考Hystrix
RT
平均响应时间 (DEGRADE_GRADE_RT):当资源的平均响应时间超过阈值(DegradeRule 中的 count,以 ms 为单位)之后,资源进入准降级状态。接下来如果持续进入 5 个请求,它们的 RT 都持续超过这个阈值,那么在接下的时间窗口(DegradeRule 中的timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地返回(抛出 DegradeException)。在下一个时间窗口到来时, 会接着再放入5个请求, 再重复上面的判断.
测试:
@GetMapping("/testD")
public String testD()
{
try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); }
log.info("testD 测试RT");
return "------testD";
}
结论:
按照上述配置,
永远一秒钟进来的10个线程(大于5个)调用testD,我们希望200毫秒处理完本次任务,
如果超过200毫秒还没处理完,在未来1秒的时间窗口内,断路器打开微服务不可用
停止jmeter,没有这么大的访问量了,断路器关闭,微服务恢复
异常比例
异常比例 :当资源的每秒异常总数占通过量的比值超过阈值之后,资源进入降级状态,即在接下的时间窗口(以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0, 1],代表 0% - 100%。
异常数
异常数 :当资源近 1 分钟的异常数目超过阈值之后会进行熔断;时间窗口一定要大于60秒