sentinel的降级原理以及疑问--小记

本文探讨了Sentinel作为限流熔断工具的降级原理,特别是RT(响应时间)模式下的降级规则。作者发现实际操作中,RT超时并不立即触发降级,而是影响下一次请求。Sentinel的DegradeRule在passCheck方法中判断平均RT,而RT统计在StatisticSlot的exit方法中完成,意味着超时请求的降级会在后续请求中生效,这与预期的当次请求降级不同。尽管如此,作者决定暂时按此机制使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sentinel是阿里的限流熔断工具,我今天正要在scg网关处使用sentinel来对下游api服务的调用加上限流熔断降级功能,看文档的时候关于限时降级我一直想的是当次请求不满足时长要求就要降级的,但是实际操作起来好像并不是这么回事。

sentinel降级的原理比较简要的概括就是:统计时间窗口内的指标,并且定时reset这些窗口属性值,每次请求过来再根据当前窗口的值判断是否满足要求决定是否降级

看下DegradeRule的passCheck方法中关于RT模式下的处理逻辑,这个很正常,差平均rt耗时判断是否满足要求

       if (grade == RuleConstant.DEGRADE_GRADE_RT) {
            double rt = clusterNode.avgRt();
            if (rt < this.count) {
                passCount.set(0);
                return true;
            }

            // Sentinel will degrade the service only if count exceeds.
            if (passCount.incrementAndGet() < rtSlowRequestAmount) {
                return true;
            }
        }

但是上面这个rt耗时是否把本次的rt算进去了?

我们通过找窗口统计指标addRtAndSuccess方法可以找到调用入口,在StatisticSlot里面的exit生命周期方法中:
在这里插入图片描述

同一个类中还有一个entry方法,和上面的exit正好是请求进来和拿到结果的周期方法:
在这里插入图片描述

通过debug断点我们能看到他是先走平均rt耗时判断后添加本次rt耗时的,所以,最后一根稻草的超时请求当次并不会降级,而是在下一次请求过来发生降级,至此简略分析完毕。。。

跟我需要的不太完全一致呀。。。当次rt是要等返回才能统计到没错,但是当次请求你也得给执行降级呀。。。 行吧。。。 先这么用吧。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值