📖 版块 A:知识讲解版 (温故知新)
削峰原理:利用MQ的长久堆积能力,将突发流量暂存在MQ的磁盘上,消费端按照自身处理能力平滑拉取。
失效场景:
- 下游彻底阻塞:消费端依赖的下游(如数据库死锁、连接池满、第三方API宕机)彻底卡死,导致消费速度趋近于零。
- 强同步低延迟业务:业务要求极低的延迟(如要求请求发出1秒内必须拿到结果),此时在MQ里堆积再久,对于前端用户而言请求已经超时失败。
- 数据倾斜:队列设计不合理或Hash分布不均,导致某个分区积压严重,其他分区闲置。
🎤 版块 B:面试实战版 (高手逐字稿)
Q:引入MQ就一定能实现削峰吗?有哪些场景可能导致削峰失效?
🧠 破局思路:这是一个踩坑实战题。破局点在于点出削峰的本质(以时间换空间),然后举出具体反例:当下游资源彻底耗尽,或者业务不允许“换时间”时,削峰机制就会崩塌。
💬 高手逐字稿
引入MQ并不意味着一劳永逸,很多时候削峰是会失效的。MQ削峰的本质是“以时间换空间”,将瞬时的流量洪峰转化为平缓的长时间处理。 在实际业务中,遇到以下两种情况削峰就会失效:
第一种是“下游资源彻底耗尽”。比如消费端虽然限流了,但它依赖的MySQL连接池被打满,或者调用的第三方API完全宕机,导致消费端线程全部阻塞。这时候MQ里堆积再多数据也无济于事,因为消费端已经瘫痪了。
第二种是“强同步且低延迟”的业务。如果前端用户最多只能等3秒,而你为了削峰在MQ里把消息积压了10秒才处理,那对于用户来说这个请求其实早就超时失败了。
所以,削峰能成立的前提是:业务上允许异步和一定的延迟,并且消费端的处理链路没有出现彻底的阻塞。
最后更新于: