区块链技术发展近10年,虽然仍然是一项比较新的技术,但是其发展速度,技术栈覆盖范围的延伸超乎我们的想象。我们可以从很多方面来分析以及归类区块链技术:密码学技术,身份隐私性,数据隐私性,数据存储方式,计算的完备性,激励机制,系统是否高通量,系统的延迟性,安全保障,威胁模型,如何处理分叉等等。
但是最核心的技术仍然是一致性算法,基本上所有其它的特性都是围绕着一致性算法体现的。
区块链是分布式系统的一种。分布式系统在学术界有几十年的历史,一致性算法也是一个比较热门的研究方向。本文会从经典的一致性算法开始,然后过度到PoW,PoX,以及目前流行的多委员会选举。
传统一致性算法
传统的一致性算法有很多,比较简单的算法例如二阶段提交,目前在大型分布式系统中应用的有Paxos和Raft。二阶段提交中的二个阶段分别是提交请求阶段和提交执行阶段。参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。Paxos考虑到更为详细的情况,并且有更多的角色来行使不同的判定功能。虽然Paxos在工业界被广泛应用,但是由于其复杂性高,出现问题时候很难处理。Raft通过时间控制来达到领袖选举,并且比Paxos易于操作。
传统的一致性算法在中心化分布式系统中比如Hadoop有非常好的效果,但是在去中心化应用中就有着很大的局限性。其原因是这些算法要求涉及到的节点是可信的。因为在去中心化环境中比如比特币系统,任何节点都可能是不可信的。比特币的PoW算法是基于统计学原理(赌徒破产问题)来设计的,任何单独节点能够独立完成领袖选举。通过积累算力来达到整个系统的一致性。
PoW和PoX
PoW本身除了维持系统一致性,没有提供其它附加功能。每个节点都会通过计算来获取出块,这样浪费大量的电力。许多新的算法尝试通过提供附加功能来达到系统一致性。PoS(Proof of Stake),矿工参与新块的产生是与他们在区块链里面的投资成比例的。Proof of Capacity,矿工给新块投票是基于他们提供的硬盘空间。
Proof of Space,一致性算法是基于矿工连续提供存储能力。Proof of Useful Work代表一类提供有用算力的一致性算法。简单起见,我们把这里提到除了PoW,统称为PoX。
多委员会选举
PoW以及提到的PoX是单个节点出块,所以造成了效率低,主要表现为低通量和高延迟性。为了解决效率低的问题,一种解决方案就是采用了委员会。通过某种选举机制,选出一个委员会,通常这里面的委员是超级节点。
委员会的选举有3种基本模式。邀请制,比如超级账本(hyperledger)就是邀请信任的节点参加委员会。使用PoW来决定哪个节点可以加入,比如ByzCoin。密码学摇奖机制,比如Algorand。邀请制通常被联盟链采用,这是一种效率和中心化的妥协。Algorand是一种秘密选举机制,这样无法事先知道谁是委员会成员。
虽然单委员会相比于单节点有了很大的性能上的提升,但是对于横向扩展还是存在问题。当一个委员会的性能达到极限,只能通过增加委员。分片技术采用了多委员会,每个委员会处理部分交易。由于增加委员会比增加委员更具有可操作性,所以对于性能的改善有很大的提高。
DxChain的三链合一的设计中,不同链对于性能有不同的要求,所以我们对于主链和侧链采用了不同的一致性算法。
本文只是简单介绍了区块链一致性算法,很多细节并没有深入讨论,比如PoS的如何防止攻击,委员会成员如何轮换,委员会内部如何达成一致等。我们会在以后的技术论坛详细讨论。
评论