集群限流:总水位怎么算
2026/8/24大约 3 分钟
亿级规模系统系列 · 阶段 5 · 流量防护 · 第 30/49 篇 · 🚧 占位待学
上一篇:《限流四大算法:从计数器到令牌桶》
下一篇:《熔断与降级:断路器三态与降级预案》
学习大纲:《QPS 过万与亿级消息系统设计学习总纲》
状态:待学习。 本文为占位文档:知识点清单、实验与验收标准已就绪,正文待按「先学习、先实验、再撰写」补全。
对应总纲单元:阶段 5 · 单元 5.3
一、本文要解决的问题
单机限流 1000 × 10 台 = 10000?但后端数据库只能接 6000,而且流量在 10 台机器间不均匀——单机限流保护的是「自己」,集群限流保护的是「共享下游」。集中计数是直觉解,但它自己又成为新的单点。
二、知识点清单
- 为什么单机限流不够:流量不均(LB 偏斜)、滚动发布时实例数变化、保护的是共享资源(DB / 下游)
- 集中式计数:Redis + Lua 原子扣减(滑动窗口 / 令牌桶的分布式版),精度高但每次请求一跳 Redis
- Token Server(Sentinel 集群限流模式):专服务器发令牌,客户端本地缓存批量取
- 就近判断 + 全局兜底:本地限 80% 配额 + 远程争抢 20%,减少 Redis 压力
- 集中式限流的高可用:Redis 挂了限流怎么办(fail-open 放行 vs fail-close 拒绝)的取舍
三、动手实验(学习时必须真跑)
- Redis + Lua 实现集群滑动窗口限流器,起 10 个实例(或线程模拟)压测,验证总通过量收敛在阈值 ±5%
- 故意停掉 Redis,观察 fail-open / fail-close 两种配置下的系统行为差异
- 对比单机限流(每台 600)与集群限流(总 6000)在同一不均衡流量下的 DB 实际压力
四、验收标准(全部通过才进入下一篇)
五、写作提示(补正文时遵守)
- 开篇问题驱动;结构走「是什么 → 为什么 → 怎么做 → 背景知识」
- 所有代码、命令、输出必须先在本机跑通再写入,不得杜撰
- 版本口径以总纲环境清单为准(Spring Boot 3.x / MySQL 8.0 / Redis 8.x / RocketMQ 5.3.x / Kafka 4.3 / ShardingSphere 5.5.3)
- 涉及版本敏感结论时标注出处与时间
本篇完成后,把文首导航块的「🚧 占位待学」去掉,并在总纲处打卡。