连载中 9/20

限流算法对比与选型:一张表定案

2026-07-10 · 4173 阅读 · 0 评论 · 0 赞

选型的两个轴线

限流篇过半,算法与部署形态都齐了。选型沿着两个轴线走:算法轴线——突刺容忍度与突发宽容度的取舍;部署轴线——单机(快、粗、各管各)与分布式(准、贵、全局一致)的取舍。先上总表,再按场景对号入座。

方案精度突发成本典型实现
固定窗口边界突刺最坏 2 倍极低Redis INCR、网关初筛
环形格子滑动窗口误差一格占比Sentinel 统计结构
ZSET 滑动窗口零误差高(随流量涨)Redis ZSET + Lua
漏桶出口绝对匀速排队消化Nginx limit_req
令牌桶速率精确允许攒额度Guava、SCG、Redis Lua

场景对号入座

入口防刷(IP 维度)→ 固定窗口或网关漏桶:精度要求低,成本要极低,量在百万级。接口总量保护→ 分布式令牌桶:速率精确、允许突发,是通用默认。低频高价值接口(短信、支付)→ ZSET 滑动窗口:量小才养得起零误差。刚性下游(短信通道、第三方支付)→ 漏桶:下游消化力固定,匀速最体贴。单实例自保→ Guava 令牌桶:防本实例对慢下游打满并发。秒杀热点商品→ 令牌桶加热点参数维度:总量之外给爆款单独立账。

503 咖啡馆的完整方案

真实系统从来是混合部署,没有一种算法打天下。老王的活动日方案全景:

位置算法阈值工具
Nginx 入口漏桶(IP 维度)单 IP 10 r/s,burst 20limit_req
SCG 网关Redis 令牌桶(路由维度)下单 2200 QPSRequestRateLimiter
订单应用Redis 令牌桶(用户维度)单用户 1 QPS注解切面 + Lua
订单应用热点参数(商品维度)单商品 200 QPSSentinel
短信出口漏桶(对接通道)通道 100 条/秒队列 + 定时消费

五道闸四种算法,各守一层各管一维——按位置选算法,按维度分账本,按容量定阈值

四个常见误区

误区一:一种算法打天下——入口用零误差的 ZSET 养百万成员,业务接口全用固定窗口挨突刺,都是没对号入座。误区二:阈值拍脑袋——「大概 1000 吧」的阈值既挡不住雪崩也误杀正常流量,阈值必须压测拐点说了算(第 2 篇)。误区三:只限流不监控——触发率不上报,限流器成了黑盒,容量恶化与流量异常全靠用户投诉发现。误区四:限流后裸拒绝——返回一个 500 断崖,用户只会疯狂重试,把拒绝变成更大的流量;拒绝必须配降级与友好提示。四条对照着自查,比多加十道闸都管用。

限流篇到此收官。它管住的是进来的流量——但雪崩链里还有另一半:系统作为调用方出去的依赖调用。下游病了还持续叩门,线程一样会被拖死。管出这一半的机制叫熔断器,三态模型的断路哲学,下一篇开讲。

503

10 年全栈工程师 · 503咖啡馆主理人

#限流选型#算法对比#混合部署#常见误区#容量阈值

评论 (0)

相关推荐

连载中 12/20

排查四件套:jstack、jmap、jstat、jcmd 的实战分工

jstack 看线程在干什么,jmap 看堆里装了什么,jstat 看运行时在变什么,jcmd 是统一入口。四把刀各管一段,配合着用没有查不动的现场。

#jstack#jmap#jstat#jcmd#排查工具
2026-09-16 · 5 阅读 · 0 评论 · 0 赞
连载中 11/20

GC 日志:把回收过程翻译成人话

一行 GC 日志里塞着七种信息:谁触发的、收了哪、停了多久、活了哪些。加上 -Xlog 配置,再加上日志分析工具,GC 不再是只能盯监控曲线的黑盒。

#GC日志#Xlog#日志分析#GC监控#Full GC排查
2026-09-16 · 13 阅读 · 0 评论 · 0 赞
连载中 10/20

ZGC:亚毫秒停顿是怎么炼成的

百 G 大堆停顿不到一毫秒,靠的是把搬家全部挪到并发阶段——着色指针让引用自带状态,读屏障让搬运中的对象依然可访问。代价是吞吐与内存,收益是停顿与堆大小解耦。

#ZGC#着色指针#读屏障#亚毫秒停顿#分代ZGC
2026-09-15 · 8 阅读 · 0 评论 · 0 赞