崩溃故障(Crash Failure)
崩溃故障是分布式系统中最简单、也最容易处理的故障类型。
当一个节点突然停止工作,既不响应请求,也不发送任何消息,我们称之为崩溃故障(Crash Failure)。在学术上,这也被称为「崩溃-停止」(Crash-Stop)模型——节点要么正常工作,要么完全停止,没有中间状态。
崩溃故障的特征
崩溃故障的定义:
- 节点完全停止响应
- 不会产生任何错误消息
- 不会发送任何消息
- 故障是突然的,没有预兆
崩溃故障的成因
崩溃故障的检测
心跳检测
最简单的检测方式:
HeartbeatChecker.java
主动健康检查
Kubernetes
崩溃故障的应对策略
策略一:冗余备份
策略二:自动故障转移
AutoFailoverService.java
策略三:幂等设计
崩溃后重启,节点不知道之前处理了哪些请求。幂等设计保证重试不会产生副作用:
IdempotentService.java
崩溃故障与其他故障类型的关系
崩溃故障往往会引发其他类型的故障:
最危险的场景:崩溃引发的超时 → 其他节点重试 → 负载增加 → 引发更多崩溃。
崩溃故障的 MTTR 优化
崩溃故障的 MTTR 通常包括:
优化方向:
本章总结
核心要点:
- 崩溃故障是最简单的故障:节点要么工作,要么完全停止
- 心跳检测是最常用的检测方式:定期 ping,无响应则判定崩溃
- 冗余是应对崩溃的核心:主备切换、多副本、多活
- 幂等设计保证故障恢复后行为正确:防止重复处理
- 崩溃可能引发级联故障:负载转移可能导致其他节点过载
崩溃故障虽然简单,但如果处理不当,会引发更严重的级联故障。接下来我们看另一种常见的故障类型:遗漏故障。