Sentinel源码分析----降级熔断规则与DegradeSlot

上篇文章讲了流控规则,而除了流控规则之后还有降级、热点、系统、授权等规则,这篇文件主要讲降级规则。

降级规则主要处理节点是DegradeSlot,其中具体逻辑由DegradeRuleManager.checkDegrade实现

    public static void checkDegrade(ResourceWrapper resource, Context context, DefaultNode node, int count)
        throws BlockException {
   
        if (degradeRules == null) {
   
            return;
        }

        List<DegradeRule> rules = degradeRules.get(resource.getName());
        if (rules == null) {
   
            return;
        }

        for (DegradeRule rule : rules) {
   
            if (!rule.passCheck(context, node, count)) {
   
                throw new DegradeException(rule.getLimitApp(), rule);
            }
        }
    }

获取所有的降级规则,进行一个个的校验,校验逻辑是由DegradeRule实现,这里和流控规则FlowRule类似,先看下内部属性

public class DegradeRule extends AbstractRule {
   
    //
    private static final int RT_MAX_EXCEED_N = 5;

    private double count;

    private int timeWindow;

    private int grade = RuleConstant.DEGRADE_GRADE_RT;

    private volatile boolean cut = false;
    private AtomicLong passCount = new AtomicLong(0);
  • RT_MAX_EXCEED_N:在降级策略RT的情况下,如果连续RT_MAX_EXCEED_N个请求都大于配置的值,那么会在窗口时间内会进行降级状态,所有流量都会返回false(抛出 DegradeException);在降级策略异常比例的情况下,总qps且异常数大于该值才会进行异常比例的判断
  • count:降级策略RT则表示响应时间;降级策略异常比例则表示异常比例;降级策略异常数则表示异常数量
  • timeWindow:降级的时间窗口,在该窗口时间内请求都不能通过
  • grade:降级熔断策略
  • cut:是否被降级熔断,如果true,则请求过来直接拒绝
  • passCount:降级策略RT的时候用来统计超过配置值的数量

接下来看下DegradeRule的处理

    @Override
    public boolean passCheck(Context context, DefaultNode node, int acquireCount, Object... args) {
   
        //是否降级
        if (cut) {
   
            return false;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值