高并发系统核心武器:削峰填谷

削峰填谷是高并发核心,下面我详解削峰填谷@mikechen

削峰填谷

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

高并发系统核心武器:削峰填谷-mikechen

削峰:流量洪峰来临时,不让所有请求瞬间打到后端。

而是先“拦”一下、缓冲一下、匀速放行,避免数据库、Redis、微服务被瞬时打穿。

当上游生产者的速度远大于下游消费者的处理能力时,缓冲区起到了“蓄水池”的作用。

 

削峰填谷原理

削峰填谷的核心原理,可以概括为一句话:把“瞬时到达的请求”变成“可控速率处理的任务” 。

高并发系统核心武器:削峰填谷-mikechen

第一步:是入口承接。

当请求进来时,不是直接同步写库,而是先进入一个缓冲层。

比如:消息队列、内存队列、请求队列,或者先落到缓存中 。

这样做的好处是,前端请求高峰不会立刻冲击数据库,系统先把流量“接住”。

第二步:是异步削峰。

缓冲层会按照系统能承受的速度,把请求一批批发往下游处理,相当于把一条陡峭的波峰拉平 。

如果系统一次只能稳定处理 10 个请求,就让它每次只处理 10 个,而不是让 1000 个请求同时压上来 。

第三步:是填谷处理。

在低峰期或者后台空闲时,再把积压任务继续消费完,保证请求最终能被处理完毕 。

所以削峰填谷的重点,不是“快”,而是“稳”:先保证系统不崩,再追求整体完成效率 。

 

削峰填谷案例

秒杀是削峰填谷最经典的案例。

高并发系统核心武器:削峰填谷-mikechen

假设:商品只有 1000 件,但活动开始瞬间有几十万请求同时打进来。

如果所有请求都同步查库存、同步下单、同步写数据库,系统几乎一定会被打爆 。

常见做法是:

  1. 先在入口做限流和校验。
  2. 再把通过校验的请求写入消息队列。
  3. 后端消费者按固定速率消费消息。

这样,用户虽然可能需要稍等几秒甚至几十秒才能看到最终结果,但系统不会因为瞬时洪峰而崩溃 。

评论交流
    说说你的看法