主页 > imtoken钱包官网客服 > 【深度】区块链共识机制解析——论PoW、PoS、DPos、DAG的优缺点

【深度】区块链共识机制解析——论PoW、PoS、DPos、DAG的优缺点

imtoken钱包官网客服 2023-03-24 06:31:15

狗狗币是下一个比特币_莱特币和比特币是通用货币吗_比特币共识机制是什么

莱特币和比特币是通用货币吗_狗狗币是下一个比特币_比特币共识机制是什么

全文:6743字

预计阅读时间 17 分钟

近期,随着区块链技术在社区的呼声越来越高,业界开始从技术角度全面解读区块链。

作为最早一批区块链技术的实现,传统的比特币和以太坊在共识机制、存储机制、智能合约机制、跨链通信机制等方面并没有非常严格的设计。数据量无限增长(目前只有几百GB,性能瓶颈严重,几乎不可能达到数百TB),吞吐量极其有限,无法适应通用分布式数据存储或通用结算系统的要求。

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

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

从产品功能来看,目前的区块链产品与数据库存在巨大差距。 尤其是在业界存在了几十年的关系型数据库,其主要核心功能包括增、删、改、查,而主要结构包括SQL解析、日志记录、数据管理、索引管理等几个模块。

大数据技术兴起后,业界开始使用PC服务器取代传统的小型机。 为了避免服务器断电导致数据页损坏,分布式数据库或存储一般采用三副本冗余存储数据。

虽然从功能上看,目前的区块链技术只是数据库的一个小子集,但其一系列的设计机制与传统数据库的核心理念非常相似。 例如,从其传输和存储数据结构来看,区块链的链式结构来源于传统数据库的交易日志。 任何一个数据库DBA都知道,数据库的事务日志本质上是一个不可更改的链式结构比特币共识机制是什么,事务中的每条操作记录都会有一个后向指针指向事务中的前一条记录。 因此,区块链的链式结构本质上是脱胎于数据库交易日志,同时加入区块间的反向哈希值作为指针,引入默克尔树结构进行数据快速校验。 因此,我们可以放心地假设区块链的链式结构相当于存储系统中数据库的事务日志。 本质上,对数据库的任何操作也是不可变的,但目前的数据库大多没有对外暴露事务日志分析工具,只保存每条记录的最终状态。

莱特币和比特币是通用货币吗_狗狗币是下一个比特币_比特币共识机制是什么

(图1:数据库架构,黄色部分代表也包含在区块链中的组件)

比特币共识机制是什么_莱特币和比特币是通用货币吗_狗狗币是下一个比特币

1.1 一致性原则比较

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

比特币共识机制是什么_狗狗币是下一个比特币_莱特币和比特币是通用货币吗

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

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

狗狗币是下一个比特币_比特币共识机制是什么_莱特币和比特币是通用货币吗

(图 3:区块链节点相互对等)

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

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

莱特币和比特币是通用货币吗_狗狗币是下一个比特币_比特币共识机制是什么

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

狗狗币是下一个比特币_比特币共识机制是什么_莱特币和比特币是通用货币吗

1.2 共识算法

由于区块链系统中不存在被检查点永久确认的节点,但是每个参与的节点都有机会被选举担任这个角色,所以当每个节点都可以进行读写操作时,整个区块链系统就是功能上相当于不支持事务机制的多活数据库。 以及采用哪种算法来选择出块节点(PoW和PoS之争),哪些节点在接收数据块时应该进行验证(PoS和DPoS之争),以及节点之间的数据如何传播(DAG和PoS之链结构之争) ,以及如何保证一笔交易被大多数参与节点接受(PBFT、Paxos、RAFT以及各种分叉方案等算法之争,Hyperledger 1.0甚至直接使用中央Kafka进行排序也是醉了),这就是问题所在区块链共识算法需要回答。 不同的解决方案限制了区块链的一致性、性能、吞吐量和可靠性。

1.2.1 挖矿

挖矿是比特币的一个术语,其本质是多个节点通过PoW算法选举出一个一致性校验节点。 业界关于PoW的文章和分析已经不计其数,笔者在此不再赘述。 事实上,从数据管理的角度来看,PoW 是一种极其低效的暴力机制。 通过不断生成随机数并对其进行哈希处理,并通过网络预先广播的规则(复杂性),每个参与节点自我证明自己有资格成为检查点。

与分布式数据库的Paxos或RAFT算法相比,每个参与节点都默认有资格成为主节点。 当原主节点无法连接时,通过最新交易号或其他原则相互投票选举新的主节点。 但由于竞争节点过多,区块链作为一个多活数据库,有数万甚至数十万个副本节点,一方面继续使用Raft或Paxos算法,复杂度过高,另一方面无法解决拜占庭问题,所以比特币采用了PoW机制,通过某种大家都认可的机制,让每个参与的节点先判断自己是否满足要求(即生成随机数后,它会自行散列并验证它)。 当节点自身认为自己满足条件时,将之前生成的随机数和打包后的日志(数据块)广播给集群中的其他节点,从而大大降低了节点间相互投票所需的复杂度。

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

因此,如果将挖矿的概念引申开来,无论是PoS、PoW还是DPoS算法,节点之间竞争成为检查点的过程就是挖矿过程。

1.2.2 PoW和PoS的选择

PoW 是一种极其粗糙和原始的选举算法,但在防止恶意攻击方面却非常有效。 该算法类似于计算机内核中的多线程自旋锁。 自旋锁的原理是通过线程自己判断一个内存地址的状态,直到状态设置为空闲,然后使用CPU原子操作对其进行重置。 将其设置为锁定状态,实现与其他线程的互斥。 这种机制与 PoW 非常相似。

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

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

狗狗币是下一个比特币_莱特币和比特币是通用货币吗_比特币共识机制是什么

狗狗币是下一个比特币_比特币共识机制是什么_莱特币和比特币是通用货币吗

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

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

1.2.3 PoS和DPoS的选择

类似于Paxos和Raft,参与集群的节点越多,效率越慢。 对于典型的分布式数据库,使用单副本的效率可能是三副本的两倍,三副本的效率是七副本的两到三倍。 因此,为了满足足够的吞吐量,在使用 PoS 进行选举时,需要不在数千个节点之间进行投票,而是在有限的设定范围内进行投票验证。 这就是 DPoS 的核心原理。

DPoS 给出了一种思路,成千上万的 PoS 节点会通过一定的机制(比如持有的代币数量)选举出若干(奇数个)节点比特币共识机制是什么,并在这些节点之间进行投票(在某些实现中,甚至会进行轮询)这些节点之间的令牌环以进一步减少投票开销)来生成每个检查点(块生成)节点,而不必在网络中的所有节点之间进行选择。

这种机制可以大大提高选举的效率。 几十个节点至上百个节点之间的一致性投票一般可以在秒级内完成并达成共识,所以DPoS机制可以将checkpoint(交易确认时间)提高到秒级,通过减少投票节点数量或者使用token振铃机制甚至可以缩短到毫秒级。

狗狗币是下一个比特币_莱特币和比特币是通用货币吗_比特币共识机制是什么

(图 6:PoS 与 DPoS)

但是,DPoS 的性能无法无限提升。 在一个完美的软件实现中,其性能和吞吐量在物理上受到节点间通信的网络带宽的限制。 一般来说,公网环境下两个节点之间的带宽上下行都保持在5MB/s(50M带宽)就已经很好了,但大多数情况下还远远达不到这个值。 而如果每条交易日志需要100字节,由于网络既要广播交易又要广播日志,网络带宽消耗会成倍增加,所以双节点单链最大吞吐量不超过每秒25000(5MB/100字节) /2=25000),假设集群中节点较多,需要根据其使用的P2P同步机制,按比例降低最大吞吐量。 如果需要进一步改进,则需要对链进行拆分(类似于数据库分片的概念),这个话题将在后面的章节中详细讨论。

1.2.4 DAG和链结构的选择

比特币共识机制是什么_狗狗币是下一个比特币_莱特币和比特币是通用货币吗

DAG与链式结构的本质区别在于异步通信和同步通信。 在上一篇文章中已经讨论过,链式结构的本质相当于数据库事务日志,区块操作是检查点操作,因此链式结构系统可以看作是一种周期性同步检查点的数据库事务同步机制.

而DAG则通过异步处理交易操作来增加网络吞吐量,使用谣言传播算法在节点之间发送操作日志,并使用一定的机制(IOTA每次验证前两笔交易,并计算一个PoW来表示权重)为操作分配权重。

与同步运行的链式结构相比,DAG结构和任何异步机制一样,可以提高吞吐量(真的吗?后面会讲到),但问题是无法有效预测交易时间和周期的确认。

然而,IOTA架构对于DAG的实现机制会带来几个额外的问题:

以随机的方式验证历史交易时,没有任何顺序规则,在极端情况下,有可能某些交易在没有其他节点验证的情况下永远不会被确认;

为了跟踪每笔交易与之前交易之间的关系,需要随时检索和访问整个 DAG 图。 在大型系统中,其交易图的溯源会非常复杂,几乎不可能全部存储在内存中进行实时更新。 而如果将这些数据保存在磁盘上,实时刷新每个Tangle的权重会造成大量的随机I/O(或许部署大量SSD可以解决),造成很大的性能问题;

由于每笔交易都是通过谣言传播的方式广播到网络中的其他节点,随着网络中节点数量的增加(IOTA结构中可能有数百亿个设备节点,而不是链式结构中的数万个)全账本节点),全网通信量将成倍增长。 因此,IOTA号称其异步机制可以极大地提升网络流量,却忽略了系统需要在网络中传播的数据量远超链式结构,那么它是否依然能够在具有需要仔细评估大量节点;

IOTA声称每个设备节点既是验证节点又是交易发起节点,这对连接到IOTA的设备的硬件处理能力要求很高。 一般来说,智能电表、高速公路线圈等设备都是使用LoRa等LPWAN协议进行通信,设备本身基本不具备任何计算能力。 因此,IOTA试图将这些复杂的逻辑写入芯片,通过软硬件一体化(称为三元设备)与其他设备集成。

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

作者认为,DAG 的异步数据分发思想完全可以与链式结构相辅相成。 在一些完全可以接受部分数据丢失或最终一致性的非支付业务中,使用有限(避免网络风暴)谣言传播算法可以有效提高吞吐量,但不能满足实时性和高业务场景的要求一致性。

1.3 结论

莱特币和比特币是通用货币吗_狗狗币是下一个比特币_比特币共识机制是什么

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

比特币共识机制是什么_莱特币和比特币是通用货币吗_狗狗币是下一个比特币

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

PoW采用了一种简单粗暴但极其有效的方式,通过节点在广播前先自我证明自己的资格的方式,大大降低了网络间的通信压力,但带来的问题是自我证明对计算资源的消耗很大.

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

DPoS, as a deformation of PoS, reduces the network pressure by reducing the number of elected nodes. 这是一个典型的分而治之的策略:所有的节点都分为领导者和追随者,只有领导者达成共识后才会通知追随者。 该机制可以在不增加计算资源的情况下有效降低网络压力,在优秀的软件实现中将具有很强的应用价值。

DAG 使用异步机制来替代链式检查点的同步策略。 在一个优秀的软件实现中,如果能够有效控制网络风暴带来的带宽需求的指数级增长,可以说是一种在最终一致性场景下具有良好应用前景的算法。 . 但DAG的局限性也极为明显,其系统无法用于需要同步操作或一致性要求高的操作(如支付结算等)。

结尾

往期精彩文章

火球财经(ihuoqiu.com)专注于区块链和数字资产行业,集最新资讯、实时行情、技术探索、数据分析、行业科普、社区交流等一站式、全方位、综合性行业服务平台。

欢迎大家积极投稿,有区块链项目和相关消息也可以联系我们。

投稿邮箱:article@ihuoqiu.com