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
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法