Trouble with Distributed Systems (1)

2020 Day 21 - Replication 开始到现在,我们大多都是在谈系统出了怎麽办,诸如节点挂掉怎麽做做副本 (replication) 时 Lag 怎麽办 等等等等;一切就只是希望让工程师们意识到,边界条件(鬼故事)在现实世界中是会发生的,先了解,才能更好的处理它们。

分散式系统会因为各种原因出错,所以从这章开始,是时候要把鬼故事升级成魔王故事了,我们将谈谈更多可能会发生的错误,用最大力气假设系统若会故障就真的会故障,就像投资时要全盘考量各种风险那样(但有些人没在管)。

接下来我们会有最经典的网路问题、时钟精度问题,最後就是在分散式系统中最有趣的,有关节点状态的真与假,但首先先谈谈部份故障为何吧!

故障和部份故障 (Faults and Partial Failures)

当你写一段程序在单一台电脑上,它的结果很好预测,成功执行或失败;一个执行在独立电脑的好软件没有道理会起肖(除非你看太多奇怪东西中毒了),当你的硬体正常运作时,相同的操作会得到相同的结果,但当你硬体发生问题时(例如记忆体损坏、某条排线松脱等等),其结果就是整个作业系统故障(例如 windows 的蓝色当机画面),一个好软件在独立电脑上执行的结果,要嘛正常,要嘛故障,没有中间的。

当你的软件开始执行在多台电脑上时,用网路连接,这情况就不一样了,我们并不是在一个理想化系统模型中运行;在分散式系统中,总是有很多意想不到的方式出错(例如有人不小心把某一机柜的网路线拔掉了),称为 部份故障 (partial failure),部份故障是不确定的。

云端运算和超级运算 (Cloud Computing and Supercomputing)

这里有几个关於如何建立大规模运算系统的哲学:

  • 一边是有着高效能计算 (High-performance computing) 能力的超级电脑们,它们有上千颗 CPU 用在需要密集科学资料运算的任务上,如天气预测或分子动力计算。
  • 而另一边是云到极致的云端计算,透过网路串连。
  • 传统企业用资料中心落在上面 2 个极端之间。

这些哲学处理故障的方式很不一样,超级电脑在任务中会时不时地建立状态检查点,当某台节点故障,通常的解法就是停止整个丛集,修复节点,然後从检查点继续计算,就像独立电脑当机的意思一样。

而云端运算的分散式系统就必须要考量部份故障的可能性,软件必须要有容错机制,我们需要从不可靠的元件中建立可靠的系统 (2020 Day 2 - Reliable),尽管你的系统只跑在几个节点中也是一样。


明天就要开始进入最经典的网路问题啦!


<<:  [Day6] 学 Bootstrap 是为了走更长远的路 ~ Grid 篇 (1)

>>:  Day 4 -菜鸟报到 !

[Angular] Day23. Introduction to forms in Angular

从本章开始会进入 Angular Form 的部分,在现代网页中与使用者互动的过程变得越来越重要,其...

开放封闭原则 Open-Closed Principle

在上一篇文章当中,我们提到「单一功能原则」,指每一个类别只会因为一种原因被修改。那麽,如果真的遇到需...

喜欢的事情要成为专业,才能做喜欢的事情?

「喜欢的事情要成为专业,才能做喜欢的事情。」​ 这是我昨天跟朋友聊天时,听到最不合理,但却又像现代的...

[Day22] - 介绍 LitElement 如何使用

今天我们来介绍一下 , 昨天说明的 Web Component 框架中的其中之一 - LitElem...

Day-19 承载游戏梦想的南蛮黑船 XBOX 再启航

微软也做游戏机!这种在现在听来理所当然的事情、发生在 20 年前、其实还是让人感到挺震惊的。而当时诞...