5 Why
- 为什么虾出错后有时会整个崩掉?因为没有错误处理机制,一个环节出错整条链路断裂。
- 为什么没有错误处理?因为设计时假设一切正常,没有考虑异常路径。
- 为什么不考虑异常?因为觉得"出了问题再说",但到时候已经来不及。
- 为什么来不及?因为错误发生时的修复成本是预防成本的10-100倍。
- 为什么差这么多?因为错误会级联放大——一个小错不处理,会引发一连串更大的错误。
完美的虾不存在。错误不是意外,是必然。容错章讲的不是"怎么不出错",而是"出错后怎么用最小代价恢复"。一只能快速从错误中恢复的虾,比一只号称永远不出错的虾靠谱一万倍。
容错是在系统设计阶段就考虑"如果出错了怎么办"。三个层次:预防(减少出错概率)、检测(快速发现错误)、恢复(用最小代价回到正常状态)。完美的容错系统让用户甚至感知不到出过错。
容错的本质是承认不完美,然后用系统化的方式管理不完美。追求零错误是幻想,追求快速恢复是工程。最可靠的系统不是不出错的系统,而是出错后能在用户感知到之前自动恢复的系统。