Sentinel中冷启动限流原理WarmUpController是什么


本篇内容介绍了“Sentinel中冷启动限流原理WarmUpController是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!所谓冷启动,或预热是指,系统长时间处理低水平请求状态,当大量请求突然到来时,并非所有请求都放行,而是慢慢的增加请求,目的时防止大量请求冲垮应用,达到保护应用的目的。Sentinel中冷启动是采用令牌桶算法实现。令牌桶算法图例如下:Sentinel中的令牌桶算法,是参照Google Guava中的RateLimiter,在学习Sentinel中预热算法之前,先了解下整个预热模型,如下图:Guava中预热是通过控制令牌的生成时间,而Sentinel中实现不同:不控制每个请求通过的时间间隔,而是控制每秒通过的请求数。在Guava中,冷却因子coldFactor固定为3,上图中②是①的两倍Sentinel增加冷却因子coldFactor的作用,在Sentinel模型中,②是①的(coldFactor-1)倍,coldFactor默认为3,可以通过csp.sentinel.flow.cold.factor参数修改Sentinel中冷启动对应的FlowRule配置为RuleConstant.CONTROL_BEHAVIOR_WARM_UP,对应的Controller为WarmUpController,首先了解其中的属性和构造方法:count:FlowRule中设定的阈值warmUpPeriodSec:系统预热时间,代表上图中的②coldFactor:冷却因子,默认为3,表示倍数,即系统最”冷”时(令牌桶饱和时),令牌生成时间间隔是正常情况下的多少倍warningToken:预警值,表示进入预热或预热完毕maxToken:最大可用token值,计算公式:warningToken+(2*时间*阈值)/(1+因子),默认情况下为warningToken的2倍slope:斜度,(coldFactor-1)/count/(maxToken-warningToken),用于计算token生成的时间间隔,进而计算当前token生成速度,最终比较token生成速度与消费速度,决定是否限流storedTokens:姑且可以理解为令牌桶中令牌的数量举例说明:FlowRule设定阈值count=5,即1s内QPS阈值为5,设置的预热时间默认为10s,即warmUpPeriodSec=10,冷却因子coldFactor默认为3,即count = 5,coldFactor=3,warmUpPeriodSec=10,则接下来学习,WarmUpController是如何进行限流的,进入canPass()方法:canPass()方法分为3个阶段:syncToken():负责令牌的生产和滑落判断令牌桶中剩余令牌数如果剩余令牌数大于警戒值,说明处于预热阶段,需要比较令牌的生产速率与令牌的消耗速率。若消耗速率大,则限流;否则请求正常通行仍然以count=5进行举例,警戒线warningToken=25,maxToken=50假设令牌桶中剩余令牌数storedTokens=30,即在预热范围内,此时restToken=30,slope=0.016,则aboveToken=30-25=5由斜率slope推导当前token生成时间间隔:(restToken-warningToken)*slope+stableInterval=5*0.016+1/5=0.28,即280ms生成一个token此时1s内生成token的数量=1/0.28≈4,即1s内生成4个token假设当前窗口通过的请求数量passQps=4,acquiredCount=1,此时passQps+acquiredCount=5>4,即令牌消耗速度大于生产速度,则限流如果剩余令牌数小于警戒值,说明系统已经处于高水位,请求稳定,则直接判断QPS与阈值,超过阈值则限流接下来分析Sentinel是如何生产及滑落token的,进入到syncToken()方法:获取当前时间秒数currentTime,与lastFilledTime进行比较,之所以取秒数,是因为时间窗口的设定为1s,若两个时间相等,说明还处于同一秒内,不进行token填充和滑落,避免重复问题令牌桶中添加token当流量极大,令牌桶中剩余token远低于预警值时,添加token处于预热节点,单令牌的消耗速度小于系统最冷时令牌的生成速度,则添加令牌通过CAS操作,修改storedToken,并进行令牌扣减“Sentinel中冷启动限流原理WarmUpController免费云主机域名是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: 基于C语言如何实现计算生辰八字五行

本篇内容主要讲解“基于C语言如何实现计算生辰八字五行”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于C语言如何实现计算生辰八字五行”吧!本文主要介绍生辰八字的算法,没有计算农历日期,农历计算较为复杂,加农历算法,…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/06 12:13
下一篇 07/06 12:13

相关推荐