熔断降级是Sentinel生产环境使用范围最广的一种降级手段。前文讲的限流降级其实并不常用。QPS增加分为正常增加和异常增加,在流量为王的互联网时代,QPS正常增加一般都通过横向扩展机器,而不是硬性拒绝访问来处理,避免影响用户体验。而QPS异常增加,比如说受到攻击等,则往往在四七层进行拦截(lvs或者nginx)。
熔断规则可配置的属性
public class DegradeRule extends AbstractRule {
// 可配置字段
private double count;
private int timeWindow;
private int grade = RuleConstant.DEGRADE_GRADE_RT;
private int rtSlowRequestAmount = RuleConstant.DEGRADE_DEFAULT_SLOW_REQUEST_AMOUNT;
private int minRequestAmount = RuleConstant.DEGRADE_DEFAULT_MIN_REQUEST_AMOUNT;
// 非配置字段
private AtomicLong passCount = new AtomicLong(0);
private final AtomicBoolean cut = new AtomicBoolean(false);
}
- count:限流阈值。
- timeWindow:重置熔断的窗口时间,默认值 0。
- grade:降级策略,支持 DEGRADE_GRADE_RT(按平均响应耗时)、DEGRADE_GRADE_EXCEPTION_RATIO(按失败比率)和 DEGRADE_GRADE_EXCEPTION_COUNT(失败次数)三种熔断降级策略。
- rtSlowRequestAmount:当 grade 配置为 DEGRADE_GRADE_RT 时,该值表示可触发熔断的超过阈值的慢请求数量。如果该值配置为 5,阈值为 100 毫秒,当连续 5 个请求计算平均耗时都超过 100 毫秒时,后面的请求才会被熔断,下个时间窗口修复。
- minRequestAmount:当 grade 配置为 DEGRADE_GRADE_EXCEPTION_RATIO 时,该值表示可触发熔断的最小请求数,假设阈值配置为 10,第一个请求就失败的情况下,失败率为 100%,minRequestAmount 就是避免出现这种情况的。
- passCount:只在 grade 为 DEGRADE_GR