故障模型概述
故障不是随机的,每种故障都有其特定的成因、传播方式和影响范围。理解故障模型,是设计容错机制的前提。
在分布式系统中,故障是常态而非异常。你无法避免故障发生,但你可以做到:
- 识别故障类型:知道「这是哪种故障」
- 理解故障传播:知道「这个故障会如何影响其他组件」
- 设计防护手段:知道「面对这种故障应该怎么办」
故障分类体系
故障可以从多个维度分类:
按影响范围
按持续时间
按行为特征(经典分类)
这是分布式系统领域最常用的分类方式:
故障与可用性的关系
每种故障类型对可用性的影响不同:
故障模型的核心概念
故障假设(Failure Assumptions)
每个分布式协议都有一个故障假设:协议在什么故障假设下是正确的?
故障检测
知道系统发生了故障,是处理故障的前提。故障检测有两种方式:
故障隔离
故障不应该在系统内传播。好的架构应该做到:
故障与 CAP 定理
不同的故障类型会影响 CAP 定理中的一致性和可用性:
常见故障模式
级联故障(Cascading Failure)
最常见也最危险的故障模式。一个组件故障导致另一个组件过载,过载导致更多故障,以此类推。
案例:2019 年某电商平台,商品推荐服务超时 → 调用方线程池堆积 → 线程池耗尽 → 影响其他服务 → 全站宕机。
资源耗尽(Resource Exhaustion)
资源耗尽往往是慢性故障的开始:
本章总结
核心要点:
- 故障分类是多维度的:按影响范围、持续时间、行为特征、严重程度
- 崩溃/遗漏/拜占庭是经典分类:每种类型有不同的应对策略
- 故障检测是第一步:不知道故障发生,就无法处理
- 故障隔离是关键:防止故障传播是架构设计的核心
- 级联故障最危险:一个故障可能引发整个系统崩溃
理解了故障模型的基本框架,接下来我们将深入讲解每种具体的故障类型。先从崩溃故障开始。