区块链共识机制的思考

有人说人工智能是生产力的变革,让机器思考更多,干更多的活,让人少做点;那么区块链是一种解放生产关系的技术,区块链是在互联网的基础上发展而来,互联网让信息的传播突破了空间和时间的维度,信息变成一种宝贵的资源,而区块链更进一步,解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题。
什么是共识?
如果把人类社会理解成为一个超大规模的分布式系统,地球上的每个人都是独一无二的分布式节点,没有两个人是完全一样的,有句话叫人以类聚,物以群分。一个社会不同阶层、不同利益的人所寻求的共同认识、价值、理想,我的理解是一群人的认同感,形成认同感的比如文化,信仰,社会制度,可以理解为人类社会的共识协议。
机器如何形成共识?
在分布式系统中,一致性(Consistency,早期也叫 Agreement)是指对于系统中的多个服务节点,给定一系列操作,在协议(往往通过某种共识算法)保障下,试图使得它们对处理结果达成某种程度的一致。
理想场景的分布式系统的一致性的需要满足三点约束:
1,可终止性(Termination):一致的结果在有限时间内能完成;
2,共识性(Consensus):不同节点最终完成决策的结果应该相同;
3,合法性(Validity):决策的结果必须是其它进程提出的提案
在实际的计算机集群系统,存在如下的问题:
1,节点之间的网络通讯是不可靠的,节点处理事务的能力不同,网络节点数据的吞吐量有差异,包括任意延迟和内容故障;
2,节点的处理可能是错误的,节点自身随时可能宕机;
3,当异步处理能力达到高度一致时,新节点的加入很困难;
4,可能会出现作恶节点出现,干扰其他节点的运行。
【区块链共识机制的思考】所以绝对理想的一致性,分布式场景下达成完全一致性是不可能的。除非不发生任何故障,所有节点之间的通信无需任何时间,这个时候其实就等价于一台机器了。
科学家告诉你理论上是不可能的;工程则告诉你,具体工程实现可以牺牲一部分代价来换取分布式场景的一致性,可以变成可能。
所以基于区块链设计的各种共识机制都可以看作在适当的时间空间牺牲一部分代价换取适应于当时场景的一致性,可以实现灵活的区块链系统。要保障系统满足不同程度的一致性,共识算法的出现从不同角度提供了不同的解决方案。共识算法解决的是对某个提案(Proposal),大家达成一致意见的过程。实践中,一致性的结果往往还需要客户端的特殊支持,通过访问足够多个服务节点来验证确保获取共识后结果。
问题挑战?
实际上,如果分布式系统中各个节点都能保证以十分强大的性能(瞬间响应、高吞吐)无故障的运行,则实现共识过程并不复杂,简单通过多过程投票即可。现实中这样“完美”的系统并不存在,如响应请求往往存在时延、网络会发生中断、节点会发生故障、甚至存在恶意节点故意要破坏系统。
分布式系统中有无作恶节点分为拜占庭容错和非拜占庭容错机制。一般地,把故障(不响应)的情况称为“非拜占庭错误”,恶意响应的情况称为“拜占庭错误”(对应节点为拜占庭节点)。
针对非拜占庭错误的情况,一般包括 Paxos、Raft 及其变种。
对于要能容忍拜占庭错误的情况,一般包括 PBFT 系列、PoW 系列算法等。从概率角度,PBFT 系列算法是确定的,一旦达成共识就不可逆转;而 PoW 系列算法则是不确定的,随着时间推移,被推翻的概率越来越小。
POW:Proof of Work,工作量证明
特点:比特币莱特币等货币型区块链(公有链)
一个符合要求的Block Hash由N个前导零构成,零的个数取决于网络的难度值。要得到合理的Block Hash需要经过大量尝试计算,计算时间取决于机器的哈希运算速度。参与挖矿的矿工竞争将前一区块的hash与一个随机的比特串一起来计算出一个hash值,若输出的hash值满足前若干比特为0,即为解出了该难题,当然,并不能得出计算次数的绝对值,因为寻找合理hash是一个概率事件。当节点拥有占全网n%的算力时,该节点即有n/100的概率找到Block Hash。
优点:
1,完全去中心化
2,节点自由进出,容易实现。
3,破坏系统花费的成本巨大
缺点:
1,区块的确认时间难以缩短,并且交易的确认时间需要10-16分钟,不能满足实时性需求
2,新的区块链必须找到一种不同的散列算法,否则就会面临比特币的算力攻击
3,浪费能源;
POS:Proof of Stake,股权证明
特点:POS是根据钱包里面货币的多少以及货币在钱包里存在的天数来合成一个单位(币天)。它根据币天的关系对计算机进行哈希计算降低了难度,降低了计算机的门槛,但是对计算机还是有一定要求的,它把钱包和区块链系统的一致性绑定在一起。谁的钱包里的币天数越大谁拥有记账权的概率就越大。
优点:
1,对节点性能要求低,达成共识时间短(网络环境好的话可实现毫秒级) 缺点。
2,不消耗能源
缺点:
1,没有专业化,拥有权益的参与者未必希望参与记账;
2,容易产生分叉,需要等待多个确认
DPOS:Delegated Proof of Stake,委任权益证明(股份授权证明机制)
特点:比特股(bts),eos是DPoS机制,它的原理是让每一个持有比特股的人进行投票,由此产生N位代表 , 我们可以将其理解为N个超级节点或者矿池,而这N个超级节点彼此的权利是完全相等的。从某种角度来看,DPOS有点像是议会制度或人民代表大会制度。如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。
优点:减少记账节点规模,属于弱中心化,效率提高,可以达到秒级的共识验证
缺点:整个共识机制还是依赖于代币,很多商业应用是不需要代币存在的,牺牲了去中心化的概念,不适合公有链
PBFT:Practical Byzantine Fault Tolerance,实用拜占庭容错算法
最早由 Castro 和 Liskov 在 1999 年提出的 Practical Byzantine Fault Tolerant(PBFT)是第一个得到广泛应用的 BFT 算法。只要系统中有的节点是正常工作的,则可以保证一致性。拜占庭容错能够容纳将近1/3的错误节点误差,IBM创建的Hyperledger就是使用了该算法作为共识算法。这些算法通常以其弹性t作为特征,t表示算法可以应付的错误进程数。拜占庭假设是对现实世界的模型化,由于硬件错误、网络拥塞或断开以及遭到恶意攻击,计算机和网络可能出现不可预料的行为。拜占庭容错协议必须处理这些失效,并且这些协议还要满足所要解决的问题要求的规范。很多经典算法问题只有在n ≥ 3t+1时才有解,如拜占庭将军问题,其中n是系统中进程的总数。
优点:共识效率高,可实现高频交易。
缺点:当系统只剩下33%的节点运行时,系统会停止运行。
DBFT:Delegated BFT,授权拜占庭容错机制
是一种通用的共识机制模块,提出了一种改进的拜占庭容错算法,使其能够适用于区块链系统。
DBFT主要做了以下改进:
1,将C/S架构的请求响应模式,改进为适合P2P网络的对等节点模式;
2,将静态的共识参与节点改进为可动态进入、退出的动态共识参与节点;
3,为共识参与节点的产生设计了一套基于持有权益比例的投票机制,通过投票决定共识参与节点(记账节点);
4,在区块链中引入数字证书,解决了投票中对记账节点真实身份的认证问题;
DBFT机制,是由权益来选出记账人,然后记账人之间通过拜占庭容错算法来达成共识,这种方式的优点是:
1,专业化的记账人;
2,可以容忍任何类型的错误;
3,记账由多人协同完成,每一个区块都有最终性,不会分叉;
4,算法的可靠性有严格的数学证明;
缺点:
1,当有1/3或以上记账人停止工作后,系统将无法提供服务;
2,当有1/3或以上记账人联合作恶,且其它所有的记账人被恰好分割为两个网络孤岛时,恶意记账人可以使系统出现分叉,但是会留下密码学证据;
非拜占庭容错的共识机制即不考虑有恶意节点的情况,人们考虑到1990 年由 Leslie Lamport 提出的 Paxos 共识算法,在工程角度实现了一种最大化保障分布式系统一致性(存在极小的概率无法实现一致)的机制。
Paxos:
特点:Paxos被用于分布式系统中典型的例子就是Zookeeper,他是第一个被证明的共识算法,其原理基于两阶段提交并扩展。
这是一种传统的分布式一致性算法,是一种基于选举领导者的共识机制。领导者节点拥有绝对权限,并允许强监督节点参与,其性能高,资源消耗低。所有节点一般有线下准入机制,但选举过程中不允许有作恶节点,不具备容错性。????
Paxos算法中将节点分为三种类型:proposer:提出一个提案,等待大家批准为结案。往往是客户端担任该角色acceptor:负责对提案进行投票。往往是服务端担任该角色learner:被告知结案结果,并与之统一,不参与投票过程。可能为客户端或服务端基本过程包括 proposer 提出提案,先争取大多数 acceptor 的支持,超过一半支持时,则发送结案结果给所有人进行确认。一个潜在的问题是 proposer 在此过程中出现故障,可以通过超时机制来解决。极为凑巧的情况下,每次新的一轮提案的 proposer 都恰好故障,系统则永远无法达成一致(概率很小)。Paxos 能保证在超过50%的正常节点存在时,系统能达成共识。
Raft:
Raft算法是对Paxos算法的一种简单实现。
它包括三种角色:leader、candiate 和 follower,其基本过程为:Leader 选举:每个 candidate 随机经过一定时间都会提出选举方案,最近阶段中得票最多者被选为 leader同步日志:leader 会找到系统中日志最新的记录,并强制所有的 follower 来刷新到这个记录,这里的日志指的是各种事件的发生记录。
其他:
瑞波共识机制(Ripple Consensus)
瑞波共识算法使一组节点能够基于特殊节点列表形成共识。初始特殊节点列表就像一个俱乐部,要接纳一个新成员,必须由该俱乐部51%的会员投票通过。共识遵循这些核心成员的“51%权利”,外部人员则没有影响力。由于该俱乐部由中心化开始,它将一直是中心化的,而如果它开始腐化,股东们什么也做不了。与比特币及Peercoin一样,瑞波系统将股东们与其投票权隔开,因此,它比其他系统更中心化。
Pool验证池:
基于传统的分布式一致性技术以及数据验证机制,Pool(联营)验证池是目前行业内大范围使用的共识机制。它的优缺点如下:
优点:不需要代币也可以工作,在成熟的分布式一致性算法(Paxos、Raft)的基础上,实现秒级共识验证。
缺点:去中心化程度不如比特币,更适合多方参与的多中心商业模式。
最后:
其实,工程领域中很多问题的解决思路,都在于如何合理地进行取舍,做任何事情都是有代价的,这个一定要深深印在脑子里。世界没有绝对的,如果有人说一定会怎么样,一定要三思。

    推荐阅读