fabric1.4.1新特性 — raft排序服务

1. RAFT排序服务介绍

在fabric1.4.1的版本中,提供了基于raft共识的raft排序服务。raft的模型可以容忍奔溃,如果有节点故障掉线可以正常运行。前提是要有大多数存活,也就是要保证1/2以上的节点个数正常运行。raft共识是“主从模型”,主节点通过动态选举决定,从节点是主节点的复制。raft排序服务比kafka排序服务易于设置和管理。并且raft的设计允许不同的组织贡献节点来共同组成排序服务。

2. RAFT排序和kafka排序的对比

从提供服务的视角来看,基于raft和kafka的排序服务是类似的,他们都是基于CFT(crash fault tolerant)模型的排序服务,并且都使用了主从节点的设置。如果你是应用开发者或者智能合约开发者,你不会注意到他们之间的却别。但是,有一些主要的区别值得探讨,尤其是你需要管理排序服务。

  1. kafka和zookeeper的设计不适用于大型网络。它们的设计是CFT模型,但局限于运行的比较紧密的主机上。也就是说,需要有一个组织专门运行kafka集群。鉴于此,当有多个组织使用基于kafka排序服务的时候,其实没有实现区中心化,因为所有的节点连接的都是由一个组织单独控制的kafka集群。如果使用raft,每个组织可以贡献排序节点,共同组成排序服务,可以更好的区中心化。
  2. raft是原生支持的,而kafka需要经过复杂的步骤部署,并且需要单独学习成本。而且kafka和zookeeper的支持相关的issue要通过apache来处理,而不是hyperledger fabric。raft的实现是包含在fabric社区的,开发支持更加便利。
  3. 系统架构不同
    3.1 kafka共识
    在kafka共识模式中,orderer与orderer之间不会互相直接建立连接,而是与kafka连接。这种共识模式中,依赖于外部的kafka集群系统和zookeeper集群系统。每个orderer会把自己的交易发送给kafka集群,交易在kafka对应的topic中排序后,kafka把排序后的交易推送给orderer节点。Orderer节点收到交易后对交易打包,然后发给peer。


    kafka.jpg

    3.2 etcdraft共识

    在etcdraft共识模式中,orderer与orderer之间直接建立连接,不依赖外部系统。在orderer节点中,会创建raft的协程来处理与其他orderer的通信。
    etcd.jpg

3. RAFT排序服务的目的

raft排序是fabric实现拜占庭容错排序服务的第一步,如我们所见,开发raft排序服务的决定也是基于此的。

4. 配置RAFT共识

raft节点之间通过使用TLS认证身份,如果一个攻击者想要伪造raft节点,就必须要获得一个有效的证书和对应的私钥。所以,没有一个有效的TLS证书,是不可能运行raft节点的。
要使用raft共识,需要修改两个地方

  1. 本地配置:用来控制节点的特性,例如TLS配置,备份个数和文件存储。
  2. 通道配置:用来定义raft集群的成员关系,以及raft协议相关的参数,例如心跳间隔、leader节点超时时间等。

需要注意的是,每个channel有属于它自己的raft集群。因此,在chennel中要指定raft节点,指定的方式是把raft节点的tls证书配置到channel的配置文件中。在系统通道和应用通道中的配置中,每个排序以consenter的形式列出来。下面是configtx.yaml中关于raft节点配置的章节。

   Consenters:
        - Host: raft0.example.com
          Port: 7050
          ClientTLSCert: path/to/ClientTLSCert0
          ServerTLSCert: path/to/ServerTLSCert0
        - Host: raft1.example.com
          Port: 7050
          ClientTLSCert: path/to/ClientTLSCert1
          ServerTLSCert: path/to/ServerTLSCert1
        - Host: raft2.example.com
          Port: 7050
          ClientTLSCert: path/to/ClientTLSCert2
          ServerTLSCert: path/to/ServerTLSCert2

本地配置

orderer.yaml配置文件中有两个关于raft排序配置的章节,分别问cluster和Consensus

  1. cluster,主要用来决定tls通信配置
  • ClientCertificate, ClientPrivateKey : 客户端证书和私钥(general.tls.{privateKey, certificate})。
  • ListenPort:对外提供服务的端口 (general.listenPort)。
  • ListenAddress : 本地监听的地址。
  • ServerCertificate, ServerPrivateKey : 服务端的证书和私钥。
  • SendBufferSize : 发送区缓存大小。
    注意:ListenPort, ListenAddress, ServerCertificate, ServerPrivateKey这几个配置项,只能同时设置或者同时不设置。
  1. cluster
  • WALDir : raft的WAL(Write Ahead Logs)存放位置,每个通道需要有以它自己的channel ID为前缀命名的子目录。
  • SnapDir : raft的快照存放位置,每个通道需要有以它自己的channel ID为前缀命名的子目录。

通道配置

当节点启动后,如果想要更改配通道置并且使配置生效,只有重启节点服务。有一个例外是SnapshotIntervalSize配置项,它可以在运行时动态调整。

  • TickInterval : 两次Node.Tick调用的时间间隔。
  • ElectionTick : 如果follower在当前阶段,经过ElectionTick次的时间后,没有从主节点收到任何消息,follower将会成为候选节点并发起选举。
  • HeartbeatTick : 主节点在HeartbeatTick间隔内回发送心跳信息给从节点,来保持它主节点的身份。
  • ElectionTick必须大于HeartbeatTick
  • MaxInflightBlocks : 在乐观复制阶段限制正在进行的附加块的最大数量。
  • SnapshotIntervalSize:每个快照的大小。

(后续实践后,见更新具体使用步骤,敬请关注)

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

推荐阅读更多精彩内容