首页/新闻资讯/正文详情

一桶令牌的时间账本:四类限流算法的边界推演与Guava RateLimiter源码精读

发布时间:2026/11/7 5:33:44 来源:云帆数科 栏目:资讯中心
一桶令牌的时间账本:四类限流算法的边界推演与Guava RateLimiter源码精读
目录一、限流到底在管什么(一)整点那一秒发生了什么(二)速率、并发与排队:三种约束各管一段1、速率限制:单位时间放进来多少2、并发限制:此刻同时在办多少3、排队限制:最多允许等多少(三)否决式与整形式:被限住的请求去哪儿(四)读懂限流参数的三把尺子(五)实验环境与运行方式二、固定窗口:最便宜的计数器与它的边界漏洞(一)算法与实现(二)边界双倍突发的推演(三)它仍然值得用的场合三、滑动窗口:把格子切细,还是把账记全(一)滑动日志:精确但状态随流量增长(二)分桶滑动计数:用子窗口换内存(三)两桶加权近似:只存两个数(四)实测:子桶越多,双倍突发并没有消失(五)旁支:TCP 的滑动窗口管的是另一件事四、漏桶:把不规则的进水整成匀速出水(一)漏桶的两种形态1、队列式漏桶2、计量式漏桶(二)队列式漏桶的代价:排队不是免费的(三)Nginx limit_req:一只用 excess 记账的漏桶1、配置语义2、千分位记账的 excess3、延迟交给定时器,而不是让 worker 睡觉4、burst 是排队容量,不是免费额度五、令牌桶:允许攒令牌的限流(一)定义与两个参数(二)懒惰补充:不需要后台线程(三)令牌桶与漏桶:一体两面(四)四类算法横向对照六、主流限流组件的取舍(一)Guava RateLimiter:单机平滑令牌桶(二)Resilience4j RateLimiter:按周期发放的许可(三)Sentinel:滑动窗口统计与三种流控效果(四)集群配额:把令牌发放收归一处(五)其他常见选择(六)选型对照七、Guava RateLimiter 的用法与语义(一)两种构造与四个入口(二)预消费:这一笔的账,记在下一位头上(三)tryAcquire 的判定口径(四)setRate:存量按比例换算八、源码精读:SmoothRateLimiter 的时间账本(一)类结构与四个字段(二)resync:有人来,才补账(三)reserveEarliestAvailable:先放行,后结算(四)SmoothBursty:存量零成本(五)SmoothWarmingUp:把存量翻译成等待时间1、预热函数与三个关键量2、积分的计算3、冷却速度4、实测爬坡曲线(六)锁与睡眠:为什么 sleep 在锁外九、复刻与对账:一只迷你平滑限流器(一)为什么要自己复刻(二)逐笔对账的方法十、生产落地:从单机限速到分层防护(一)六个常见误用1、每次请求 new 一个 RateLimiter2、在 IO 线程或入口线程里 acquire3、acquire 一个很大的数4、单机阈值乘以实例数5、只限次数,不看成本6、不监控等待与拒绝(二)集群里的误杀与放大(三)分层防护:四道关各守一段(四)被限住之后:响应契约与客户端行为(五)参数从哪里来十一、总结(一)四个追问的答案(二)适用范围与不适用场景参考文章干货分享,感谢您的阅读!“每秒最多 100 次”真正落到系统里至少牵出四个追问:这 100 次按哪一秒算?第 101 次是立刻拒绝还是排队等?空闲了一会儿之后能不能一口气多放几个?部署了 8 个实例之后,“100”说的是每台还是总共?很多线上事故并不是因为没有限流,而是因为限流器在这几个问题上的回答,和写配置的人心里想的不一样。这次我们要解决的问题是:把限流这件事从“背四个算法名字”推进到“能算清每一笔账”——给定一个限流配置,能准确说出它在边界、突发、空闲和多实例下到底会放行多少、拒绝多少、让谁等多久。我们先厘清限流到底在约束什么,再把固定窗口、滑动窗口、漏桶、令牌桶四类算法放进同一个可复现的虚拟时间实验台,用实测数字去看它们在窗口边界、突发流量、对抗流量下的真实表现;顺路拆开 Nginxlimit_req的千分位记账和 TCP 滑动窗口这两个常被混为一谈的“近亲”。随后横向对照 Guava、Resilience4j、Sentinel、集群配额等主流组件;最后把重心放在 GuavaRateLimiter上——它的预消费语义、懒惰补账、预热积分都藏在不到四百行的SmoothRateLimiter里,我们会逐行读懂,再自己复刻一只迷你版本,与 Guava 在同一条虚拟时间线上做七万次逐笔对账。本文适合在 Java 服务里配置或自研限流的后端工程师,以及需要为网关、Nginx 定阈值的同学。读完希望你应当能够:判断某个场景该用否决式还是整形式、该选哪类算法;看懂burst、nodelay

相关推荐

电赛医疗送药小车硬件协同设计实战解析
电赛医疗送药小车硬件协同设计实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 5:34:54

STM32国产替代如何实现24小时SMT贴片交付
STM32国产替代如何实现24小时SMT贴片交付

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 5:33:44

工程师成长四阶段:从单点交付到价值定义的硬性能力路径
工程师成长四阶段:从单点交付到价值定义的硬性能力路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 4:43:48

郓城县新华技校电工证多少钱 实操考试心里没底怕挂科
郓城县新华技校电工证多少钱 实操考试心里没底怕挂科

郓城县新华技校电工证多少钱 实操考试心里没底怕挂科 实操考试心里没底怕挂科,这是很多想报考郓城县新华技校电工证学员最真实的心理状态。尤其是初次接触电工操作的人,面对高压电、设备接线、安全操作规范等实操内容,往往会感到焦虑和迷茫。别担心,本文… · 2026/11/7 11:23:19

特种作业证过期了不知道怎么复审?2026河南最新政策参考电工证费全解析
特种作业证过期了不知道怎么复审?2026河南最新政策参考电工证费全解析

特种作业证过期了不知道怎么复审?2026河南最新政策参考电工证费全解析 证书过期了不知道怎么复审延期?2026河南最新政策下,特种作业证的复审流程和费用成为很多持证人的关注焦点。特别是对于新乡水利工程从业者来说,电工证的复审不仅关系到能否继… · 2026/11/7 11:23:19

参考电工证费上岗必须要这个证吗
参考电工证费上岗必须要这个证吗

安阳应届生怕考不过电工证费白交?上岗必备的证书你真了解吗? 怕考不过白交培训费?这是安阳某高校应届工程专业毕业生小李最担心的事。他听说电工证是从事电气工作的上岗必备,但对考试内容、培训流程、费用构成一无所知,生怕自己花了钱最后考不过,连证书… · 2026/11/7 11:23:19

舞阳电工证培训内部消息:电工证不考就失业?速看真实薪资与避坑指南
舞阳电工证培训内部消息:电工证不考就失业?速看真实薪资与避坑指南

舞阳电工证培训内部消息:电工证不考就失业?速看真实薪资与避坑指南 你是不是正为找不到工作发愁?是不是因为没有特种作业证被拒之门外?别急, 舞阳电工证培训… · 2026/11/7 11:23:19

舞阳电工证培训官方回应:工地太忙根本没时间复习考试怎么办?
舞阳电工证培训官方回应:工地太忙根本没时间复习考试怎么办?

舞阳电工证培训官方回应:工地太忙根本没时间复习考试怎么办? 工地太忙根本没时间复习考试,这是很多一线电工的真实写照。尤其是像舞阳这样的工业重镇,电工证培训需求量大,但考试难度也不容小觑。官方回应称,电工证考试是确保作业安全的重要一环,但考生… · 2026/11/7 11:23:19

长寿在哪考电工证通过率揭秘你真的了解吗
长寿在哪考电工证通过率揭秘你真的了解吗

长寿在哪考电工证通过率揭秘你真的了解吗 实操考试心里没底怕挂科,这几乎是每个想考电工证的人都会有的顾虑。特别是现在电工证越来越严格,从报名到考试,每一步都像是在闯关。很多人不知道, 长寿在哪考电工证… · 2026/11/7 11:22:19

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 10:29:23

澳洲水电工证考试:证书过期了不知道怎么复审延期?电子证书怎么弄?
澳洲水电工证考试:证书过期了不知道怎么复审延期?电子证书怎么弄?

澳洲水电工证考试:证书过期了不知道怎么复审延期?电子证书怎么弄? 证书过期了不知道怎么复审延期?别慌,很多人在拿到【澳洲水电工证考试】的电子证书后,一不小心就忽略了复审时间,结果证书失效,工作受阻,甚至被单位追责。今天就从【澳洲水电工证考试… · 2026/11/7 0:00:41

电工作业提示版通过率揭秘:怎么考才能一次过?
电工作业提示版通过率揭秘:怎么考才能一次过?

电工作业提示版通过率揭秘:怎么考才能一次过? 怕考不过白交培训费?别急,今天我就从驻马店应届工程类毕业生的视角,带你全面了解电工作业提示版的考试流程、备考要点和真实通过率,帮你少走弯路、提高一次通过率。… · 2026/11/7 0:00:41

电工证年审报名千万别踩坑 外省证转过来要搞清这几点
电工证年审报名千万别踩坑 外省证转过来要搞清这几点

电工证年审报名千万别踩坑 外省证转过来要搞清这几点 之前考的证在外省能不能转过来?这个问题是很多电工从业者最关心的,特别是像你这样在商丘从事公路工程的人员,经常需要跨省流动,证书的 有效性 和 可迁移性… · 2026/11/7 0:00:41

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 10:29:23

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码