区块链系统首先是分布式系统,分布式领域最为基础的问题就是一致性问题。
有限状态机是有限个状态以及在这些状态之间的转移和动作等行为的数学模型,其特点是状态总数有限,任一时刻只处于一种状态中,某种条件下,会从一种状态转变到另一种状态。从有限状态机的角度来看一致性,也即各个节点构成相同的有限状态机,给定相同的初始状态和输入序列,保证在处理过程中每个环节的结果都相同。
如果分布式系统能够实现一致性,对外就可以呈现出一个完美的、可扩展的“虚拟节点”,这也是分布式系统希望实现的最终目标。 区块链系统由非常多的分散节点组成,对于加入区块链的新内容,大多数节点必须达成一致才能成功写入,这种共识机制保证了网络安全,让篡改内容变得非常困难。
一致性与共识之间是结果和手段的关系
人们常常把一致性与共识混为一谈,实际上一致性描述的是结果状态,共识则是一种手段。一致性一般是指分布式系统中多个副本对外呈现的数据的状态,共识则描述了分布式系统中多个节点之间,对某个状态达成一致结果的过程。 要保障系统满足不同程度的一致性,往往需要共识算法来达成。共识算法解决的是对某个提案达成一致意见的过程,这里的提案可以指任何能达成一致的信息。
FLP不可能原理是共识算法的理论界限
1985年,Fischer、Lynch和Patterson提出了FLP不可能原理,它是分布式领域里的测不准原理,指的是在网络可靠,但允许节点失效的最小化异步模型中,不存在一个可以解决一致性问题的确定性共识算法。这里的异步与同步相对,指的是系统中各节点可能存在较大的时钟差异,同时消息传输时间和各节点处理消息的时间可能都是任意长的,这样就无法判断某个消息迟迟未被响应到底是哪里出了问题。
利用CAP之不可能三角用一方面的妥协保证另一方面
2000年7月,加州大学伯克利分校的Eric Brewer提出CAP猜想,2年后麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP,之后其正式成为分布式计算领域的公认定理。分布式计算系统不可能同时确保以下三个特性:C(一致性)、A(可用性)和P(分区容错性)。区块链系统中使用共识算法优先保证整个系统的容错能力。