Sentinel熔断降级说明

前言

Sentinel在1.8.0版本对熔断降级做了大的调整,可以定义任意时长的熔断时间,引入了半开启恢复支持。下面梳理下相关特性

一、熔断状态

 

熔断有三种状态,分别为OPEN、HALF_OPEN、CLOSED。

状态说明
OPEN表示熔断开启,拒绝所有请求
HALF_OPEN探测恢复状态,如果接下来的一个请求顺利通过则结束熔断,否则继续熔断
CLOSED表示熔断关闭,请求顺利通过

二、熔断策略

 

熔断降级支持慢调用比例、异常比例、异常数三种熔断策略。先明确下面两个概念:慢调用:指耗时大于阈值RT的请求称为慢调用,阈值RT由用户设置

最小请求数:允许通过的最小请求数量,在最小请求数量内不发生熔断,由用户设置

1.慢调用比例

 
属性说明
最大RT需要设置的阈值,超过该值则为慢应用
比例阈值慢调用占所有的调用的比率,范围:[0~1]
熔断时长在这段时间内发生熔断、拒绝所有请求
最小请求数即允许通过的最小请求数,在该数量内不发生熔断

执行逻辑

熔断(OPEN):请求数大于最小请求数并且慢调用的比率大于比例阈值则发生熔断,熔断时长为用户自定义设置。

探测(HALFOPEN):当熔断过了定义的熔断时长,状态由熔断(OPEN)变为探测(HALFOPEN)。

  • 如果接下来的一个请求小于最大RT,说明慢调用已经恢复,结束熔断,状态由探测(HALF_OPEN)变更为关闭(CLOSED)

  • 如果接下来的一个请求大于最大RT,说明慢调用未恢复,继续熔断,熔断时长保持一致

2.异常比例

 

通过计算异常比例与设置阈值对比的一种策略。

属性说明
异常比例阈值异常比例=发生异常的请求数÷请求总数取值范围:[0~1]
熔断时长在这段时间内发生熔断、拒绝所有请求
最小请求数即允许通过的最小请求数,在该数量内不发生熔断

执行逻辑

熔断(OPEN):当请求数大于最小请求并且异常比例大于设置的阈值时触发熔断,熔断时长由用户设置。

探测(HALFOPEN):当超过熔断时长时,由熔断(OPEN)转为探测(HALFOPEN)

  • 如果接下来的一个请求未发生错误,说明应用恢复,结束熔断,状态由探测(HALF_OPEN)变更为关闭(CLOSED)

  • 如果接下来的一个请求继续发生错误,说明应用未恢复,继续熔断,熔断时长保持一致

3.异常数

 

通过计算发生异常的请求数与设置阈值对比的一种策略。

属性说明
异常数请求发生异常的数量
熔断时长在这段时间内发生熔断、拒绝所有请求
最小请求数即允许通过的最小请求数,在该数量内不发生熔断

执行逻辑

熔断(OPEN):当请求数大于最小请求并且异常数量大于设置的阈值时触发熔断,熔断时长由用户设置。探测(HALFOPEN):当超过熔断时长时,由熔断(OPEN)转为探测(HALFOPEN)

  • 如果接下来的一个请求未发生错误,说明应用恢复,结束熔断,状态由探测(HALF_OPEN)变更为关闭(CLOSED)

  • 如果接下来的一个请求继续发生错误,说明应用未恢复,继续熔断,熔断时长保持一致

三、规则参数说明

熔断降级DegradeRule中的属性进行说明

属性说明
resource资源名称
grade降级策略 0:慢调用比例 1:异常比例 2:异常数量
count用户设置的阈值,根据不同的策略分别表示最大RT、异常比例阈值、异常数阈值
timeWindow熔断时长
minRequestAmount最小请求数,默认为5
slowRatioThreshold慢调用比率阈值,默认为1.0
statIntervalMs熔断时长,默认为1秒

四、规则格式示例

1.慢调用策略

 

[
    {
        "count": 3000,
        "grade": 0,
        "limitApp": "default",
        "minRequestAmount": 100,
        "resource": "degrade01",
        "slowRatioThreshold": 0.5,
        "statIntervalMs": 1000,
        "timeWindow": 5
    }
]

2.异常比例

 

{
    "count": 0.3,
    "grade": 1,
    "limitApp": "default",
    "minRequestAmount": 200,
    "resource": "degrade02",
    "slowRatioThreshold": 1,
    "statIntervalMs": 1000,
    "timeWindow": 5
}

3.异常数

 

{
    "count": 1000,
    "grade": 2,
    "limitApp": "default",
    "minRequestAmount": 300,
    "resource": "degrade03",
    "slowRatioThreshold": 1,
    "statIntervalMs": 1000,
    "timeWindow": 5
}

作者丨梁勇
来源丨瓜农老梁(ID:gh_01130ae30a83)
欢迎关注公众号“瓜农老梁”


「瓜农老梁  学习同行」    

       


版权声明:本文为gaoliang1719原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。