连载中 9/20

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

2026-07-10 · 4176 阅读 · 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)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10101 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9873 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9294 阅读 · 21 评论 · 287 赞