Hyperledger Fabric 共识原理和源码分析

基于Fabric 1.0.0以后版本,目前fabric提供的共识算法有三种:solo,kafka和PBFT

  • solo模式
    用于开发测试的单点共识,不用介绍什么。
  • kafka模式
    其是一种支持多通道分区的集群时序服务,可以容忍部分节点失效(crash),但不能容忍恶意节点,其基于zookeeper进行Paxos算法选举,支持2f+1节点集群,f代表失效节点个数。即kafka可以容忍少于半数的共识节点失效。
  • PBFT算法
    其是以前版本的主流共识算法,也就是拜占庭共识算法。拜占庭算法支持(3f+1)的节点集群,f代表恶意节点的数量。恶意节点可能会做一些恶意伪造时序或者返回相反的错误的结果等,注意这里与上面失效的区别。

目前,Fabric的整体共识(Kafka)分为两个步骤:

  • Step 1:信任
    这部分很多文章也讲过了。就是向endorser节点发送背书请求,节点针对身份、签名和读写集的验证后,发现没问题,就视为正确的信息。
    这部分在整个出块过程中,担任了针对tx发起人的信任或者合法性进行审核的作用,也就是为下一步(无法确认信息有效性)做了一个筛选,或者说信任处理。所以,第二步骤,可以默认获得的输入都是安全有效的(谁知道呢?)。
  • Step 2:时序
    这一部分就是我们所说的kafka共识,而其主要也是唯一的参与者就是orderer集群。orderer的核心作用就是将全局的tx(通过背书请求后的)作为输入,在集群内形成统一的、唯一的、确定的、经过排序的tx输出。
    这里我们提到的tx,无论是以读写集还是tx本身存在,统一看做是tx。
    这部分做的事情有几个核心的要点:
  1. 不能容忍作恶。也就是说,针对恶意的数据(或者说input)没有能力进行识别和处理。它能处理什么?看第二点
  2. 基于Zookeeper进行paxos算法。paxos算法保证在orderer集群中,最终能够形成一个有效的输出结果,能够容忍一定的失效节点。在换句话说,能够容忍的错误就是某一个(一些)orderer节点不能用了,无论是无法处理请求、宕机,还是掉电。超过半数orderer集群的信息就没办法保证一致性。

这之后就是我瞎说的,请勿相信,发上来就是想大家一起讨论。
今天偶然看了一眼CAP,其中有一句话:

这篇论文证明了两个非常有意思的理论,首先是在异步的网络模型中,所有的节点由于没有时钟仅仅能根据接收到的消息作出判断,这时完全不能同时保证一致性、可用性和分区容错性,每一个系统只能在这三种特性中选择两种。

说的是CAP论文中的观点。其中没有时钟这前提条件非常重要。也就是如果有全局时钟,每个节点的时钟误差绝对值都不超过在消息传递的时间最小单位。那么我们针对信息打上时间戳,每个节点什么时候接受,都能够针对这些消息进行排序,然后处理,并最终得到一个有效的结果。我们只需要关注网络内最新的消息的sender、content就可以。

拉回fabric,我们可以发现,其实orderer在的目的就是为所有的tx输入,提供了一个类似时序机制的模块。虽然client提交的tx,peer发起的endorsement都是并发的,无序的。但是,经过orderer的整合之后,会将其整理成一个有序的输出。这就是orderer的核心价值。peer在需要的时候从orderer中pull到的需要打包的tx序列(读写集)就是(maybe)确认后的执行的结果。然后在进行验证写入账本并在网络上传播。
那么,多个orderer和单个orderer的区别就是备份,提高系统可用性。防止单点宕机无法提供服务的情况。同时orderer节点的分离式部署以及维护是否能够在将来构想更多的共识算法的可能性也未可知。
不过,这么感觉这一步分离以及tx的两段式打包,感觉还是有那么点意思。

我一直对fabric提出的共识可插拔表示怀疑,特别想把这块搞清楚。不过这就得看源码了。进一步的源码分析,稍后再添加。
(未完待续)

参考链接

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

推荐阅读更多精彩内容