惊群效应(Thundering Herds)
本文总结分布式系统中常见的“惊群效应”问题及应对方案,内容会随着实践不断补充。
定义
惊群效应是指在分布式系统中,当某一共享资源在短时间内同时变为可用或失效时,大量客户端或线程几乎同时发起请求,导致后端瞬时负载激增,甚至引发雪崩效应。
常见触发场景
缓存击穿
热点 Key 过期或被淘汰,大量请求同时 miss,直击数据库,造成后端压力骤增。锁竞争唤醒
多个线程等待同一分布式锁或条件变量,持锁方释放后全部被唤醒,瞬时产生大量竞争请求。服务节点瞬时上线
新节点启动后被路由层立即分配大量请求,但冷缓存/初始化开销未完成,容易导致快速过载。
常见缓解策略
限流
控制单位时间请求数,防止后端瞬时过载。请求合并
多个相同请求合并为一次后端访问,减少重复开销。提前刷新
在热点数据失效前主动更新,避免大规模 miss。随机过期
为不同 key 增加随机 TTL,避免同一时刻集中失效。
Lease 机制
原理
Lease 是一种缓存击穿防护策略,在 Memcached 等系统中常见:
- 当某个 key miss 时,缓存只向第一个请求方发放 lease token,授权其访问后端并回填数据;
- 其他请求方在 lease 有效期内返回“稍后重试”或等待回填完成;
- 在同一 lease 周期内,只有一个请求会触发后端访问。
优点
- 将瞬时高并发压力限制在缓存层,保护后端服务。
- 可结合 TTL 随机化、热点数据提前刷新等策略,进一步降低风险。
局限
- 无法避免初次 miss 时的并发涌入。
- Lease 发放策略与 TTL 需结合业务特点调优。
总结
惊群效应的本质是瞬时高并发访问单一昂贵资源。应对的核心思路是:
- 减少瞬时访问量(限流、随机过期)
- 减少重复访问(请求合并、Lease)
- 提前避免失效(提前刷新)
在实际系统中,往往需要多种策略结合使用,才能在高并发场景下有效降低惊群带来的风险。