Fabric笔记-Orderer

第五讲 Orderer解析 (IBM 开放技术*微讲堂 超级账本Fabric v1.4 LTS系列课程)

大纲:

  1. 原子广播(全排序)
  2. channels
  3. solo/kafka/raft
  4. permission in Orderer

Fabric的Execute-Order-Validate共识模型,即先执行再排序最后验证的过程。

一个交易的生命周期:

  1. client先想peer提交一个议案;
  2. peer执行智能合约,调用数据执行操作,peer将操作结果发送给orderer;
  3. orderer将收到的所有的议案排序,打包成区块,并发送给Peer;
  4. Peer打开每个区块,并进行验证,若验证通过,则写入本地账本,更新世界状态,最后想client发送event告知交易被提交到账本中。

Atomic Broadcast(Total Order):

一堆交易–>orderers:将交易排序,打包成块–>各个账本写入全局有序的区块

全局排序要求:全局唯一、容错(cft、bft)、网络分区(分区出去的节点的限制)、强一致性、bft(fabric v1.4 的orderer是cft,并不代表fabric是cft)

Block Cutting(打包规则):

  1. BatchSize:

    1. MaxMessageCount
    2. AbsoluteMaxBytes
      限制单个交易大小,超过该限制,会被拒绝掉
    3. PreferredMaxBytes

    综合可能超过PreferredMaxBytes,假设PreferredMaxBytes=200b,前9个交易大小为100b,第10个交易大小为200b,这时会把第10个交易一块打包,这样就会大于PreferredMaxBytes。

  2. BatchTimeout

    1. Timeout

配置交易,不遵循上述打包规则,每个配置交易都会形成一个块,因为配置需要尽快生效。

Channels:
Fabric笔记-Orderer

Orderer启动需要Genesis block,Genesis block规定了System Channel的配置。

System Channel是管理链,当要创建一个用户链的时候,是要向System Channel发送一个创建用户链的交易,System Channel会将发送来的用户链的配置信息等作为用户链的Genesis,放在系统中。

Join peers操作,就是将User Channel Genesis从System Channel拿下来,然后送给peer,让peer指导去哪找到orderer节点,配置信息中包括了Orderer的锚节点(即endpoints)、涉及的哪些组织。

配置交易,不遵循上述打包规则,每个配置交易都会形成一个块,因为配置需要尽快生效。

Consensus:

  1. solo
    只有一个节点,只能用于实验,只要完成序列化就行,在Fabric集成测试中,大多用solo写的。
  2. kafka
    kfk+zk完成了排序,其内部也是raft排序。全局时钟,通过TTC划分切割打包成块。
  3. raft
    base on etcd/raft library;
    No kfk/zk dependency;
    Necessary commnunication layer built for future use,加入了点对点的通讯层;
    each channel runs on its own raft instance;
    A channel can run on a subset of orderers;
    All orderers should belong to system channel,否则新创的channel服务从system channel中拿到;
    Nodes are identified by TLS cert,在配置channel的时候,定义一个集合,告知该链中有哪些节点,这个定义用tls cert进行一一映射的。
    v1.4.2 Support migrating from kafka to Raft

Fabric笔记-Orderer

kfk是对Tx进行共识,但在Raft里是对块进行共识,即拿到Tx先由raft leader打包成块,然后再发送给follow进行共识,最后存放到本地账本中。
Fabric笔记-Orderer

Permission in Orderer:

  1. ImplicitMeta Policy:ANY,ALL,MAJORITY
    其本身不决定,而是结合了其他策略进行

  2. Signature Policy:NOutOf(AND,OR)

    Fabric笔记-Orderer

详见第五讲 Orderer解析 (IBM 开放技术*微讲堂 超级账本Fabric v1.4 LTS系列课程)