HyperLedger Fabric架构篇

调研了一下HyperLedger Fabric的架构,因为它的官网文档并没有及时更新,所以有的内容参考的还是以前版本的文档。

chaincode(可以用Go,java开发)

Fabric1

Ledger

Fabric2
整个区块结构分为文件系统存储的Block结构和数据库维护的State状态,其中state的存储结构是可以替换的,可选的实现包括各种KV数据库(LevelDB,CouchDB等)

node有三种:

  • client或submitting-client:负责向背书人(endorsers)提交实际的事务调用,并将交易提议广播到订阅服务
  • peer:负责提交交易,维持state,有的peer还担任endorser(审查交易合法性,合法则签名)
  • Ordering-service-node or orderer: 负责通信服务

交易的基本工作流程

  1. client创建一个transaction,并根据endorse policy发送给某些endorser peers
  2. peers模拟transaction,并产生认可签名
  3. client收集到足够的peers对transaction的认可,并交给ordering service,orderer会汇总各client递交过来的transaction交易,排序、打包
  4. orderer将交易打包成区块block,然后通知所有commit peer,各peer各自验证结果,最后将区块block记录到自己的ledger账本中

如以下例子所示:
Fabric8

  1. 客户端向其中1个Peer提交Transaction。注意,这里的Client是真正的客户端。而这里的submiting peer,你可以认为是fabric网络的客户端(对客户端来说,这个submiting peer是服务器)
  2. submiting peer把请求给多个endoser模拟执行,然后从每个endoser收集返回结果。也就是图中的步骤 圆圈2,3。在Fabric里面,把这个“模拟执行”的过程,称为“背书”,endoser。 至所以这么叫,是因为如果模拟执行不通过的话,这个Transaction就直接被拒绝了。模拟执行通过,才有机会进入下面的过程,才有机会被区块链网络接受。 所以,“背书”,通俗点讲,就是“告诉整个区块链网络,这个Transaction被我模拟执行过了,有效的,你们要不也试试看?”
    关键点:
    发给几个endoser取决于你的endose poclicy怎么配置的,你配置成只有1个endoser也可以。 注意这里只是“模拟执行”。endoser并不会把结果直接写到worldState里面。

  3. submitting peer 把这个Transaction + 模拟执行的结果发给Ordering Service。也就是图中的步骤 圆圈 4。
    关键点:因为有很多个Client往不同的submit peer发送请求,所以这个Ordering Service会收到多笔的Transaction。Ordering Service会对这些Transaction进行打包,形成Block。

  4. Ordering Service再把这个Block广播给每个Peer(此时,Peer充当了另外1个角色,不是endorser,而是Committer)。所有Committer接受到这个Block,真正写入:把交易加入区块链,同时更新WorldState,也就是分布式账本(Ledger)
  5. 给Client发送Event,通知其交易已被执行。

构建企业级区块链的要素

Fabric4

逻辑架构

Fabric5
竖着来看,分为3大块:

  1. 最左边的,Memship,就是联盟链特有的身份认证相关的内容。比如组织注册,公钥证书发放,交易签名,验证等等。
  2. 中间1块:区块链的基础东西,和比特币、以太坊类似,BlockChain、Transaction、Ledger(分布式账本)、P2P协议。
  3. 最右边1块:智能合约。在以太坊里面,称为Smart Contract,这里换了个名字,叫做ChainCode而已。

0.6运行时架构与1.0运行时架构:
Fabric6
Fabric7
下面这张图,展示了Fabric运行时的架构是什么样子。Fabric采用Go语言开发,通常运行在Docker容器里面,每1个Node对应1个Docker容器。

  1. 这里的application/SDK,并不是指我们通常的APP的客户端。而是整个Fabric网络的调用端,通常是我们的Web应用服务器。
  2. membership服务,就是上图中的注册登记、身份认证。
  3. peer就是区块链网络中说的物理上的node。peer有2个角色(对应2个模块),1个叫Endorser,1个叫Committer。peer上面存的是Ledger(区块链 + WorldState),存的智能合约ChainCode,然后peer之间、peer和客户端之间,用event通信。
  4. Order-Service 排序服务。

Fabric相对于以太坊,大部分其实很类似(比如peer,peer上面的账本、worldState)。多了2个东西出来,1个是membership(用于注册、身份认证),1个是order service,用于共识算法。

0.6版本和1.0版本运行时架构对比:

  • 分拆Peer的功能,将Blockchain的数据维护和共识服务进行分离,共识服务从Peer节点中完全分离出来,独立为Orderer节点提供共识服务;
  • 基于新的架构,实现多通道(channel)的结构,实现了更为灵活的业务适应性(业务隔离、安全性等方面)
  • 支持更强的配置功能和策略管理功能,进一步增强系统的灵活性和适应性;