从了解到弃坑-分布式共识机制

从了解到弃坑---分布式共识机制 :)

共识机制整理

说到区块链,共识机制一定是绕不开的话题。区块链解决了在不可信环境下传输可信数据的难题, 而共识机制解决了分布式网络的一致性问题,也就是网络中所有节点就某个提案(Proposal)或某一状态达成一致共识。

同样的分布式共识问题,区块链与传统的分布式问题有何不同?

传统分布式解决的问题:节点数量的增加和减少,以及节点失效故障宕机等问题; 节点之间网络通信可能存在干扰甚至阻断,运行速度也存在差异。传统分布式系统节点是在自己控制范围内的,针对这些问题,目前已经有了 Paxos 和 Raft 等共识算法能够很好的解决传统分布式系统领域一致性问题。

在区块链网络中,如比特币网络,节点不仅存在失效问题,还可能作恶,即节点会故意发送错误数据。从而引入了拜占庭将军问题,很长一段时间这个问题都是无解的,直到中本聪发明了比特币,巧妙地引入经济学激励机制从非计算机的角度天才般地给出了全新的解决方案。这就是POW工作证明机制。

面整理目前常见的共识算法:

POW(Proof Of Work), BTC在用

工作量证明,矿工在处理交易数据的同时不断进行哈希计算,直到得到一个前23位为0的哈希值即为nonce,这个过程就是在解决一个有一定难度但是可行的计算问题,但是验证答案的过程对于其他节点而言是非常容易地,也就是一个不容易解答但是容易验证的问题;

这种问题通常需要消耗一定量的计算力,矿工通过算力比拼竞争区块记账权和代币奖励。只要奖励与工作量达到平衡,矿工几乎没有作恶的必要,因为老实 POW算法能够使分布式系统达到拜占庭容错,是一种简单粗暴消耗资源但是能较大程度保证系统去中心化(不考虑矿池算力集中的问题),POW算法目前的确认时间较长,且没有最终一致性。

POS(Proof Of Stake)

POW有自己的不足一面,随着ASIC芯片的发展,计算工作已经部分脱离的中本聪的初衷设计了, 从而产生了权益证明法; 权益证明法引入了新的变量来衡量当初仅仅用工作量来判定的表达式,除了消弱ASIC的作用,也意欲加速共识速度。

基本思想是让网络中拥有越多权益的节点有机会在更短时间内做更多的决定,因为权益持有人更倾向于维护网络利益且害怕作恶后被惩罚。

PoS的实现方式很多,比较典型的是引入“币龄”概念的方式,即用币龄来计算权益,每个代币持有一天记为一个币天,完成一次记账后清空一定的币天。POS算法不需要消耗大量资源,并在一定程度上缩短了确认时间。

DPOS(Delegated Proof Of Stake)

委托权益证明,基于POS发展而来,POS算法对于小股东而言除了能得到股份带来的收益以外几乎很难有什么作为。

DPOS能够让每个节点选出可以代表自己利益的节点参与到记账权的争夺中,即类似于董事会的投票机制,选举出n个记账节点,后续提案由这些被选中的节点轮流处理。

DPoS理论上不要求选出的代表个体本身是权益所有人,看起来更民主,更开放。网络参与者做为选民有机会选出自己的代表,来给自己的利益代言。如果选出的代表不作为(轮到自己记账时不记账),或者作恶,可以把他们踢掉,如有必要进行惩罚(选民们也有可能被惩罚)。总结来说,DPOS机制减少了记账节点的规模,属于若中心化,但同时也大大提高了效率。

DAG(Directed Acycli Graph)

有向无环图,DAG共识算法的诞生是为了解决区块链的效率问题,通过DAG拓扑结构存储交易区块,支持网络中并行打包出块,提高交易容纳量。之后DAG不断演化逐渐形成了 blockless 的发展方向。

从数据结构来看,DAG模式是一种典型的Gossip算法,即本质上为异步通讯,带来的最大的问题是一致性不可控,并且网络传输数据量会随着节点的增加而大幅增加。DAG算法支持交易快速确认,低廉交易手续费,同时也剔除了矿工角色。但是目前来看安全性低于POW等机制,容易形成中心化,例如IOTA依赖validator,字节雪球则需要见证人节点。

PBFT(Practical Byzantine Fault Tolerance)

来自IBM fabric的应用。

实用拜占庭容错算法,基于BFT算法放松了部分约束条件来解决拜占庭问题。这是一种基于消息传递的一致性算法,算法经过三个阶段达成一致性,这些阶段可能因为失败而重复进行。

PBFT算法在保证灵活性和安全性的前提下最大允许 (n-1)/3 的容错性,信息在节点之间互相交换后,各节点列出所有得到的信息最后以大多数的结果作为解决方法。PBFT这种通过投票达成共识的算法可以很好得解决包括分叉的问题同时提升网络效率,但由于PBFT机制要求一个封闭的集群环境,两两节点需要进行通信,因此并不适合公链场景,全网通信量也是吃不消的,事实上超过100个节点,拜占庭容错算法已经不适用了。

所以,PBFT算法非常适用于联盟链或者私有链等中小规模环境。并且,POW,POS等算法都无法脱离token的存在,而PBFT并不依赖于此,共识效率高可以应用于高频交易场景。当然了,PBFT缺陷也非常明显,当有1/3或以上记账节点停止工作后,整个系统将无法运转。

DBFT(Delegated BFT)

授权拜占庭容错算法,基于权益选择记账人,然后记账人之间通过拜占庭容错算法达成共识。相比于PBFT,DBFT改良了不少特性:优化的记账节点,记账由多节点协同完成,每个区块都有最终性不会分叉。

当然PBFT的缺点也依然存在,即1/3及以上节点宕机后整个系统无法继续提供服务。

RPCA(Ripple Protocol consensus algorithm)

瑞波共识机制RPCA是一个类似PBFT的共识机制,属于节点投票的共识机制。初始特殊节点形成后,后续接入新节点需要51%原特殊节点同意,因此该机制从一开始就是中心化的。

典型使用: Ripple.

完。。。

共识算法的发展和演化的不同阶段,不仅展示的技术,而且还关联经济学,社会学,博弈论,是门综合的研究,共识算法的完善之路更加漫漫。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180702G1GJG200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券