“系统怎么保证不挂”这个问题的答案,散布在限流、熔断、超时重试、幂等、冗余、压测等一串主题里。本文是高可用模块的学习地图:这些主题如何分组、依赖关系是什么、按什么顺序学最省力。

主题分组

高可用模块可以分成四组:

  • 度量与设计方法:可用性几个 9、SLA、RTO/RPO、单点故障、故障域。这是整个模块的共同语言——说不清目标,后面所有手段都是无的放矢。
  • 稳定性治理:限流、降级、熔断、超时与重试。流量沿调用链往下走时逐层设防的手段,回答”流量超标、下游异常时怎么自保”。
  • 幂等:重复请求、重试、消息重投、支付回调的安全前提。它是写操作挂上任何自动重试机制之前的入场券。
  • 容灾与验证:冗余架构、故障转移、性能压测、故障演练。回答”节点或机房真挂了怎么办”,以及”上面这些设计怎么证明有效”。

依赖关系

度量与设计方法(几个 9 / RTO / RPO / 单点)
├──> 稳定性治理(限流 → 超时重试 → 熔断降级)
│ └──> 幂等(重试与写操作的前提)
└──> 容灾与验证(冗余 → 故障转移 → 压测 → 演练)

度量指标是地基:不理解 TP99 就定不好超时,不理解 RPO 就选不动复制方式。稳定性治理内部也有顺序:限流管入口,超时重试管单次调用,熔断降级管持续异常,三者要在一条调用链上摆对位置。幂等横切在重试之上——不先解决幂等,重试就是制造重复扣款的机器。容灾组依赖前面全部:压测用分位延迟和 Little 定律验证容量,演练用故障注入验证冗余和切换设计真的生效。

推荐学习顺序

  1. 先立目标:读高可用系统设计详解,把几个 9、单点、故障域和手段全景建立起来。
  2. 再攻治理三件套:按服务限流详解、超时和重试机制详解、服务降级与熔断详解推进,边读边在自己的调用链上找对应位置。
  3. 补上幂等:读接口幂等性设计详解,重点想透”超时不能证明服务端没执行”这句话。
  4. 容灾与验证收尾:读冗余设计详解和性能测试入门,理解 RTO/RPO 的代价和压测验证闭环。
  5. 面试导向的读者可以直接从高可用面试题总结反查薄弱环节,再回到对应专题补细节。

学完之后怎么巩固

高可用是验证出来的学问,光看不动手等于没学。建议每个主题配一个小实验:给本地服务设一个过短的超时,观察线程池怎么被拖垮;手写一次带抖动的指数退避重试;给接口故意制造一次重复提交,验证幂等约束;用 JMeter 把接口压过拐点,亲眼看一次曲棍球棒曲线。更进一步是做故障复盘:每次线上问题事后归类到上面的分组里,写明根因、止血动作和根治措施——可用性能力的一半来自原理,另一半只能来自故障。

小结

  • 四组主题:度量与设计方法、稳定性治理、幂等、容灾与验证。
  • 顺序是”目标 → 治理三件套 → 幂等 → 容灾与验证”,面试可从题库反查。
  • 实验加故障复盘,是这个模块唯一有效的学法。