Sentinel熔断规则原理示例详解分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Sentinel熔断规则原理⽰例详解分析⽬录
概述
熔断(降级)策略
慢调⽤⽐例
概念
测试
异常⽐例
概念
测试
异常数
概念
测试
概述
除了流量控制以外,对调⽤链路中不稳定的资源进⾏熔断降级也是保障⾼可⽤的重要措施之⼀。
由于调⽤关系的复杂性,如果调⽤链路中的某个资源不稳定,最终会导致请求发⽣堆积。
Sentinel 熔断降级会在调⽤链路中某个资源出现不稳定状态时(例如调⽤超时、异常⽐例升⾼、异常数堆积)
对这个资源的调⽤进⾏限制,让请求快速失败从⽽避免影响到其它的资源⽽导致级联错误。
当资源被降级后,在接下来的降级时间窗⼝之内会对该资源的调⽤⾃动熔断
(默认⾏为是抛出 DegradeException)。
综上可知:
熔断是⽤来避免服务架构中的雪崩的发⽣
当监控到链路中的异常(响应时间超时、异常⽐例升⾼、异常数堆积)达到阈值⾃动触发熔断
在降级时间窗⼝之内会对该资源的调⽤⾃动熔断
熔断(降级)策略
慢调⽤⽐例
概念
慢调⽤⽐例 (SLOW_REQUEST_RATIO):
选择以慢调⽤⽐例作为阈值,需要设置允许的慢调⽤ RT(即最⼤的响应时间),
请求的响应时间⼤于该值则统计为慢调⽤。
当单位统计时长(statIntervalMs)内请求数⽬⼤于设置的最⼩请求数⽬,
并且慢调⽤的⽐例⼤于阈值,则接下来的熔断时长内请求会⾃动被熔断。
经过熔断时长后熔断器会进⼊探测恢复状态(HALF-OPEN 状态),
若接下来的⼀个请求响应时间⼩于设置的慢调⽤ RT 则结束熔断,若⼤于设置的慢调⽤ RT 则会再次被熔断。
注意Sentinel默认统计的RT上限是4900ms,超出此阈值的都会算作4900ms,
若需要变更此上限可以通过启动配置项-Dcsp.sentinel.statistic.max.rt=xxx来配置
测试
我们在Sentinel DashBoard界⾯点击熔断规则,然后按照下图配置新增慢调⽤⽐例的熔断规则。
如下所⽰
我们本次使⽤的Sentinel版本是1.8.2,在1.8之前的版本慢调⽤⽐例就是RT,
慢调⽤相较于之前的RT加⼊了⽐例阈值,相当于多加了⼀个条件。
慢调⽤⽐例的熔断时机:在统计时长内,请求数⼤于5个,如若⼤于指定⽐例阈值的请求数的响应时间都⼤于最⼤RT,那么会熔断该服务,熔断时间为设置的熔断时长
异常⽐例
概念
异常⽐例 (DEGRADE_GRADE_EXCEPTION_RATIO):当资源的每秒请求量 >= N(可配置),
并且每秒异常总数占通过量的⽐值超过阈值(DegradeRule 中的 count)之后,
资源进⼊降级状态,即在接下的时间窗⼝(DegradeRule 中的 timeWindow,以 s 为单位)之内,
对这个⽅法的调⽤都会⾃动地返回。
异常⽐率的阈值范围是 [0.0, 1.0],代表 0% - 100%。
测试
相较于慢调⽤⽐例,异常⽐例就简单了,通过修改或者新增熔断规则我们可以发现当我们选择异常⽐例时,
只是⽐慢调⽤⽐例少了⼀个RT。
我们按照下图所⽰配置异常⽐例的熔断规则,如下所⽰:
为了演⽰异常我们修改下TestController.java中的/test/hello⽅法。
如下所⽰:
@RequestMapping("/hello")
public String sayHello(Integer id){
("Hello, Sentinel!");
if(id < 0){
throw new RuntimeException();
}
return "Hello, Sentinel!";
}
当请求数⼤于5个且异常⽐例阈值⼤于0.1时就会⾃动熔断
这是⼀个拼⼿速的实验,点击速度慢的⼩伙伴可以把统计时长调长⼀些(默认最⼤为4900ms)
异常数
概念
异常数 (DEGRADE_GRADE_EXCEPTION_COUNT):当资源近 1 分钟的异常数⽬超过阈值之后会进⾏熔断。
注意由于统计时间窗⼝是分钟级别的,若 timeWindow ⼩于 60s,
则结束熔断状态后仍可能再进⼊熔断状态。
测试
相⽐于前⾯两个异常数就更简单了,我们按下图所⽰修改熔断规则。
如图所⽰:
放异常数达到5个后就会⾃动熔断该服务了。
如下图所⽰:
以上就是Sentinel熔断规则原理⽰例详解分析的详细内容,更多关于Sentinel熔断规则的资料请关注其它相关⽂章!。