一致性问题是区块链等分布式系统中的关键问题,现在常用的一些算法有Paxos,拜占庭,PoW,PoS,DPoS等。这些算法各有各的特点,适用于于不同的场景。本文讨论这些算法的特点,不涉及算法具体内容。
Paxos
Paxos是一种基于投票的算法,他假设是网络中节点数已知并且没有恶意节点。Paxos可以较快的达成一致,但是如果网络中节点(Acceptor)很多的话,那么算法需要与不同的节点通信,此时网络通信的开销会影响其达成一致的最终时间。
Byzantine
Byzantine也是一种基于投票的算法,与Paxos不同的是他允许网络重存在一定量的恶意节点(N>3f+1),现在PBFT算法时间复杂度已经在多项式级别,从而可以较快的达成一致,同样的与Paxos一样,增加节点会对算法性能有影响,可扩展性一般
PoW
PoW是一种类似于博彩的算法,中奖者决定网络中待确定的属性值,该算法与网路中的节点个数无关,从而拥有非常好的扩展性;但是就像彩票,可能会有多个人获得头奖,这个时候就会造成冲突,就需要考虑如何解决,譬如比特币,当多个节点挖出一块时,采用后续区块最多的链条,这样其确认时间就比较长。PoW允许网络中不超过50%的恶意节点。
PoS
PoS也可以看作是基于投票的算法,有点类似于现实生活中的股东机制,拥有股份越多的越容易获得投票权。现实系统中单独使用PoS的比较少,不做讨论。
Kafka in Fabric
Fabric中的一致性算法是可插拔的,官方支持的有Solo用于开发测试,Kafka用于生产环境。不论是那个,其实相当于引入了一个中心节点(并不是说只允许一个Orderer),所有的操作都通过这个节点进行排序从而保证所有Peer节点拿到相同的执行序列;其扩展性及时延都是比较好的。同时他支持Kafka级别的容错,没有恶意节点,但Fabric目标运行环境就是一个相对可信的环境。
综上,我们有如下一个比较,从而可以根据实际场景要求采用不同的算法