区块链共识机制分析—论PoW,PoS,DPos和DAG的优缺点

当前位置:首页 > 币圈百科 > 区块链共识机制分析—论PoW,PoS,DPos和DAG的优缺点

区块链共识机制分析—论PoW,PoS,DPos和DAG的优缺点

2022-11-20币圈百科606

最近,随着区块链技术在社区中的声音越来越大,业界开始全方位地从技术角度解读区块链。作为第一批区块链技术的实现,传统的比特币和以太坊在共识机制、存储机制、智能合约机制、跨链通信机制等方面都不是很严格。导致数据库和存储领域的一些共性问题,导致其数据规模无法无限增加(目前只有几百GB导致性能瓶颈严重,几乎不可能达到几百TB),吞吐量极其有限,无法满足通用分布式数据存储或通用结算系统的要求。

blockchain

作为一个十几年的数据库内核行业老手,笔者将从共识、存储、智能合约、多链、快速检索、通用接口等几个维度对区块链技术进行阐述,并与数据库、大数据的分布式计算技术进行横向比较。

区块链的本质是分布式活性数据库。

从产品功能来看,目前的区块链产品与数据库之间存在巨大差距。尤其是对于业界已经存在了几十年的关系数据库,其主要的核心功能包括添加、删除和搜索,而其主要结构包括SQL解析、日志、数据管理和索引管理。

而大数据技术兴起后,行业开始使用PC服务器,而不是传统的小型机。为了避免服务器断电造成的数据页损坏,分布式数据库或存储一般使用三个副本冗余保存数据。

虽然从功能上看,目前的区块链技术只是数据库的一个极小的子集,但其一系列的设计机制与传统数据库的内核概念非常相似。例如,从其传输和存储的数据结构来看,区块链的链式结构来自于传统数据库的事务日志。任何一个数据库的DBA都知道,数据库的事务日志本质上是一个不可改变的链式结构,事务中的每一条操作记录都会有一个反向指针指向事务中的前一条记录。因此,区块链的链式结构本质上脱胎于数据库事务日志。同时加入块间反向哈希值作为指针,引入Merkel树结构进行快速数据验证。因此,我们可以放心地认为,区块链的链式结构相当于存储系统中数据库的事务日志。本质上,数据库的任何操作都是不可篡改的,只不过目前大部分数据库都不暴露事务日志的分析工具,只保存每条记录的最终状态。

1

(图1:数据库架构,黄色部分代表相同区块链的形成)

1.1一致性原则的比较

在分布式数据库中,广泛使用PAXOS或RAFT算法来协商数据冗余的一致性。一般来说,在分布式数据库系统中,每个数据切片至少由三个冗余备份节点组成,正常运行时数据库的每个切片中会有一个主节点和两个从节点。主节点负责读写数据,从节点负责只读操作。当主节点写数据时,其事务日志会实时同步到其他从节点进行回放,从而达到主从节点数据一致的目的。

2

(图2:数据库主、从节点的同步)

那么,通过对比区块链的系统,可以认为数据库领域的主节点,即日志生成节点,每次都有生成事务日志的功能,完全等同于区块链每次释放一个块的矿工的功能。唯一不同的是,数据库在每次操作过程中实时向从节点广播日志,并在事务提交时进行一致性判断。区块链采用检查点模式。每个节点接收自己的事务请求,并将该请求广播给其他节点。每个块出操作生成一个检查点,检查点中包含的信息是块出节点写入块中的所有记录。在这些记录被发送到其他节点之后,每个节点验证数据块中的记录,并将它们永久地写入其自己的事务日志(即块文件)。

3

(图3:区块链节点彼此相等)

然而,区块链和数据库在一致性选择上最大的区别在于哪个节点成为检查点发起的节点。由于数据库采用主从机制,主节点始终是日志的发起节点,而从节点始终是日志的回放和验证节点。然而,区块链不同。它使用了一些算法(如PoW、PoS、DPoS等。)定期在多个参与节点中选择一个节点进行检查点确认。这也是区块链自称安全的一个原因:在全网的大量节点中,攻击者无法确定下一个检查点会确认谁(当然,即使攻击者确定了下一个出站节点,仍然有一系列数字签名机制保证交易不会被伪造或篡改)。

因此,我们可以有把握地认为,从检查点节点选择领域来看,传统的确定主节点生成事务日志的分布式数据库机制是区块链共识机制的简单实现。也就是说,如果区块链共识机制每次都选择同一个节点作为块节点,其机制基本等同于分布式数据库的主从复制原理(数据库按照事务提交进行验证,区块链没有事务的概念,所以按照数据块进行验证)。

4

(图4:提交回滚操作作为数据库的检查点,生成的块作为区块链的检查点)

1.2共识算法

由于区块链系统中没有被永久检查为检查点的节点,但是每个参与节点都有机会被选举为该角色,所以以及使用哪种算法来选择块节点(PoW和PoS之争) 哪些节点在接收数据块时应该验证(PoS和dpo之争),节点之间的数据如何传输(DAG和链结构之争),如何保证一个事务被大多数参与节点接受(PBFT、Paxos、RAFT等算法和各种分叉解之争),Hyperledger 1.0甚至直接使用。 不同的解决方案限制了区块链的一致性、性能、吞吐量和可靠性。

1.2.1挖掘

挖掘是来自比特币的一种说法,其本质在于多个节点通过PoW算法选举出一致性检查节点。业内关于PoW的解释文章数不胜数,在此不再赘述。实际上,从数据管理的角度来看,PoW是一种效率极低的暴力机制。通过生成随机数并不断哈希,通过网络提前广播规则(复杂度),每个参与节点都可以证明自己是否有资格做检查点。

与分布式数据库的Paxos或RAFT算法相比,每个参与节点默认有资格成为主节点。当原主节点无法连接时,可以通过最新的交易号或其他原则相互投票,从而选举出新的主节点。然而,由于竞争节点太多,区块链作为一个拥有数万甚至数十万复制节点的多主动数据库,继续采用Raft或Paxos算法,一方面过于复杂,另一方面无法解决拜占庭问题。所以比特币采用PoW机制,通过一个公认的机制,由各个参与节点先自行判断是否符合要求(即自行哈希验证随机数)。当节点自己认为自己合格时,就把之前生成的随机数和打包的日志(数据块)广播给集群中的其他节点,这样就大大降低了节点间相互投票的复杂度。

通过循环产生随机数并由节点自我验证的过程,即PoW中所谓的“挖掘”阶段。

因此,如果把挖掘的概念扩展一下,无论是在PoS、PoW还是DPoS算法中,节点间的竞争变成检查点的过程就是挖掘过程。

1 . 2 . 2 POW和PoS的选择

PoW是一种极其粗糙和原始的选举算法,但在防止恶意攻击方面极其有效。 这个算法类似于计算机内核中多线程协作的自旋锁。自旋锁的原理在于由线程自身不断循环判断一个内存地址的状态,直到状态设置为空闲,然后由CPU的原子操作将其设置为锁定状态,这样就可以与其他线程互斥。这种机制非常类似于动力。

而PoS更倾向于类似Raft投票机制。它通过固定的时间协调所有节点参与投票,根据一些规则判断每个节点的权重(比如持有的令牌数量,或者提供的存储空间大小等。),最后选择权重最高的节点作为检查点节点。但在数据库一致性选择的Raft算法中,一般以最新的事务数作为权重,在多个节点中优先选择包含最新事务记录的节点作为主节点。

所以可以看出,PoW和PoS最大的区别在于,PoW在算法复杂度足够高的前提下,基本上不需要太多的节点相互通信和确认,对代码实现的要求极低。PoS对多个节点间的一致性验证和防伪要求较高,但在很大程度上,遵循传统的一致性选举思想,可以得到一定程度的优化。

5

(图5:PoW和PoS进程对比)

但是PoW和自旋锁一样有缺点,需要极高的计算资源。错误应用的自旋锁很容易消耗计算机中的所有CPU资源。同样,PoW目前被人们诟病的最大问题就是资源消耗。PoS在这方面没有问题。

1 . 2 . 3 POS和DPoS的选择

类似于Paxos和Raft,参与集群的节点越多,效率越慢。在典型的分布式数据库中,使用单个副本的效率可能是三个副本的两倍,三个副本的效率是七个副本的两到三倍。因此,为了满足足够的吞吐量,PoS在选举中一定不能在成千上万的节点中投票,而应该在有限的集合中进行投票验证。这是残疾人组织的核心原则。

DPoS给出一个思路。数以千计的PoS节点,通过一定的机制(如持有的令牌数),选举若干(奇数)个节点,在这些节点中进行投票(在某些实现中,甚至通过令牌环在这些节点中进行轮询,以进一步降低投票开销),从而检查出每个检查点(块外)节点,而不是在网络的所有节点中进行选择。

这种机制可以大大提高选举效率。一般来说,几十个或者几百个节点投票,几秒钟就能达成共识。因此,DPoS机制可以将检查点(事务确认时间)提高到秒级,甚至可以通过减少投票节点数量或采用令牌环机制将其降低到毫秒级。

6

(图6:POS vs dpo)

然而,dpo的性能不可能无限提高。在完美的软件实现中,其性能和吞吐量受到节点间通信的蓑衣网小编2022网络带宽的物理限制。总的来说,公网环境下两个节点之间的带宽无论是上行还是下行都能维持在5MB/s(50 MB带宽)已经是相当优秀的了,大部分情况下离这个值还很远。但是,如果每个事务日志需要100字节,由于网络需要同时广播事务和日志,网络的带宽消耗加倍,因此两个节点的单链中的最大吞吐量不超过每秒25000(5MB/100字节/2=25000)。假设集群中有更多的节点,最大吞吐量需要根据其使用的P2P同步机制按比例减少。如果需要进一步提升,就需要链接(类似于数据库碎片的概念),这将在后面的章节中详细讨论。

1.2.4 DAG和链结构的选择

DAG和链结构的本质区别在于异步和同步通信。前文已经讨论过,链结构的本质等同于数据库事务日志,而块操作是检查点操作,所以链结构系统可以看作是一种周期性同步检查点的数据库事务同步机制。 另一方面,

DAG通过异步处理事务操作,通过谣言传播算法在节点之间发送操作日志,蓑衣网小编2022并通过某种机制(IOTA每次验证前两个事务并计算PoW代表权重)为操作分配权重,从而提高网络吞吐量。

与同步操作的链式结构相比,DAG结构和任何异步机制一样,可以带来吞吐量的提升(真的?如下文所述),但可能存在的问题是无法有效预测事务确认的时间和周期,无法最终确认操作之间的顺序并在多个节点间保持一致。

由于DAG在市场上的实现相对较新,暂时还存在一些理论上未被突破的限制,包括:

当历史交易在没有任何顺序规则的情况下以随机的方式进行验证时,有可能在极端情况下会产生一些交易,没有任何其他节点进行验证,因此永远不会被确认。这个问题在IOTA中是通过多次重试来解决的,但是是否有更好的一次性确认机制来更有效的解决这个问题,值得探讨。为了跟踪每个事务与之前事务之间的关系,需要随时搜索和访问整个DAG图。在大规模系统中,其交易图谱的追溯会非常复杂,几乎不可能全部保存在内存中进行实时更新。但如果这些数据都存储在磁盘上,实时刷新每个纠结的权重会造成大量的随机I/O(可能通过部署大量SSD来解决)。所以在工程实现上很难优化。由于DAG操作记录的写入顺序没有“block”或“log”等检查点机制,每个节点都是独立的,无法保证全局顺序。在这种情况下,可能会出现不等序操作不一致的问题(例如,对于同一条记录,转账(加减)和计息(乘)操作同时在两个不同的节点进行,两个节点得到的操作顺序不同,导致账户余额最终结果不一致)。

现在一些其他的数据结构(比如hash树)都是从DAG衍生出来的。基本上在存储方式上有一些具体的优化,但是整体上和DAG带来的问题是一致的。

作者认为DAG的异步数据分布的思想完全可以补充链式结构。在最终理论完善之前,应谨慎选择其应用场景,避免过早直接应用于广义范式场景。

1.3结论

在区块链的一致性机制中,其本质与分布式数据库的一致性算法有很多相似之处。拜占庭问题的引入只是在算法和选举节点数量上对网络结构做了一些调整,并没有从本质上改变分布式系统中一致选举的机制。

1

(图7:区块链共识机制对比)

PoW采用了一种简单粗暴但极其有效的方式,通过节点先认证自身资格再广播的方式,大大降低了网络间的通信压力。但由此带来的问题是,自认证的计算资源消耗极大。

PoS采用类似于传统分布式一致性验证的机制,以令牌数量(或存储容量等指标)作为权重依据,使用某种分布式算法选举出各个检查点节点。这种机制的优点是没有消耗计算资源的自认证过程,但问题是每次选举时大量节点对网络有很大压力。

DPoS作为PoS的变种,是典型的通过减少选举节点数量来减轻网络压力的分治策略:所有节点分为领导者和追随者,领导者达成共识后才会通知追随者。该机制能够在不增加计算资源的情况下有效降低网络压力,在优秀的软件实现中具有很强的应用价值。

DAG使用异步机制来代替链检查点的同步策略,但是由于其核心没有标准的一致性确认机制(即账本或日志系统),并且无法全局 但是,从长远来看,DAG是一个非常新颖和有前途的机制,它为传统数据管理领域的思考打开了一扇新的大门。[x]
区块链共识机制分析—论PoW,PoS,DPos和DAG的优缺点 | 分享给朋友: