大促开场 3 分钟,87% 的正常用户被自己的限流拦在门外
引言 618 开场 3 分钟,客服群先是安静,然后炸了:大量用户反馈"点进去就是系统繁忙",但后台监控显示后端 QPS 只有预期的四分之一,服务器闲得发慌。 翻网关日志,429 占比 87%。也就是说,我们自己的限流把 87% 的真实用户拒了,同时那批刷子请求畅通无阻。 配置是四个 Nginx 实例,每个上面一行 limit_req_zone $binary_remote_addr zone=perip:10m rate=5000r/s;。 我当时的理解是"每个用户每秒 5000 次",显然过于宽松,肯定是刷子打太多了。第一反应是把 rate 调到 50000,多放点人进来。 调完 5 分钟,后端 QPS 从 2 万冲到 19 万,数据库连接池瞬间打满,订单服务开始超时,事故从"网关误杀"升级成"后端雪崩"。 先给结论:限流限的是"谁",不是"多少"。 你把 key 选错,rate 配得再准也是在限一个不存在的人;你把单机限流当全局限流,四个实例就是四份配额,总量永远是配置值的 N 倍。这篇按事故顺序讲完三层限流的完整配置:CDN 边缘 → Nginx 原生 + Lua 分布式 → 应....