从 2020 Day 21 - Replication 开始到现在,我们大多都是在谈系统出错了怎麽办,诸如节点挂掉怎麽做、做副本 (replication) 时 Lag 怎麽办 等等等等;一切就只是希望让工程师们意识到,边界条件(鬼故事)在现实世界中是会发生的,先了解,才能更好的处理它们。
分散式系统会因为各种原因出错,所以从这章开始,是时候要把鬼故事升级成魔王故事了,我们将谈谈更多可能会发生的错误,用最大力气假设系统若会故障就真的会故障,就像投资时要全盘考量各种风险那样(但有些人没在管)。
接下来我们会有最经典的网路问题、时钟精度问题,最後就是在分散式系统中最有趣的,有关节点状态的真与假,但首先先谈谈部份故障为何吧!
当你写一段程序在单一台电脑上,它的结果很好预测,成功执行或失败;一个执行在独立电脑的好软件没有道理会起肖(除非你看太多奇怪东西中毒了),当你的硬体正常运作时,相同的操作会得到相同的结果,但当你硬体发生问题时(例如记忆体损坏、某条排线松脱等等),其结果就是整个作业系统故障(例如 windows 的蓝色当机画面),一个好软件在独立电脑上执行的结果,要嘛正常,要嘛故障,没有中间的。
当你的软件开始执行在多台电脑上时,用网路连接,这情况就不一样了,我们并不是在一个理想化系统模型中运行;在分散式系统中,总是有很多意想不到的方式出错(例如有人不小心把某一机柜的网路线拔掉了),称为 部份故障 (partial failure),部份故障是不确定的。
这里有几个关於如何建立大规模运算系统的哲学:
这些哲学处理故障的方式很不一样,超级电脑在任务中会时不时地建立状态检查点,当某台节点故障,通常的解法就是停止整个丛集,修复节点,然後从检查点继续计算,就像独立电脑当机的意思一样。
而云端运算的分散式系统就必须要考量部份故障的可能性,软件必须要有容错机制,我们需要从不可靠的元件中建立可靠的系统 (2020 Day 2 - Reliable),尽管你的系统只跑在几个节点中也是一样。
明天就要开始进入最经典的网路问题啦!
<<: [Day6] 学 Bootstrap 是为了走更长远的路 ~ Grid 篇 (1)
从本章开始会进入 Angular Form 的部分,在现代网页中与使用者互动的过程变得越来越重要,其...
在上一篇文章当中,我们提到「单一功能原则」,指每一个类别只会因为一种原因被修改。那麽,如果真的遇到需...
「喜欢的事情要成为专业,才能做喜欢的事情。」 这是我昨天跟朋友聊天时,听到最不合理,但却又像现代的...
今天我们来介绍一下 , 昨天说明的 Web Component 框架中的其中之一 - LitElem...
微软也做游戏机!这种在现在听来理所当然的事情、发生在 20 年前、其实还是让人感到挺震惊的。而当时诞...