同步链路的天花板:级联失败与延迟叠加
2026/8/24大约 3 分钟
亿级规模系统系列 · 阶段 3 · 异步与消息 · 第 15/49 篇 · 🚧 占位待学
上一篇:《热点 key 与多级缓存:扛住明星结婚》
下一篇:《削峰填谷:MQ 的第一性原理》
学习大纲:《QPS 过万与亿级消息系统设计学习总纲》
状态:待学习。 本文为占位文档:知识点清单、实验与验收标准已就绪,正文待按「先学习、先实验、再撰写」补全。
对应总纲单元:阶段 3 · 单元 3.1
一、本文要解决的问题
下单要同步调 8 个下游:风控、库存、优惠券、积分、通知……一个慢 2 秒,整条链路慢 2 秒;一个挂掉,上游线程池被拖满,故障像多米诺一样向上传播。同步调用是必要的恶——先看清它的两条死法,才知道哪些调用必须异步化。
二、知识点清单
- 延迟叠加公式:链路总 RT ≈ Σ 各环节 RT,串行的代价与并行化(CompletableFuture)的边界
- 线程池打满的传播机制:下游慢 → 上游调用线程阻塞 → 上游线程池耗尽 → 上游对更上游不可用
- 级联失败与雪崩的边界:本篇讲清「怎么发生」,止血手段(超时 / 隔离)在阶段 5 展开
- 调用分类法:强一致必须同步(扣库存)、最终一致可异步(发券)、尽力可为异步(通知)
- 异步化的代价预告:状态不可见(用户怎么知道成功)、消息可靠性(阶段 3.2/3.4 展开)
三、动手实验(学习时必须真跑)
- 搭 A→B→C 链式调用 demo,C 正常时压测 A 记录基线 RT 与 QPS
- 给 C 加 2s 延迟,观察 A 的 RT 变化与 A 的 Tomcat 线程池(jstack 看阻塞线程数),压测直到 A 拒绝服务
- 画「延迟叠加表」与「线程占用传播图」,标出每一环的线程数变化
四、验收标准(全部通过才进入下一篇)
五、写作提示(补正文时遵守)
- 开篇问题驱动;结构走「是什么 → 为什么 → 怎么做 → 背景知识」
- 所有代码、命令、输出必须先在本机跑通再写入,不得杜撰
- 版本口径以总纲环境清单为准(Spring Boot 3.x / MySQL 8.0 / Redis 8.x / RocketMQ 5.3.x / Kafka 4.3 / ShardingSphere 5.5.3)
- 涉及版本敏感结论时标注出处与时间
本篇完成后,把文首导航块的「🚧 占位待学」去掉,并在总纲处打卡。