Gossip(流行病算法)

它与流行病毒在人群中传播的性质类似,由初始的几个节点向周围互相传播,到后期的大规模互相传播,最终达到一致性。Gossip协议被广泛应用于P2P网络,同时一些分布式的数据库,如Redis集群的消息同步使用的也是Gossip协议,另一个重大应用是被用于比特币的交易信息和区块信息的传播。Gossip协议确保的是分布式集群的最终一致性。
在Gossip算法中,Gossip每次新感染的节点都会至少再感染一个节点,展开来看,这就是一个多叉树的结构,那么依据这个结构,最大的时间复杂度即使一个二叉树的形式,这时整体上达到一致性的速度是log(n).可见Gossip传播性能还是相当惊人的,著名的Redis数据库便是使用Gossip传播协议保持一致性,Redis最多可支持百万级别的节点,gossip协议在其中起到了重要作用。

Proof-of-work(Pow)算法

大量的节点参与竞争,通过自身的工作量大小来证明自己的能力,最终能力最大的节点获得优胜,其他节点的信息需要与该节点统一。
在Pow机制下,所有参与者共同求解数学问题,这些数学问题往往需要经过大量枚举才能求解,因此需要参与者消耗大量的硬件算力。成功求解数学问题的参与者将获得记账权,并获得比特币作为奖励。其余所有参与者需要保持和获得记账权节点的区块一致,由此达到最终的一致性。
依靠Pow算法,比特币很大程度保证了交易平台的安全性。因为如果要对该平台的数据进行篡改或者毁坏,篡改者至少需要获得比特币全网一半以上的算力,这是非常难以达到的。但是同样Pow存在很多缺点,Pow达成一致性的速度很慢,应用在比特币中每秒钟只能做成7笔交易,这在大部分的商业应用中都是达不到要求的。其次Pow造成了很大的资源浪费。所有的竞争者夺取记账权需要付出巨大的硬件算力,这在背后是大量的硬件成本、电力损耗,而一旦记账权确定,其余没有获得记账权的节点的算力等于白白浪费。最后是现在出现了一些大规模的专业矿场,这些矿场的算力非常强大,它们的存在增大了平台被篡改的可能性。

Gossip算法和Pow算法对比

同为去中心化的算法,Gossip算法和Pow算法都能实现超大集群的一致性,但是它们的特性可谓有天壤之别。Gossip算法往往应用于超大集群快速达成一致性的目的。它的特性是如流感一般超强的传播速度,以及自身能够管理的数量可观的节点数。但是对于流传的消息没有特别的管控,无法辨别其中的虚假信息,并且只关注与最终的一致性,不关心消息的顺序性。而Pow算法则完全专注于尽可能地解决”拜占庭将军”问题,防止消息的篡改。它可以不计代价地去要求各个节点参与竞选,以付出巨大算力为代价保证平台的安全性。
比特币的应用中,使用Pow算法确定竞争者的记账权,尽可能地解决”拜占庭将军”问题,再将可信的结果由传播速度极强,节点数目量大的Gossip协议去进行传输,最终达成全网一致,可谓很好地利用这两大算法的特点,将二者优劣互补并巧妙地用于区块链领域,这一点令人非常赞叹!