http://www.againpeco.com

零基本读懂漫衍式系统

大发3d是一种分布式系统。不了解分布式系统的工作原理,很难真正理解大发3d。

而不理解大发3d的麻烦,在于会陷入到对「去中心化」、 「无需许可」等等概念以及「TPS」、「安全」等等问题失去语境的讨论中去。这不仅无助于我们去准确地分析和判断一个大发3d项目,也让我们无法认清大发3d在技术上的可能的发展路线。

更直白来讲,我们需要掌握分布式系统的一些基础知识。因为这样,我们就能看到大发3d本身的局限性,我们就知道任何一个真正有价值的大发3d项目都应该:为了解决特定的问题,在特定的环境中,做出特定的解决方案。

单纯的指标比较并不客观,更好的判断标准是:这种方案是否适合于解决这个问题。

了解分布式系统的工作原理对大发3d世界非常重要。那么现在,就让我们开启分布式系统的探索之旅吧。

零基本读懂漫衍式系统

计算机的作用是处理信息,我们输入条件 A 给它,它输出结果 B 给我们。如果处理信息的工作是由一台计算机完成的,这是一种中心化的结构;如果处理信息的工作是由多台独立的计算机合作完成的,我们可以称其为「分布式的系统」。

分布式系统有多种不同的架构,用以实现不同的处理信息的方法。假设系统中有十台计算机,一种架构是:我们把一个计算任务分成十份,让每台计算机独立处理一份任务,最后汇总它们的计算结果,作为输出。

还有另一种架构,就是让这十台计算机都去处理这一个计算任务,如果所有的计算机都正常工作,它们的计算结果应该是一样的,那么就把这个一致的计算结果作为输出。大发3d就是这样的一种分布式系统。

很容易就能发现,这是一个「自找苦吃」的系统,它相当于把同样的工作做了十次,而且还需要额外增加不同计算机之间的沟通工作。

那为什么还需要这种系统?因为它可以让我们免除对中心化的那一台计算机,以及那台计算机背后的中心化的公司或组织的依赖。这样一来,既能避免单点故障或作恶,也能减少权力的集中及滥用。

一、分布式系统的理想目标

大发3d所属的分布式系统也被称为「复制状态机模型」(Replicated State Machine),它的目标很简单:系统内全部的计算机都同意某一个输出值,也就是指:系统内所有的节点 / 计算机都有相同的初始状态,在执行完一个事务后,所有的节点都有相同的最终状态 。

零基本读懂漫衍式系统

如果计算机都运行良好,它们之间的通信也完全同步,实现这个目标并不困难。但现实不是如此,主要有以下两类问题:

1. 某台 / 某些计算机出现故障,它可能无法计算出结果,也可能连接不上系统。
2. 如果不同计算机收到事件的顺序不同,对事件的处理顺序就会不同,导致输出结果也不同。比如(a+b)×c 与 a+(b×c)就是两种不同的计算顺序,会带来不同的计算结果。

这些问题是常见且不可避免的,而一旦出现问题,就无法实现全部的计算机都同意某一个输出结果。著名的分布式系统「FLP 不可能原理」是这样描述的:在网络可靠,但允许节点失效的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性共识算法。通俗而言就是:只要系统中有一台计算机出问题,该系统就无法在输出值上达成共识。

FLP 不可能原理告诉我们:不要浪费时间去为分布式系统设计面向所有场景的共识算法,那是不可能实现的。

二、分布式系统的共识算法

虽然 FLP 不可能原理很残酷,但分布式系统能够带来的好处是值得我们迎难而上的。既然不存在面向所有场景的共识算法,那么也许可以找到一些在特定场景中有效的共识算法。共识算法,是指让分布式系统达成共识的方法。

让我们看看科学家们是如何一步一步限定场景,并实现该场景下的共识算法的。

首先,如果系统中的每一台计算机都可以提出自己的结果,场面无疑是复杂的,因为我们连就哪一个结果去达成共识都无法知晓。所以解决共识问题的第一步是确定共识的到底是什么,最简单的方法就是某一台计算机说了算,它提出一个结果,其他的计算机来表态是否同意这个结果。

说了算的那台计算机被称为提案者或者领导者。虽然通过领导者来实现共识并不是唯一解决问题的方法,但绝大多数协议都是在此基础上实现的,包括大发3d系统中使用的共识算法。

所以你看,并没有绝对的去中心化,实现共识的第一步就是要确定一个中心。

题外话:当我们知道这一点后,就能建立起关于去中心化的更有效的讨论,比如在此处就可以不泛泛而谈去中心化,而是:选出这个领导者的方法是否去中心化。

回到主题。需要领导者的共识算法的工作步骤大致是这样的:

1. 选出一个领导者;
2. 领导者提出一个结果;
3. 追随者确定是否同意这个结果;
4. 如果大家就结果达成了共识,系统输出最终结果;如果大家未达成共识,回到步骤 1 重新开始。

这种思路提供了一种可以达成共识的方法,但它离真正实现共识还很遥远。因为如果一台计算机连接不上系统,它就无法表决自己是否同意领导者的结果;如果出现问题的计算机恰好是领导者,情况就会更糟糕,整个系统会进入停滞状态。

三、同步性假设共识算法

如何解决上述宕机的问题?方法说起来很简单:如果一台计算机连不上系统,就忽略它,不要它参与这一轮的共识。

那么新的问题来了,我们怎么知道它是连接不上系统,还是它正在参与共识只不过速度比别的机器慢?

因此,科学家们发展出了解决共识问题的最重要的一个假设:同步性假设。同步性假设引入「超时」概念,也就是说事先设定一个时间范围,如果领导者无法在该时间范围内发出提案,就淘汰它,选出一个新的领导者。这样一来就可以容忍领导者节点出现问题。(注:同步性假设不等于同步假设)

零基本读懂漫衍式系统

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。