区块链是伴随比特币诞生的,是比特币的基础技术架构。可以将区块链理解为一个基于互联网的去中心化记账系统。

类似比特币这样的去中心化数字货币系统,要求在没有中心节点的情况下保证各个诚实节点记账的一致性,就需要区块链来完成。

共识机制是什么

区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何分布式场景下达成一致性的问题。小编认为区块链的伟大之处就是它的共识机制在去中心化的思想上解决了节点间互相信任的问题。

今天用一个非常形象的描述,方便大家理解共识机制的定义。 
这里写图片描述

所以区块链技术的核心是在没有中心控制的情况下,在互相没有信任基础的个体之间就交易的合法性等达成共识的共识机制。 

区块链为什么需要共识机制

分布式系统中,多个主机通过异步通信方式组成网络集群。在这样的一个异步系统中,需要主机之间进行状态复制,以保证每个主机达成一致的状态共识。 

异步系统中,可能出现无法通信的故障主机,而主机的性能可能下降,网络可能拥塞,这些可能导致错误信息在系统内传播。


因此需要在默认不可靠的异步网络中定义容错协议,以确保各主机达成安全可靠的状态共识。 
这里写图片描述

利用区块链构造基于互联网的去中心化账本,需要解决的首要问题是如何实现不同账本节点上的账本数据的一致性和正确性。


这就需要借鉴已有的在分布式系统中实现状态共识的算法,确定网络中选择记账节点的机制,以及如何保障账本数据在全网中形成正确、一致的共识。 

  • 共识机制的目标:

    一致性:所有诚实节点所保存的区块链前缀部分完全相同。

    有效性:由诚实节点发布的消息终将被所有其他诚实节点记录到自己的区块链中。


- 如何评价一个共识机制的优劣:

安全性:能否有效防止二次支付,私自挖矿

扩展性:当系统成员和待确认交易数量增加时,所带来的系统负载和网络通信量的变化,通常以网络吞吐量来衡量

性能效率:每秒可以处理的交易数量

资源消耗:达成共识过程中,所要消耗的CPU、内存等计算资源12345678


现在主要的共识机制有工作量证明、权益证明、拜占庭一致性协议三种。

工作量证明

工作量证明机制,即节点通过“多的工作量”来换取信任。每个节点在提出某个阶段的待定区块之前,必须完成达到指定工作量的工作;不仅如此,如果某个节点收到了多个待定区块,那么哪个区块的链更长,它就验证哪个区块,因为更长的链意味着链所包含的工作量更多。 

大家可能会有一个问题,为什么我们要相信工作量多的人呢?还是因为这种机制的特性之一:伪随机性。它保证某个节点优先完成工作量证明的概率只取决于它占有的计算资源(CPU、内存等)占全世界所有节点的计算资源总和的比例。保证了相对的公平性(通俗上说,就是拼人数,好人多就行。拿现实世界打比方,如果你想搞破坏,必须要收买/征服全世界一半以上人口,或者自己一个人比全世界其他所有人加一起都有钱)。


- 不足:

  1. 严重的效率问题

  2. 过多强算力节点联合,可能导致安全问题(目前计算资源逐步趋向中心化,与区块链初衷相悖)

  3. 资源消耗过大


权益证明

由于工作量证明的过大资源消耗与资源浪费问题,人们越来越关注权益证明机制。

假设网络同步性较高,系统以轮为单位运行。在每一轮的开始,节点验证自己是否可通过权益证明被选为代表,只有代表可以提出新的区块。代表在收到的最长的有效区块链后提出新的待定区块,并将自己生成的新的区块链广播出去,等待确认。下一轮开始时,重新选取代表,对上一轮的结果进行确认。诚实的代表会在最长的有效区块链后面继续工作。如此循环,共同维护区块链。

  • 不足:

    1. 如果网络同步性较差,则系统很可能形成分叉,破坏一致性。

    2. 代表节点操控一切


拜占庭一致协议

这一机制的主要目的是,解决如何在有错误节点的网络中使所有正确节点对某个输入值达成一致。该机制资源消耗少,效率高,一致性强(不易产生分叉)。 

以实用拜占庭容错协议为例, 协议要求在有3f+1 个节点的分布式系统中, 失效节点数量不超过f个。实用拜占庭容错协议的每一轮包括3个阶段: 预准备阶段、准备阶段和确认阶段。在预准备阶段,由主节点发布包含待验证记录的预准备消息。接收到预准备消息后,每一个节点进人准备阶段。


在准备阶段,主节点向所有节点发送包含待验证记录的准备消息,每一个节点验证其正确性,将正确记录保存下来并发送给其他节点。直到某一个节点接收到2f个不冋节点发送的与预准备阶段接收的记录一致的正确记录,则该节点向其他节点广播确认消息,系统进人确认阶段。在确认阶段,直到每个诚实节点接收到2f+1个确认消息,协议终止,各节点对该记录达成一致。 

  • 不足:

    1. 安全性差(容错率仅为1/3,其他两种均为1/2)

    2. 扩展性差(该协议的效率取决于节点数量,不适用于节点数量过大的区块链系统)

    3. 对主节点有依赖

这里写图片描述

区块链三加一总结

在区块链网络中,由于应用场景的不同,所设计的目标各异,不同的区块链系统采用了不同的共识算法。一般来说,在私有链和联盟链情况下,对一致性、正确性有很强的要求。

而在公有链情况下,对一致性和正确性通常没法做到百分之百,通常采用最终一致性(Eventual Consistency)的共识算法。



分享到: