区块链共识算法简述

区块链是一个去中心化的分布式系统,没有了中心机构,系统所面临的第一个问题是一致性的保障。一致性是指对于系统中多个服务节点,给定一些列操作,在使用相同的协议(共识算法)情况下,试图使得它们对处理结果达成某种程度的一致。

举个例子:如果有6个节点,由其中某个节点发起一笔交易(或者说提案 Proposal),其他5个节点是否能达成一致?认为这笔交易是有效的?

并且,在分布式系统中,由于引入了多个节点,所以系统中会出现各种非常复杂的情况:节点失效、节点故障或者宕机,网络延迟、恶意黑客攻击等等问题。

而共识算法就是用来保证分布式系统一致性的方法

一般情况下,我们把节点的故障(失效、不响应)称为"非拜占庭错误",而恶意响应(黑客攻击、双重支付)的情况称为“拜占庭将军错误”

这里,再简单说下拜占庭将军问题的起源:

拜占庭是古代东罗马帝国的首都,由于地域宽广,守卫边境的多个将军需要通过信使来传递消息,以保证行动一致(达成共识)。但是有些将军中是隐藏的叛徒,他们会用虚假的消息垃圾扰乱忠诚将军们的计划。大家不知道叛徒是谁,那么,忠诚的将军们有什么办法达成一致的的行动而不被虚假信息干扰呢?

解决办法就是,在理想情况下让忠诚的将军们达成一致,不过要是叛军的数量跟忠诚的将军数量一样的情况下,这个问题就无解。

其实,这个故事并不是历史上真实的事件,而是莱斯利·兰波特(Leslie Lamport)为了研究分布式一致性问题而创造的,但由于十分形象,所以常常被引用。

既然创造了一个问题,当然也会有对应的解决办法,解决拜占庭将军问题的算法就是Byzantine Fault Tolerant(BFT)共识算法。

常见的共识算法有:Paxos、Raft、PBFT、PoW(比特币使用)、Pos(以太坊使用)等

对于不需要货币体系的许可链或者私有链来说,绝对信任的节点,以及高效的需求上述共识算法并不能提供,因此对于这样的区块链,传统的一致性算法称为首选:

1、BPFT 拜占庭容错

PBFT算法的核心理论是n>=3f+1

n是系统中的总节点数,f是允许出现故障的节点数。换句话说,如果这个系统允许出现f个故障,那么这个系统必须包括n个节点,才能解决故障,大概可以允许约1/3的错误。

一致性的确保主要分为五个概念:client、replica、primary、back、view,四个阶段:预准备(pre-prepare)、准备(prepare)和确认(commit)

用一个例子来说明就是:

  • 总司令给军长下命令向前行军500公里;
  • 军长将消息(不只有命令)传递给所有师长;
  • 1号2号师长又把消息传给其他师长,3号师长处于叛逃状态;
  • 军长再次询问各位师长是否同意执行命令。
  • 所有军官(包括军长和师长)向总司令汇报结果

2、Paxos 是一种基于消息传递且具有高度容错特性的一致性算法

Paxos中有三类角色Proposer、Acceptor、Learner,主要交互过程在Proposer和Acceptor之间,

Proposer:提出一个提案,等待大家批准为结案

Acceptor:负责对提案进行投票

Learner:被告知结案结果,并与之统一,不参与投票过程

基本过程是,proposer提出提案,先争取大多数acceptor的支持,超过一半支持时,则发送结案结果给所有人进行确认。

3、Raft 是Paxos算法的的一种简化实现

包括三种角色:Learder、candidate、follower

  • Leader选举:每个candidate随机经过一定时间都会提出选举方案,最近阶段中得票最多者被选为leader
  • 同步log:learder会找到系统中log最新纪录,并强制所有的follower来刷新到这个纪录

以上问题其实都只能解决非拜占庭将军容错的一致性问题,不能够应对分布式网络中出现的极端情况,因为内部节点并不会故意发送错误消息,但是对于有货币体系的分布式网络来说(比特币、以太坊等),需要更多的保证

4、Pow(Proof-of-Work)工作量证明是一个用于阻止拒绝服务攻击和类似垃圾邮件等服务错误问题的协议

5、PoS(Proof-of-Stake) 权益证明

6、DPOS(Delegated Proof-of-Stake)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352