最近项目上要加上熔断,稍微看了点熔断知识。做一下总结:DegradeRule/SystemRule/ParamFlowRule
参数:SystemRule 系统规则
https://github.com/alibaba/Sentinel/wiki/如何使用
{
“resource”: “restrictAccessFreqRpc”,
“count”: 0.5,
“grade”: 1,
“limitApp”: “default”,
“timeWindow”: 2
}
指标 | 含义 | 备注 |
---|---|---|
grade | 熔断策略 | 0-慢调用比例 (SLOW_REQUEST_RATIO)1-异常比例 (ERROR_RATIO)2-异常数 (ERROR_COUNT) |
count | 阈值 | 慢调用比例模式下为慢调用临界 RT最大的响应时间(超出该值计为慢调用); 异常比例/异常数模式下为对应的阈值 异常比例 异常数目 |
timeWindow | 熔断时长,单位为 s | |
limitApp | 受限制的应用程序名称 | 将受来源限制的应用程序名称。*默认limitApp为{@code default},这意味着允许所有源应用。对于权限规则,多个源名称可以用逗号(’,’)分隔。 |
RuleConstant:
DEGRADE_GRADE_RT=0;
DEGRADE_GRADE_EXCEPTION_RATIO=1;
DEGRADE_GRADE_EXCEPTION_COUNT=2;
• 慢调用比例 (SLOW_REQUEST_RATIO):选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。
阈值count > 单位统计时长statIntervalMs+熔断触发的最小请求数minRequestAmount > 超过熔断时长timeWindow(s)进入HALF-OPEN
• 异常比例 (ERROR_RATIO):当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。
• 异常数 (ERROR_COUNT):当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。
#系统保护规则-systemrule
指标 | 含义 | 默认值 |
---|---|---|
highestSystemLoad | load1 触发值,用于触发自适应控制阶段 | -1 (不生效) |
avgRt | 所有入口流量的平均响应时间 | -1 (不生效) |
maxThread | 入口流量的最大并发数 -1 (不生效) | |
qps | 所有入口资源的 QPS -1 (不生效) | |
highestCpuUsage | 当前系统的 CPU 使用率(0.0-1.0) | -1 (不生效) |
参数:ParamFlowRule 热点规则
https://github.com/alibaba/Sentinel/wiki/热点参数限流
[
{
“resource”: “qrcode_gen”,
“grade”: 1,
“count”: 1000,
“controlBehavior”: 2,
“maxQueueingTimeMs”: 200,
“durationInSec”: 1,
“paramIdx”: 0
}
]
指标 | 含义 | 默认值 |
---|---|---|
resource | 资源名,必填 | |
count | 限流阈值,必填 | |
grade | 限流模式 | QPS 模式 |
durationInSec | 统计窗口时间长度(单位为秒),1.6.0 版本开始支持 | |
controlBehavior | 流控效果 | (支持快速失败和匀速排队模式),1.6.0 版本开始支持 |
maxQueueingTimeMs | 最大排队等待时长(仅在匀速排队模式生效),1.6.0 版本开始支持 | 0ms |
paramIdx | 热点参数的索引,必填,对应 SphU.entry(xxx, args) 中的参数索引位置 | |
paramFlowItemList | 参数例外项,可以针对指定的参数值单独设置限流阈值,不受前面 | |
clusterMode | 是否是集群参数流控规则 | false |
clusterConfig | 集群流控相关配置 |