Hyperledger Fabric的基本概念(一)

1 Hyperledger Fabric 基本概念

1.1 Peer节点

Peer节点提供交易背书、交易验证、提交账本等服务功能的逻辑节点。每个Peer节点可以同时运行在同一个物理节点、虚拟机或者容器中,类似p2p网络,每个节点的功能都是对等的。通过服务分工相应来自Fabric客户端(CLI命令行客户端、SDK客户端)的提交请求信息,并共同维护分布式账本的数据一致性。包括Endorser节点(交易背书)和Committer节点(交易验证、提交账本)

  • Endorser节点
    接收客户端签名提案,模拟执行交易提案,执行结果签名背书,执行结果打包返回。
  • Committer节点
    检查交易合法性和完整性,提交账本,更新本地数据库和文件。

1.2 Orderer节点

Orderer节点负责管理系统通道和应用通道、维护通道账本和配置、提供Broadcast交易广播服务,Orderer共识排序服务、Deliver区块分发服务等。

主要功能流程:

  • 通过Broadcast服务接口接收交易消息请求
  • 共识组件进行排序
  • 区块保存到本地账本
  • Deliver服务接收区块处理请求
  • 节点从本地账本中返回请求范围内的区块数据

1.3 Client客户端

客户端是用户与Fabric网络组件发送请求进行交互的接口,包括一下两种

  • Fabric-CA客户端
    负责节点注册登记,包括登记用户信息,获取注册证书和私钥信息
  • Fabric客户端
    负责网络配置和节点管理,包括初始化与更新配置,启动与停止节点,还包括通道管理和链码管理。包括CLI命令行客户端和多语言SDK客户端,负责与其他节点进行交互,提供各种API操作,支持开发丰富的应用程序。

1.4 CA节点

CA节点类似于证书机构,提供用户身份注册服务,任何合法的成员实体都需要在接入网络之前获取身份认证,不需要在运行过程中一直访问CA节点,因此Fabric-CA相对独立。

1.5 Gossip消息协议

Gossip消息协议(流言算法)广泛应用于分布式定位、数据库复制等领域,协议规定节点采用随机选择临近节点的方式进行路由并交换信息,近邻节点重复这一过程将其传播给没有数据的节点,直到所有节点收到数据,有效避免了拥塞和路径失效问题。
Fabric中的Gossip消息模块,负责在应用通道中的组织内探测节点成员,节点间区块数据以及同步状态等,保证组织内节点数据的一致性。

1.6 共识(Consensus)

共识算法指节点对一段时间发生的一批交易状态达成一致的计算方法,并按照规则将交易打包成区块,保证同个通道上所有节点的账本具有相同的状态。共识的过程包含在背书阶段、交易排序阶段、交易验证阶段。

  • 背书阶段
    客户端只有收集到满足条件数量的背书信息后,才允许构造交易请求提交给Orderer节点,同时会在交易验证阶段检查这些背书信息是否满足指定的背书策略,保证合法性。
  • 交易排序阶段
    支持Solo(单节点测试)类型与kafka(kafka集群)类型的共识组件,利用Golang通道、Kafka集群对合法消息进行排序,对交易顺序达成一致后,再添加到缓存交易消息列表中,按照区块规则打包成新区块。
  • 交易验证阶段
    验证排序后的交易数据,检查交易格式的正确性,验证背书签名是否满足背书策略。

1.7 成员关系服务提供者(MSP)

MSP是Fabric中基于X.509标准的身份证书,实现对不同资源实体进行认证等权限管理操作,Fabric中属于同一个MSP组件内的成员都用于相同的根证书,支持共享敏感数据,通常一个MSP对象负责一个组织或者联盟,MSP对象包括MSP名称ID、根证书、中间证书列表、管理员身份证书、组织单元列表、CRL等。

1.8 组织(Organization)与联盟(Consortium)

  • 组织
    组织表示多个成员的集合,通常拥有相同的根证书,所有成员拥有一个组织身份,目前存在普通成员角色和管理员角色,后者具有修改组织配置的权限。
  • 联盟
    联盟表示相互合作的多个组织集合,使用相同的Orderer服务,拥有相同的通道创建策略。

1.9 交易(Transaction)和区块(Block)

交易通常是指通过调用链码改变账本状态数据的操作。将交易集合经过Orderer节点排序后按规则打包到区块中。

  • 普通交易消息,封装了变更账本状态的执行交易结果。
  • 配置交易消息,用于创建新的应用通道和更新通道配置,单独打包成区块。

区块是指一段时间交易的集合,经排序后打包并添加签名、哈希值、时间戳所构成的数据结构,区块链就是以区块为基础按照时间顺序链接的数据结构

1.10 链码(Chaincode)

链码就是Fabric中的智能合约,分为系统链码和用户链码,链码需要安装和实例化部署才能使用。
系统链码在节点启动或者初始化链时完成部署,用于支持配置管理,背书签名,链码生命周期管理等系统功能,并运行在goroutine中。
用户链码是用户编写的智能合约,通常运行在docker容器中,支持打包、安装、实例化,升级、调用等链码操作。

1.11 通道(Channel)与链(Chain)

通道通常指Orderer排序节点管理的彼此隔离的原子广播渠道,提供隔离Peer节点信息的重要机制。
Peer节点在加入应用通道时会主动创建关联通道的链结构对象,接收来自Orderer节点的通道账本数据,通道上的数据只会发给加入通道的合法组织成员,从而隔离未经授权的数据访问,保护数据隐私性。
应用通道为上层应用程序处理交易提供隔离机制,在指定通道组织成员间共享账本数据,应用通道账本上保存了应用通道的创始区块,配置区块和普通交易区块。
系统通道保存Orderer配置,基于系统通道配置与应用通道配置交易信息创建新的应用通道,并将其注册到Orderer节点的多通道注册管理器Registrar对象上,系统通道账本保存了系统通道的创世区块、所有应用通道的创世区块及其更新的配置区块。

1.12 账本(Ledger)

账本提供了多个数据库和文件用于存储账本数据,每个通道都拥有物理或逻辑上独立的账本对象。

  • idStore数据库
  • 区块数据文件
  • 隐私数据库
  • 状态数据库
  • 历史数据库
  • 区块索引数据库
  • transient隐私数据库

2 Hyperleger Fabric的运行时架构

Hyperleger Fabric包括Client客户端、CA节点、Endorser背书节点、Committer记账节点、Leader主节点、orderer排序节点等。
Hyperledger Fabric的基本概念(一)

2.1 CA节点

CA节点部署Fabric-CA等可选组件,提供用户注册、证书颁发等用户管理与证书服务。用户可以申请获取合法的身份证书和私钥,交给MSP组件验证与管理用户实体身份。

2.2 Client节点

Client节点部署用户应用程序或CLI命令行客户端,登记注册用户获取合法的证书和私钥,并执行用户程序或命令,发送消息到Endorser背书节点请求背书,当收集到足够的背书结果后,将背书信息和模拟执行结果封装成交易消息,通过Broadcast服务接口发送给Oderer节点请求排序,生成区块后广播到所有的Peer节点,对于配置交易信息,需要创建新的应用通道或者更新通道配置。Client节点通过Deliver服务接口从Orderer节点请求获取指定通道的区块数据。

2.3 Peer节点

Endorser背书节点负启动链码容器用于模拟执行签名提案,并对模拟执行结果进行签名背书,可以通过设置参数动态指定背书节点。
Committer记账节点维护本节点上该通道的账本数据,负责对交易进行验证,默认所有Peer节点都是该通道上的。
Leader主节点代表组织(通常指MSP组件)通过Deliver服务接口与Orderer建立gRPC通信,请求指定通道的账本数据,同时Leader主节点通过Gossip消息协议将接收的区块数据分发给其他节点,达到广播交易的目的。

2.4 Orderer排序节点

Oderer节点基于单个节点的排序服务(Solo类型)或基于多个节点的排序服务(Kafka类型),其中Kafka共识支持CFT错误。
Orderer节点通过Broadcast服务接口接收交易消息请求,交给共识组件排序,按照出块规则打包成新区块,提交给本地账本,通过Deliver服务接口处理区块请求交易,从本地账本获取区块数据交给Leader节点,并广播给组织内的其他节点。

2.5 Fabric交易处理流程

1:发送签名提案消息到Endorser背书节点请求处理
2:Endorser背书节点模拟执行交易提案并签名背书
3:Endorser背书节点向客户端返回交易响应消息,并分发隐私数据明文
4:客户端处理提案响应信息
5:客户端发送数据给Orderer节点请求排序
6:Orderer节点对交易进行排序并构造新的区块
7:Leader主节点请求Orderer节点发送通道账本区块
8:Committer记账节点验证交易并提交账本
9:Leader主节点分发数据与状态同步
10:其他Peer节点中Committer记账节点验证交易并提交账本