知识卡片

部分失效的不确定性是分布式系统区别于单机的决定性特征

普通读书笔记卡

内容

单机软件的失效模式相对可预测:硬件正常时同一操作总产生同一结果,硬件出问题时通常 是整个系统一起崩溃(内核恐慌、蓝屏)——计算机设计的哲学是”宁可完全崩溃,也不要 返回错误结果”,因为错误结果比彻底失败更难处理,这让单机软件呈现”要么完全正常、 要么完全失效”的确定性。分布式系统完全不同:系统的某些部分可能以不可预知的方式 损坏,而其他部分依然正常工作,这叫部分失效,其麻烦之处在于它是不确定性的——同样 一次涉及多节点和网络的操作,有时能成功,有时会以无法预知的方式失败,你甚至不知道 它到底成没成功,因为网络传递消息本身就带着不确定的延迟。应对这种不确定性有两种 截然不同的哲学:超级计算机走的是”部分失效升级为完全失效”的路线——一旦有节点出 问题,直接把整个集群的作业停掉,从上一个检查点重新开始计算,本质上是把分布式系统 硬当成单机来处理故障;互联网服务走的是完全相反的路线——因为在线服务要求随时以低 延迟响应,不能接受”停机等修复”,所以必须真正在软件层面构建能容忍部分失效、同时 整体继续工作的机制,比如靠这种容错能力才能做滚动升级、杀掉有问题的虚拟机重新申请 一台。这个根本差异解释了为什么”从不可靠组件构建可靠系统”是理解分布式系统设计的 出发点,而不是一句空话。

参考来源

- 位置:《数据密集型应用系统设计》第八章《分布式系统的麻烦》"故障与部分失效" "云计算与超级计算机"(源文件:_epub-src/ch8_split_000.html) - 结论依据:原文说明单机故障通常导致完全失效、分布式系统会出现部分失效且是 不确定性的,并对比超级计算机"部分失效升级为完全失效"和互联网服务"必须真正 容忍部分失效"两种不同的故障处理哲学,直接支撑本卡片结论。 - 原始内容:在分布式系统中,尽管系统的其他部分工作正常,但系统的某些部分可能会 以某种不可预知的方式被破坏。这被称为部分失效……这种不确定性和部分失效的可能性, 使得分布式系统难以工作……通过让部分失败升级为完全失败来处理部分失败……使服务 不可用(例如,停止集群以进行修复)是不可接受的。