Sentinel使用令牌桶实现预热和原理

限流降级与流量效果控制器(下) WarmUpController Warm Up,冷启动。在应用升级重启时,应用自身需要一个预热的过程,预热之后才能到达一个稳定的性能状态,比如说,接口预热阶段完成 JIT 即时编译、完成一些单例对象的创建、线程池的创建、各种连接池的初始化、或者执行首次需要加锁执行的代码块。 冷启动并非只在应用重启时需要,在一段时间没有访问的情况下,连接池存在大量过期连接需要待下次使用才移除掉并创建新的连接、一些... 阅读详情

Sentinel的QPS流控效果有快速失败、预热模式、排队等待、预热+排队等待模式,本文主要分析预热模式中是如何使用令牌桶算法限流的。
一、流控效果源码结构
1.流控效果封装入口

在这里插入图片描述
2.分发不同的控制类
在这里插入图片描述
3.流控控制类图
在这里插入图片描述
二、快速失败
快速失败即发送流控时抛出FlowException。
1.快速失败流程
在这里插入图片描述
备注
@1 获取当前已经使用的线程数或者QPS
@2 与阈值进行判断,是否允许本次通行
@3 QPS流控并且prioritized设置为true表示预占用令牌
@4 大于阈值触发流控
@5 小于阈值允许通行
2.预占用令牌
预占用令牌:当基于QPS流控时并且prioritized设置为true,表示当前时间窗口令牌不够时,预占用下个时间窗口的令牌并返回需要等待的时间。
在这里插入图片描述
备注:在不考虑优先级(预占用)令牌的情况,快速失败比较简单。
三、令牌桶原理
预热模式缓慢增加流量的一种方式,避免瞬间流量将系统压垮。
1.令牌桶图示
在这里插入图片描述
工作过程

  1. 请求流量从令牌桶中获取令牌,持有令牌放行,否则被拒
  2. 假如设置阈值每秒允许100个请求通过,则请求发送速率r=100/s
  3. 需要令牌生产速率为1/r,即1/100每10毫秒产生一个令牌
  4. 令牌桶容量为b已满多余的令牌将被丢弃
  5. 令牌桶为空请求被拒
  6. 允许突发流量最大突发流量为令牌桶容量b
  7. 请求通过相应的令牌从令牌桶中移除
    2.令牌桶限流原理
    假如系统平时流量很低,突然陡增的流量需要缓慢增加。具体到令牌桶,可以通过控制令牌的生产速率来对流量进行控制。令牌生产速率如何控制?

我们在使用sentinel设置QPS的预热流控时,需要设置阈值count和预热时长warmUpPeriodInSec,下面梳理下与下图坐标图的关系。
在这里插入图片描述
坐标图说明
参数 说明
x轴 表示令牌桶中的令牌数量
y轴 生产一个令牌需要的时间(秒)
stableInterval 稳定生产一个令牌需要的时间
coldInterval 生产一个令牌需要的最大时长,与冷启动因子coldFactor有关,可以通过-Dcsp.sentinel.flow.cold.factor设置,默认为3。
warmUpPeriodInSec 预热时长,默认为10秒。对应到坐标图中为(2)梯形面积
thresholdPermits(warningToken) 令牌桶中的一个阈值,超过该值时开启预热
maxPermits(maxToken) 令牌桶中最大令牌数
换算关系

count,已知由用户设置,例如每秒允许通过100个请求
warmUpPeriodInSec,已知由用户设置,默认为10秒,时间区域上红色(2)梯形区域
coldFactor,已知默认为3
公式一:stableInterval = 1/count
公式二:coldInterval = stableInterval * coldFactor
备注:由于coldFactor默认为3,y轴stableIntervalcoldInterval的距离是0stableInterval的距离两倍,时间区域上红色(2)梯形区域是红色1的长方形区域的两倍。
公式三:坐标时间(1)长方形区域面积 = 长(thresholdPermits(warningToken)) * 宽(stableInterval)
公式四:坐标时间(1)长方形区域面积 = 0.5 * warmUpPeriodInSec
公式五:thresholdPermits(warningToken)=0.5 * warmUpPeriodInSec/stableInterval
备注:梯形的面积 = (上低+下低)* 高 ➗ 2 推导出maxPermits(maxToken)的值。
公式六:maxPermits(maxToken) = thresholdPermits(warningToken) + 2 * warmUpPeriodInSec ➗ (stableInterval + coldInterval)
备注:由斜率公式k=(y1-y2)➗(x1-x2),得出斜率如下。
slope = (coldInterval-stableInterval)➗(maxPermits(maxToken)-thresholdPermits(warningToken))
原理概述

当令牌桶中的令牌数小于thresholdPermits(warningToken)时,令牌按照固定速率生产,请求流量稳定。当令牌数大于thresholdPermits(warningToken)时,开启预热。此段时期,生产的令牌的速率小于令牌滑落的速度,一段时间后,令牌小于等于thresholdPermits(warningToken),请求回归到稳定状态,预热结束。
四、预热源码分析
1.WarmUpController构造函数

在这里插入图片描述
备注:此部分主要计算了warningToken阈值、最大令牌数maxToken、斜率slope,详细推导过程见原理部分。
2.请求判断逻辑
在这里插入图片描述
3.令牌的生产和滑落
在这里插入图片描述
在这里插入图片描述
备注:从代码可以看出sentinel中桶中的令牌生产和移除是在下次请求到来时一起处理的,另外Sentinel提供的令牌生产公式与当前时间currentTime有关系,如果一个冷系统好久没有流量,瞬间来了很大流量,此时的桶中令牌数会直接到达最大值maxToken,这也是官方提供的曲线图中开始流量比较陡的原因。
在这里插入图片描述

Sentinel基于并发线程数和QPS的流量控制 目录 1、流控原理 2、并发线程数流控方式 3、 QPS方式 1、流控原理 是监控应用流量的QPS或并发线程数等指标,到达阈值时对流量进行控制。避免被瞬间流量高峰冲垮。 其中并发线程数、QPS 值,都是由 StatisticSlot 实时统计获取的。可通过api获得: curl http://localhost:8719/cnode?id=resourceName 2、并发线程数流控方式 并发数控制用于保护业务线程池不被慢调用耗... 阅读详情

相关推荐

源码解读五:流量整型算法实现分析

源码解读五:流量整型算法实现分析 文章目录源码解读五:流量整型算法实现分析算法简述代码分析DefaultControllerRateLimiterControllerWarmUpController算法分析代码分析WarmUpRateLimiterController 算法简述 上文我们分析了 Sentinel 中的滑动窗口数据统计算法。在了解了滑动窗口机制后,这篇文章我们来重点分析下 FlowSlot 的代码实现。FlowSlot 是 Sentinel 内置的 8 个ProcessorSlot 中最重要最

kuangzhanshatian的专栏 253

Sentinel使用令牌桶实现预热【原理源码】

前言Sentinel的QPS流控效果有快速失败、预热模式、排队等待、预热+排队等待模式,本文主要分析预热模式中是如何使用令牌桶算法限流的。一、流控效果源码结构在FlowRule更新缓...

gaoliang1719的专栏 1875

KUKA机器人与S7-1200 PLC实现Profinet通讯配置步骤详解

在工业自动化产线中,PLC与工业机器人之间的高效数据交换是控制逻辑落地的关键。传统硬接线方案在信号点多时布线复杂、故障排查困难,而现场总线技术通过一根网线即可实现主从设备间的周期通讯。Profinet作为主流工业以太网协议,由S7-1200作为IO Controller主站,KUKA机器人作为IO Device从站,在WorkVisual与TIA Portal中完成设备组态、I/O映射及信号分配,即可替代成捆电缆,稳定传输启停、状态及报警信号。这一方案适用于汽车、3C、物流等行业的自动化产线,尤其适合需要扩

weixin_42519985的博客 251

Sentienl 流控效果之匀速排队与预热实现原理与实战建议

本文详细介绍了匀速排队 RateLimiterController 与 预热 WarmUpController 实现原理,并且在文章末尾对 WarmUpController 的实战使用提出了建议。

中间件兴趣圈 3013

Zemax实战:5步搞定牛顿望远镜光学设计(附球差优化技巧)

本文详细介绍了在Zemax OpticStudio中构建高精度牛顿望远镜光学系统的5步实战流程,包括初始参数设置、球差优化、折叠镜与遮光面配置等关键步骤。特别针对球差问题,提供了将主镜圆锥系数设为-1的优化方案,有效消除轴上弥散斑。通过3D视图和MTF分析验证,该系统可实现接近衍射极限的成像质量,适合天文观测等应用场景。

x8y9z0的博客 930

Claude Code、Codex、Gemini CLI、OpenCode 和 OpenClaw 配置管理太麻烦?试试这个统一管理工具

还在为 Claude Code、Codex、Gemini CLI 等 AI CLI 配置烦恼?🤯 这款桌面工具支持五大助手统一管理,一键切换 50+ 服务商,MCP 和 Skills 集中管理 🛠️,跨平台支持,让你的 AI 编程更高效 ⚡

XiaoqiangClub的博客 918

spring cloud alibaba 学习(二十)Sentinel 预热限流

目录前言一、pandas是什么? 前言 一、pandas是什么? Warm Up 调用了WarmUpController#canPass(...) 这边主要使用的是令牌桶算法 //构建函数 private void construct(double count, int warmUpPeriodInSec, int coldFactor) { //冷因子不能小于1,默认为3 if (coldFactor <= 1) { th..

码易的博客 1215

Deep SHAP 深度学习模型的可解释性分析

Deep SHAP 算法是一种用于解释深度学习模型的技术, 该算法通过将每个特征的重要性与输出值相关联来进行解释。本博客对深度学习的模型可解释性进行了分析。

cnjs1994的博客 5121

WarmUpController原理

Sentinel 中冷启动过滤器WarmUpController原理

weixin_43063328的博客 585

高可用架构设计——多节点OpenClaw集群部署与负载均衡(2026企业级)

本文介绍了企业级OpenClaw高可用集群架构设计,重点阐述了多节点部署与负载均衡方案。架构采用分层设计,包括表现层、应用层、数据层和基础设施层,确保99.99%的可用性目标。详细配置了主节点、工作节点和存储节点规格,提供Kubernetes集群部署脚本示例,实现自动化的容器编排管理。通过硬件冗余、故障隔离和弹性扩展等可靠性原则,构建能够应对各种故障场景的稳定AI助手系统。

博客 422

2026年03月CCF-GESP编程能力等级认证Scratch图形化编程一级真题解析

本文收录于《,订阅后可阅读专栏内所有文章。

人生就是一个不断学习的过程 242

sentinel 时间窗口_Sentinel使用令牌桶实现预热【原理源码】

前言Sentinel的QPS流控效果有快速失败、预热模式、排队等待、预热+排队等待模式,本文主要分析预热模式中是如何使用令牌桶算法限流的。一、流控效果源码结构在FlowRule更新缓存时,根据配置的不同类型初始化不同的流控效果处理类。1.流控效果封装入口2.分发不同的控制类3.流控控制类图二、快速失败快速失败即发送流控时抛出FlowException。1.快速失败流程备注...

weixin_39843782的博客 157

信捷PLC XD5系列运动控制(10轴)编程应用篇

项目PLC采用XD5-60T10-E,36DI 24DO 晶体管输出,支持10路脉冲输出功能。TMR指令定时器时基可以自己设定,这点比其他品牌PLC方便。ZRN指令我们需要上升沿指令触发。 5、变址寻址 该说不说这个变址寻址是真的强,比西门子指针、三菱的变址寄存器Z 、V都要更加灵活。 7、特殊寄存器:时钟 8、如何建立PLC通讯...............

RXXW_Dor的博客 1万+

lua 令牌桶 源码_Sentinel使用令牌桶实现预热【原理源码】

前言Sentinel的QPS流控效果有快速失败、预热模式、排队等待、预热+排队等待模式,本文主要分析预热模式中是如何使用令牌桶算法限流的。一、流控效果源码结构在FlowRule更新缓存时,根据配置的不同类型初始化不同的流控效果处理类。1.流控效果封装入口 2.分发不同的控制类 3.流控控制类图 二、快速失败快速失败即发送流控时抛出FlowException。1.快速失败流程 备注@1 获取当前已经...

weixin_42467374的博客 130

软考高级系统架构设计师历年论文真题深度分析(2011-2025)

本文系统分析了2011-2025年系统架构设计师论文真题,归纳出十大主题类别,包括架构风格、企业集成、数据技术、非功能属性等。研究发现新兴技术占比最高(18.8%),企业集成、数据架构和非功能属性为三大核心考点。论文命题呈现明显技术演进特征,从经典架构理论逐步转向云原生、AI融合等前沿方向。备考建议重点关注高频考点和技术前沿,同时强化场景化解决方案能力。分析表明,架构师考试持续跟踪行业技术发展,注重理论与实践结合,为考生提供了明确的备考方向。

一几文的编程学习笔记。 2058

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【sentinel】令牌桶算法在Sentinel中的应用

令牌桶算法,又称token bucket。从图中我们可以看到,令牌桶算法比漏桶算法稍显复杂。首先,我们有一个固定容量的桶,桶里存放着令牌(token)。桶一开始是空的,token以一个固定的速率r往桶里填充,直到达到桶的容量,多余的令牌将会被丢弃。每当一个请求过来时,就会尝试从桶里移除一个令牌,如果没有令牌的话,请求无法通过。

morris 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Sentinel中冷启动限流原理WarmUpController

冷启动 所谓冷启动,或预热是指,系统长时间处理低水平请求状态,当大量请求突然到来时,并非所有请求都放行,而是慢慢的增加请求,目的时防止大量请求冲垮应用,达到保护应用的目的。Sentinel中冷启动是采用令牌桶算法实现。令牌桶算法图例如下: 预热模型 Sentinel中的令牌桶算法,是参照Google Guava中的RateLimiter,在学习Sentinel中预热算法之前,先了解下整个预热模型,如下图: Guava中预热是通过控制令牌的生成时间,而Sentinel中实现不同: 不控制每个请求通过的时间间

浮生的博客 2329

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Sentinel预热限流:WarmUpController原理详解

用令牌桶的“剩余令牌数”表征系统冷热状态,动态调整 QPS 上限,实现平滑预热。✅冷启动保护:避免系统刚启动被打垮;✅自适应调整:根据实际 QPS 动态加令牌;✅线性模型:简单高效,易于理解和配置;✅非阻塞:超限直接拒绝,不阻塞线程。

m0_37607945的博客 892

Sentinel 限流算法详解

滑动窗口算法(默认)令牌桶算法漏桶算法预热限流算法排队等待算法滑动窗口:Sentinel 默认算法,精确控制 QPS令牌桶:允许突发流量,适合流量波动大的场景漏桶:严格控制输出速率,适合需要平滑输出的场景预热限流:保护系统冷启动排队等待:保证请求不丢失。

先度过菜鸟阶段 1107

一文讲解在Sentinel中涉及到的限流算法

滑动窗口算法是将时间周期分为N个小周期(窗口),分别记录每个小周期内访问次数,然后根据时间将窗口往前滑动并删除过期的小时间窗口。最终只需要统计滑动窗口范围内的所有小时间窗口总的计数即可,如下图所示

weixin_54828627的博客 4495

物联网系统云平台高并发的解决(硕士)

实现GlobalFilter接口, 这个接口中只有一个方法 filter (ServerwebExchange exchange,GatewatFilterChain chain); exchange: 请求上下文 可以获取route的一系列相关信息并存入上下文中 chain:过滤器链,放行,把请求委托给下一个过滤器 过滤器执行顺序 用jmeter测试过滤器 ......

internetv的博客 1472

Sentinel源码—4.FlowSlot实现流控的原理

也就是无需等前面的请求完全被处理完,才确定后面的请求被处理的时间。如果在此时(currentTime)通过当前请求,则当前请求的通过时间就比它最早的预期通过时间(expectedTime)要早,即当前请求和最近通过的请求的时间间隔变小了,比最小间隔时间costTime还小,所以此时必然会超QPS阈值。如果在此时(currentTime)通过当前请求,则当前请求的通过时间就比它最早的预期通过时间(expectedTime)要晚,即当前请求和最近通过的请求的时间间隔变大了,所以此时不会超QPS阈值。

weixin_36565061的博客 73

关于sentinel限流熔断总结

1.sentinel是什么? sentinel是分布式的流量防卫兵 2.跟sentinel类似的产品是什么? hystrix 3.什么是限流算法 计数器,令牌桶,漏斗算法,滑动窗口 计数器算法:计数器算法指在一段时间内,进行计数,与伐值进行比较,如果超过了伐值则进行限流操作,到了时间临界点,将计数器清零重新计算. 漏桶算法:流量的流入是以不确定的速率率先进入到漏桶,然后漏桶以一定的速度流出,当水流速度过大时直接溢出,然后就拒绝了请求. 4.sentinel默认限流的算法是 滑动窗口 5.

rushduckxzr的博客 310

没想到,为了一个限流我写了1万字!

限流作为现在微服务中常见的稳定性措施,在面试中肯定也是经常会被问到的,我在面试的时候也经常喜欢问一下你对限流算法知道哪一些?有看过源码吗?实现原理是什么?第一部分先讲讲限流算法,最后再讲讲...

艾小仙的专栏 374

深入解析分布式限流

分布式限流理论解析

码星人 2408
上一篇: redis布隆过滤器RedisBloomFilter
下一篇: ConfigurationProperties,@ConditionalOnClass,@EnableConfigurationProperties,@PropertiesSource
yonhu123java
博客等级 码龄14年 6粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值