引言———分布式系统一致性问题
区块链系统,首先是一个分布式系统。传统单节点结构演变到分布式系统,碰到的首要问题就是一致性的保障。很显然,如果分布式集群无法保证处理结果一直的话,那任何建立于其上的业务系统都无法正常工作。 一致性问题是分布式领域最为基础也是最重要的问题。如果分布式系统能实现“一致”,对外就可以呈现一个完美的、可扩展的“虚拟节点”,相对于物理节点具有更优越性能和稳定性。这也是分布式系统希望能实现的最终目标。在理想的情况下,如果各个服务节点严格遵守相同的处理协议,构成相同的处理机状态机,给定相同的初始状态和输入序列,则可以保证在处理过程中的每个环节的结果都是相同的。这里需要注意的是,我们所说的一致性并不代表结果正确与否,而是系统对外呈现的状态一致与否;例如,所有节点都达成失败状态也是一种一致。
一致性的问题和挑战
我们在涉及区块链的问题时,共识(consensus)在很多时候会与一致性(consistency)术语放在一起讨论。其实,两者的含义却是不同的。一致性往往指分布式系统中多个副本对外呈现的数据状态。它含有顺序一致性和线性一致性等等。描述了多个节点对数据状态的维护能力。而共识则描述了则描述了分布式系统多个节点之间,彼此对某个状态达成一致结果的过程。因此,一致性描述的是结果,共识则是一种手段,达成某种共识并不意味着就保障了一致性。 在实践中,要保障满足系统满足不同程度的一致性,核心过程往往需要通过共识算法来达成,共识算法解决的是对某个提案(propasal)大家达成一致意见的过程。如果分布式系统中各个单节点都能保证一十分理想的性能(如可以瞬间响应、超高吞吐)无故障地运行,节点之间通信瞬时送达,则实现共识过程并不十分复杂,简