首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

共识机制的历史,分类,以及优缺点

阅读时间:10分钟

共识机制简介

关注区块链项目的朋友们大多都听说过共识机制,也可能知道共识机制是区块链网络用来达成交易确认共识的协议。其实,共识机制的产生远远早于区块链,而其设计之初也并不是只为了解决区块链上的问题。

在1988年,Lynch, Dwork和Stockmeyer就提出并证明了在部分同步的系统中共识机制的可能性。随后在1989年,第一个共识机制Paxos在1989年被提出,随后又有诸如Cheap Paxos, Fast Paxos, Raft, Chandra-Toueg, Ark, PBFT, RBFT, 之后随着加密货币的兴起,新的共识机制被提出,如POW, POS, Proof of Space, Proof of Weight, PoET, dPOS, DAG, Plenum等等。

这些不同的共识机制解决了不同的问题,不能说某一种共识机制就一定好于其他的,有的共识机制简单易懂,但速度太慢太耗资源;有的速度快,但扩展性差;有的扩展性强,速度也快,但却不够安全。总之,在不同的应用场景下,我们应该选择最合适的共识机制。

共识机制的定义是“The process of agreeing on one results among a group of participants”, 意思就是使得多个参与者同意一个结果的过程就叫做共识机制。

我们用一个“杀猪问题”来举例说明,假设李家村有3户人,分别是李二蛋,李铁锤,李三娃。今年春节李家村要杀一头猪过年,大家得商量一下杀哪家的猪,杀了猪怎么分,怎么补偿被杀猪的人家。那这个过程就叫做李家村的共识机制。

那有人会说那这事儿不简单吗,把大伙聚拢,看看谁家猪长得最好就杀哪家,没啥问题啊。确实,如果李家村大伙儿住的近,各个心地善良、从不撒谎的情况下,那杀猪问题很容易就解决了。但如果说李二蛋住村西,李铁锤住村东,李三娃住村北,也没有好的交通工具,也没有手机网络,那就不太容易达成共识了。再进一步说,如果说村子还来了一户人家叫李大狗,这家人虽然也养了猪但是不想杀自家的猪,所以在沟通的时候会撒谎,那这共识就太不容易达成了。

共识机制分类

我们将共识算法通过共识的实现分为两个大类,一类是“抽彩票中奖”共识算法,代表算法有POW, PoET, 这类算法好处在于特别能scale,因为达到共识只需要等待一个通过算法“抽中彩票”的节点出现就好了。同时这类算法也有fork的问题,也就是说如果多个节点同时抽中了“彩票”,会导致网络需要花时间来resolve fork,也就导致了用户需要等待确认,交易时间过长等问题。

另一类是“投票表决”共识算法,代表算法有PBFT, dPOS, Paxos等,这类算法的好处在于交易能被快速确认,但大多数算法因为需要网络中节点互相交换信息,会导致速度不够,扩展性不强等问题。

除了根据共识的实现来分类,我们还可以通过对共识机制是否是拜占庭容错来进行分类。像最早的Paxos、Raft和以这两种机制为核心的Kafka等, 都不是拜占庭容错。而像PBFT,dPOS, Tendermint等,都是拜占庭容错。

拜占庭容错

简单来说,一个计算机系统里除了能够容忍出现节点直接崩溃的问题,还能容忍一切其他问题(如被黑客入侵,故意不响应,电压波动导致信息错误等等),那我们就称这个系统为拜占庭容错系统。这里我们引用维基百科来解释一下什么是拜占庭容错问题。

“一组拜占庭将军分别各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进攻或撤离两种。因为部分军队进攻部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。因为各位将军分处城市不同方向,他们只能通过信使互相联系。在投票过程中每位将军都将自己投票给进攻还是撤退的信息通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票和其他所有将军送来的信息就可以知道共同的投票结果而决定行动策略。”

“系统的问题在于,将军中可能出现叛徒,他们不仅可能向较为糟糕的策略投票,还可能选择性地发送投票信息。假设有9位将军投票,其中1名叛徒。8名忠诚的将军中出现了4人投进攻,4人投撤离的情况。这时候叛徒可能故意给4名投进攻的将领送信表示投票进攻,而给4名投撤离的将领送信表示投撤离。这样一来在4名投进攻的将领看来,投票结果是5人投进攻,从而发起进攻;而在4名投撤离的将军看来则是5人投撤离。这样各支军队的一致协同就遭到了破坏。

由于将军之间需要通过信使通讯,叛变将军可能通过伪造信件来以其他将军的身份发送假投票。而即使在保证所有将军忠诚的情况下,也不能排除信使被敌人截杀,甚至被敌人间谍替换等情况。因此很难通过保证人员可靠性及通讯可靠性来解决问题。

假始那些忠诚(或是没有出错)的将军仍然能通过多数决定来决定他们的战略,便称达到了拜占庭容错。在此,票都会有一个预设值,若讯息(票)没有被收到,则使用此预设值来投票。

上述的故事对映到计算机系统里,将军便成了计算机,而信差就是通讯系统。虽然上述的问题涉及了电子化的决策支援与资讯安全,却没办法单纯的用密码学与数字签名来解决。因为不正常的电压仍可能影响整个加密过程,这不是密码学与数字签名算法在解决的问题。因此计算机就有可能将错误的结果送出去,亦可能导致错误的决策。”

了解了什么是拜占庭问题,我们今天从几个比较有名的共识机制入手,用我们之前的“杀猪问题”来了解一下各个共识机制的分类以及各自的优缺点,分别是:Proof of Work, Delegated Proof of Stake, PBFT。

Proof of Work

分类:“抽彩票中奖类”

应用:Bitcoin 及其衍生币

原理:李家村人根据去年哪天杀的猪,杀的猪有多重,杀了之后怎么分等信息,拿出算盘开始算一个符合特殊要求的良辰吉日,谁先算出来,今年杀猪谁就说了算,同时,也会分到一笔帮忙算日子的奖金。也就是说,算出良辰吉日的人有了这一年的“杀猪权”。

优点:去中心化,网络安全。

缺点: 随着李家村人口壮大,大家都买了高级计算器,李二蛋发现每次算出来一个良辰吉日的时候,李铁锤也算出来了符合要求的良辰吉日,这样李家村就有多个人来决定谁杀猪,这就导致了“分叉”,也就是村里人意见不合了。为了解决意见不合的问题,李二蛋只有把他的猪先留着,等着下一次杀猪的时候,如果这一次是李三娃算出了一个良辰吉日,而且李三娃同意前一年的“杀猪权”是李二蛋的,那么这时候全村人才一致同意前一年的“杀猪权”是李二蛋的。也就是说,在POW中,随着全网算力的提升,矿工需要长时间的等待才能确认自己挖出来的区块得到了全网的认可,而用户也需要长时间的等待才能得到交易的确认。

Delegated Proof of Stake

分类: “投票表决类”

应用: EOS, Bitshares, Steemit

原理: 李家村人口大增,现在有1000户人家了,村里人算了一笔账,与其让大家都去买计算器来算良辰吉日,不如把钱省下来,成立一个10人村委会,让村委会的人决定怎么杀猪。村委会怎么选,还是得民主投票选举,谁家猪多,那票权也多,猪少,那票权也少。于是李家村选出来10个得票最多的人作为村委会代表,他们轮流拥有“杀猪权”。当然,如果其中有代表不诚实,杀了猪全分给自己的话,那肯定会被村民们投票取消委员资格,并且失去了在村民中的声望。

优点:因为村委会永远就10个人,所以村子人再多也可以快速的决定杀猪权。

缺点:DPOS依赖村委会代表之间要有非常顺畅的沟通(synchronous network),而这一点不一定能永远满足,特别在新的代表顶替旧代表的时候。另外,村委会代表在不诚实的时候除了声望的损失并没有实际的损失,降低了不诚实的成本。同时,在选举村委会的时候,DPOS要求村民们对代表们的能力和人品有清晰的了解,这一点也是很难达到的。再者,如果村子的规模扩大到了一定程度,大家对于选举村委会的热情是无法保障的,因为此时每一票能起到的选举作用会越来越小,导致选举权小的村民要么对于选举不关心,要么将选举权交给别人(交易所)来实行,也就会导致部分中心化的问题。

PBFT (Practical Byzantine Fault Tolerant)

分类: “投票表决类”

应用: Tendermint Consensus, U-network, Hyperledger Indy

原理: 李家村人觉得,与其投票给别人来帮我们做决定,还不如自己来做这个决定。于是,李家村人自己搞了一套无线电技术,每一年通过无线电对话让村里人都轮流拥有“杀猪权”。举个例子,按照规定(deterministic weighted round-robin),李二蛋家今年有“杀猪权”,该来决定怎么杀猪了,于是李二蛋开始在无线电里广播了:“今年我提议,李三娃家杀猪!” 广播之后,李二蛋开始等待大家的回应,如果有2/3 的人都回复“收到”,那说明村里大多数人都知道了这件事,李二蛋于是可以再次广播“李三娃,你可以杀猪了”,于是,收到两条信息以及2/3 回复的李三娃就把猪给杀了,村里的所有人也都在自己的账本上记了一笔。如果说李二蛋的提议没有收到2/3 的回复,那么说明要么无线电被干扰了,要么说明大家不太同意让李三娃家杀猪,于是根据规定,这一次李铁锤拥有了杀猪权,可以广播他的提议了。

优点:完全去中心化,能够容忍各种各样的信息错误,保证账本的一致性。

PBFT 流程示意图

共识机制只是一部分

虽然我们用比较通俗的语言描述了共识机制的运作方式,但实际上要完成一个共识机制是一个比较复杂的过程,首先需要结合实际应用场景来判断最适合的共识机制,其次在共识机制的实现上也需要诸多考量和trade off。比如同样是拜占庭容错算法,PBFT和DBFT就有很大的不同,一个没有delegate的概念而另外一个通过选出delegate来实现scalability上的提升。

同时需要指出的是,因为区块链到如今也还处在一个非常早期的阶段,各个团队都在寻找以及尝试最好的技术、应用解决方案,所以我们不乏看到各个团队在宣传各自的底层技术的时候,有着过于夸大所用技术的覆盖范围之嫌。同时,共识机制在区块链技术中虽然是相当重要的一环,还有其他的部分也占有相当的比重,如智能合约、隐私控制等等。

原味区块认为,区块链的结局一定不会以一个、甚至一种技术为主导,而应该是将每种合适的区块链技术用在提升效率、安全的社会各行各业里。而在这样的过程中,对于组织乃至个人通过各种手段而获得了在新时代里更多的资源分配权,我们不应该感到意外。

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券