美文网首页区块链大学区块链研习社
第十七讲 张治谈“区块链的诞生及运转”:未来的联盟链或将与公链相

第十七讲 张治谈“区块链的诞生及运转”:未来的联盟链或将与公链相

作者: 55e841da187d | 来源:发表于2018-10-24 20:07 被阅读0次

大家晚上好! 

区块链项目分为公链项目和联盟链项目,今天主要来讲他们之间的关系和差异。

公链采用的共识算法大多是POW和POS,采用某种事物的证明的手段来做共识。但是联盟链通常会采用其他的共识算法,比如拜占庭容错算法,又比如Zab和超级账本(Fabric)所使用基于Paxos算法改进的容错算法(Raft),那么这些共识算法与POW、POS有什么差别?

1-联盟链采用的共识机制的原理-

01 拜占庭容错算法(如PBFT)要解决的问题

PBFT来源于拜占庭将军的问题。拜占庭的将军们攻城时需要互相通信,但是他们并不知道他们之中会不会有叛徒将军乱发消息或不按照指令执行,也不知道信使在通信途中会不会遭遇不测,比如走丢了或是被俘虏了,导致通信失效。这里面就会有两个问题:

节点失效

通信手段失效

在这种情况下就要想办法来让将军们获得的信息达成一致。 

而在这种分布式的网络中,要想达成信息一致,有一个很著名的FLP定理。

02 FLP定理

在网络可靠时,如果允许某一个节点是可以失效的(下线或宕机),那么在异步的网络(节点不一定同时做一件事情)中,任何算法都无法保证正确得到结果,我们也就无法找到一个完美的方法让网络中的所有节点数据保持一致,换句话说,就是没有办法达成共识。这个结论是被数学所证明的,也是非常让人失望的。

但是在运作中,实际上是可以降低一些条件的。比如不要求所有节点的数据一致,而是大多数节点数据保持一致,也被认为是在系统中所有节点达成了共识。在这种情况下,就有可能提出一些好的算法,让节点通过一定的通信步骤来保证数据是一致的。

03 CAP定理

CAP定理说明了在分布式系统中的另外一个问题。在网络中,有三点无法同时做到:

一致性。即数据一致更新,所有数据变动都是同步的;

可用性。即有好的响应性能,随时可访问;

分区容忍性。即可靠性,容忍分区即意味着整体网络可以在某个时间被断开。

CAP定理:任何分布式系统只能满足以上两点,而没有办法三者兼顾。

04 节点达成共识需弱化部分要求

拜占庭将军的问题就体现出分布式系统在维护数据一致性、可用性和网络的可靠性上会面临非常复杂的情况。实际的系统实践中必须弱化一些属性或特点来让达成共识目的。

比如可以弱化一致性,即不强调所有节点数据一致,但对外的实时数据是可用的。

或是弱化可用性,即对外在某些时间点无法访问数据,来保证网络上的数据是同步一致的。

或者弱化分区容忍性,即保证网络是一直可靠的,则可以同时达成数据一致性和对外的可用性。 

这样业界就推出几种算法,分别弱化一些条件后使数据保持一致性和对外的可用性。这就包括拜占庭容错算法,以及非拜占庭容错算法,如基于Paxos算法改进的Raft、Zab共识算法。

-联盟链共识机制与公链共识机制的差别-

拜占庭容错算法(PBFT)、Raft、Zab与公链采用的POW、POS共识机制有什么差别?

01 Raft、Zab与PBFT之间的差别

首先来看基于Paxos共识算法的两种典型算法:Raft和Zab,与拜占庭算法(PBFT)之间的差别。

①共识节点性质及数量要求不同

他们都是想保持区块链上记录数据的一致性。

但Raft的节点可以是无效的,可以宕机、不在线,但是绝不会发送虚假数据,即节点不会作恶,Raft是在这种假设前提下的一种共识算法。Zab算法与Raft类似,也是强调节点中不会有作恶的节点。

而在拜占庭算法上,除了节点可以失效之外,还允许它是一个坏节点,允许发送虚假消息。这是拜占庭容错算法与Raft、Zab之间的差别。

基于条件上的不同,Raft和Zab只要失效节点的数量小于50%,即正常的节点数量是节点总量的50%+1个,就能够达成共识,让数据同步一致。

而拜占庭容错算法是允许节点作恶的,那么就要求正常的节点数量至少是节点总数的⅔+1个,也就是坏的节点总数不能超过节点总数的⅓,在这种情况下系统中的节点才能达成共识,使所有节点数据能通过算法达成一致。

②共识过程不同

Raft和Zab因为强调了节点不能作恶,失效节点不超过50%即可,其效率就会比较高。实际的做法是分两个阶段来提交需要做共识的数据:第一阶段先选一个Leader,之后的阶段只由Leader来广播数据,其他节点复制广播数据即可。

换言之,这个系统中有一个节点是特殊的,是作为Leader的节点。当有超过半数的节点都连接不上它,这时所有节点就需要重新选一个Leader节点,当然这个过程是有一定算法指引的,Raft和Zab选Leader节点的机制也是不一样的。一旦选定了Leader节点,后面的同步过程就会非常简单,这是他们有效的地方。

拜占庭算法与Raft和Zab的差别在于,其他节点是可以拒绝接收Leader节点发来的数据的,需要判断数据是否正确,因为在拜占庭容错算法中是允许存在作恶节点的。拜占庭容错算法较之Raft和Zab算法多了一个步骤,也多了一种选择,因此也更加复杂。

这些算法本身是可以做到让系统整体保持数据一致性的,他们的问题在于,当参与共识的节点数量较多时,性能就会下降。而且Raft和Zab要求没有作恶的节点,这个要求比较高。

02 PBFT、Raft、Zab与POW、POS的差别

①广播提案数据的节点数量不同

实际中公链采用的POW、POS共识机制相对于联盟链采用的算法的不同之处是采用其他的途径弱化了一些对节点或者数据一致性的要求。比如在广播提案这个步骤上,在最原始的PBFT算法中,对外广播提案数据的节点在同一时刻可能不止一个,但POW、POS中每个时间点只允许有一个节点,即抢到出块权的节点来广播要做共识的数据(也就是区块),这样就降低了PBFT算法中的复杂性。

②节点数量对性能影响不同

不同于PBFT、Raft、Zab的性能受节点数量所限,POW、POS的好处是对参与共识的节点数量没有任何限制,全网参与共识的节点可以非常多,并且可以随时进、随时出。

③出块确认时间不同

PBFT、Raft、Zab算法中,数据经过几个阶段的确认以后即可在全网达成共识,写入区块链中,这个特性叫做终局性,即一旦区块生成,就会被确认,不会再改变这个结果。

但是POW、POS共识中产生的区块需要经过一段时间才能够确认这个块是最终有效的。有两方面原因:一方面存在某一时间点两个节点都产生了一个合法块的情况,需要通过延续几个块来确定最长链,需以最长链为准;另一方面是为了防止双花。

这也就导致块写出后不能立刻确认是最终的一个块,这个特点也造成公链不太适合一些业务场景,特别是金融业务场景,因为金融业务是事务性的,很多数据无论成功还是失败必须要一次性确认,如果数据块已经产生了,但过一会儿又被声明是无效的,这在金融业务中是很难被接受的。

而这也是为什么很多金融业务所采用的区块链是基于像拜占庭容错算法、Raft共识机制的原因,就是因为通过这些算法产生区块后,区块就确定无疑了。这是它们的好处。

-联盟链与公链并存发展-

实际上目前一些联盟链的发展思维已经突破了传统思维。传统思维上,联盟链和公链是两种不同的链,应该采用不同的技术,在理解上具有局限性。

联盟链和公链的说法来源于许可链和非许可链。加入联盟链的节点是需要认证的,必须要有机构颁发证书,允许节点加入,而公链的所有节点都是可以自愿加入、离开的,这是他们的差别,即强调了加入方式的不同,有控制和无控制的。

但是在其他方面并没有严格的规定,比如节点在地域上的分布,实际上现有的大部分联盟链都限制了加盟节点所在的区域,节点地域分布较为接近,甚至很多项目的节点可能都部署在同一个云环境中,与公链节点分布地域广阔大不相同。那么建立联盟链时,实际上也可以不用限制参与节点所在的区域,甚至可以用一些技术手段降低节点加入和离开时的认证程序的复杂度,来把联盟链所能包容的节点范围扩大。这样联盟链对外看来更像是一个公链,只是参与节点数量并没有公链那么多。 

此外在联盟链建立初期阶段,可以采用公链一样的共识算法,比如POW来扩充节点,提高网络初期的可靠性,当发展到一定阶段时,加入的联盟节点已经充分稳定了,这时为了更有效的达成共识,再采用拜占庭容错算法、Raft或者Zab共识算法,或采用不同共识算法相结合的一些算法都是可以的,这些都会大大拓拓展联盟链使用的领域。

比如做医药或是做数据溯源等的一些项目,可能需要非常多的节点,或是分布在全球不同地域的节点来参与,那么这种联盟链如果使用原有的技术部署,就会遇到一些困难,这时利用一些公链的技术是必要的,也是现在的一种新的思维,强调将公链与联盟链的结合,实现一种新式的联盟链。 

今天分享了联盟链的一些最新动向以及联盟链所采用的经典的共识算法,更多深入的技术细节感兴趣的朋友可以在课下去了解。今天我们就讲到这儿。

彩蛋

1、转发文章到朋友圈,送50平台积分(不许设置权限、删除,截图发群秘,未进群的小伙伴请先加群秘入群)

2、本篇文章内留言,超过50个赞,送500平台积分(留言限高质量提问、精彩观点分享、参考资料推荐)

以上两项活动时间截止本周三20:00。

3、Q&A、大神考核环节:

小伙伴可在授课公众号文章内留言提问。

DRC精选问题,周三晚8点直播解惑,并开展线上互动Q&A,随后将迎来大神考核,根据课程内容出三道题,每个社区群全部答对的最快的前三名小伙伴将平分600平台积分。​

往期精彩回顾:

张治谈“区块链的诞生及运转”第一讲

张治谈“区块链的诞生及运转”第二讲

张治谈“区块链的诞生及运转”第三讲

张治谈“区块链的诞生及运转”第四讲

张治谈“区块链的诞生及运转”第五讲

张治谈“区块链的诞生及运转”第六讲

张治谈“区块链的诞生及运转”第七讲

张治谈“区块链的诞生及运转”第八讲

张治谈“区块链的诞生及运转”第九讲

张治谈“区块链的诞生及运转”第十讲

张治谈“区块链的诞生及运转”第十一讲

张治谈“区块链的诞生及运转”第十二讲

张治谈“区块链的诞生及运转”第十三讲

张治谈“区块链的诞生及运转”第十四讲

张治谈“区块链的诞生及运转”第十五讲

张治谈“区块链的诞生及运转”第十六讲

相关文章

网友评论

    本文标题:第十七讲 张治谈“区块链的诞生及运转”:未来的联盟链或将与公链相

    本文链接:https://www.haomeiwen.com/subject/ksaxtqtx.html