削峰填谷是高并发核心,下面我详解削峰填谷@mikechen
削峰填谷
削峰填谷,在高并发系统中,指的是通过缓冲、异步等手段,把瞬时爆炸的流量高峰“削掉”一部分,同时把低谷期的闲置能力充分利用起来。

削峰:流量洪峰来临时,不让所有请求瞬间打到后端。
而是先“拦”一下、缓冲一下、匀速放行,避免数据库、Redis、微服务被瞬时打穿。
当上游生产者的速度远大于下游消费者的处理能力时,缓冲区起到了“蓄水池”的作用。
削峰填谷原理
削峰填谷的核心原理,可以概括为一句话:把“瞬时到达的请求”变成“可控速率处理的任务” 。

第一步:是入口承接。
当请求进来时,不是直接同步写库,而是先进入一个缓冲层。
比如:消息队列、内存队列、请求队列,或者先落到缓存中 。
这样做的好处是,前端请求高峰不会立刻冲击数据库,系统先把流量“接住”。
第二步:是异步削峰。
缓冲层会按照系统能承受的速度,把请求一批批发往下游处理,相当于把一条陡峭的波峰拉平 。
如果系统一次只能稳定处理 10 个请求,就让它每次只处理 10 个,而不是让 1000 个请求同时压上来 。
第三步:是填谷处理。
在低峰期或者后台空闲时,再把积压任务继续消费完,保证请求最终能被处理完毕 。
所以削峰填谷的重点,不是“快”,而是“稳”:先保证系统不崩,再追求整体完成效率 。
削峰填谷案例
秒杀是削峰填谷最经典的案例。

假设:商品只有 1000 件,但活动开始瞬间有几十万请求同时打进来。
如果所有请求都同步查库存、同步下单、同步写数据库,系统几乎一定会被打爆 。
常见做法是:
- 先在入口做限流和校验。
- 再把通过校验的请求写入消息队列。
- 后端消费者按固定速率消费消息。
这样,用户虽然可能需要稍等几秒甚至几十秒才能看到最终结果,但系统不会因为瞬时洪峰而崩溃 。