区块链 共识简介:一致性不可能与99.9可靠性(9)
分布式的的基本瓶颈是什么?为什么分布式系统这么困难,人们还要孜孜不倦不倦地设计他们?搞一个巨大的中心化系统可能吗?FLP,CAP说的是些什么?
让多于一个节点的系统能够协同工作,需要满足两个条件,一是一致性,大家的力气往一处使,二是唯一性,每个节点都在干自己的活儿。唯一性的算法是一致性哈希表,这里我们不讨论,主要是我不太懂。:-)
分布式系统不可或缺,原因是可靠性和规模。集中的单一系统,无论其可靠性和处理能力多高,都是有限值。就可靠性而言,一个最简单的器件,其失效率大约在一个FIT(10的9次方分子一)。而简单路由器的失效率就已经达到了几百个FIT的量级。进一步提高可靠性的方法是系统备份,也就是用两个或者多个系统来承担任务,其中一个坏了不影响整体系统的可用性。而这两个或者三个互相备份的系统,他们之间给出的结果不一样怎么办?这就回到了一致性这个基本的命题。
我们从来没有见到任何系统保证100/100的可靠性,都是99.9,或者99.999,为什么呢?这和FLP有关。FLP是三个人姓的字母缩写,它论证了在异步的网络上,任何分布式一致性算法,面对仅仅一个节点时效时,都有算法不能结束的风险(一直达不成一致)。
这初听起来很让人绝望,但在工程精度范围内,有很多解决方案。例如,部署有同步时钟的网络(相对论告诉我们对不同观察者没有同步的时钟,但我们生活的低速世界,这至少暂时还不是问题),电信系统以前就是有同步时钟的,中国有国家授时系统。我们可以看见,这个时钟系统是中心化的,但是中心化和去中心化都是工具,如果中心化的时钟系统效果最好,为什么要拘泥于去中心化呢?
也可以或然地承诺系统的可靠性,比如5个9,9个9,甚至11个9。到这个精度,系统可靠时间已经远远超过了维修换代时间和人的自然寿命,可以安全使用了。
CAP的意思是说,分布系统不能同时满足 Consistency(一致性),Availability(可用性),Partition Tolerant(网络隔离容忍)。网络隔离会导致两个不一致的,互相不能通讯的中心,又叫脑裂。CAP的不可能性和FLP的不可能性一样,都在工程精度范围内可以解决。
以上FLP,CAP都给我们一点启发,就是网络与通讯是分布式系统的基本瓶颈。这也和直觉一致,分布式系统,就是用网络连接起来的很多个小的单一系统。
我们的社会也是一个很多人组成的分布式系统,需要一致性,唯一性和可靠性。需要中心化的节点,和分布式的系统。互相协同,才能达到系统效果最优。而沟通与通讯也是基本瓶颈。
附录 技术部分
Paxos是最为人知的分布式一致性协议,它就是一个不靠谱的议会(a part time parliment)。毫不意外,它无法处理拜占庭错误。如果有1/3的成员组织起来,就能够让一致性被影响。秘密社团只需要在1/3的议员里面,通过影响公众不注意的法案细节,就可以给他们自己谋巨大的利益,现在你相信有秘密社团了吗?。