简介

Fabric 是超级账本社区首个项目也是最流行的分布式账本实现,由 IBM、DAH 等会员企业于 2015 年底贡献到社区。

作为面向企业场景的联盟链,Fabric 中有许多经典的设计和先进的理念。包括多通道、身份证书机制、隐私保护、运维管理接口等。另外,其可扩展的架构可以满足不同场景下的性能需求,如虚拟机部署场景下可以达到 3500 tps 的吞吐量和小于 1 秒的延迟(参考《Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains》),更多物理资源情况下可以达到更大的(10 K+)的吞吐量。

主要版本历史

Fabric 首个主版本 1.0.0 于 2017 年 7 月发布,该版本根据之前测试版的应用反馈,在架构上进行了重新设计,在可扩展性和可插拔性方面都有了不少改进。后续版本基本上按照每季度一个小版本的节奏发布。重点对性能和安全性、隐私性进行了完善和提升。目前最新大版本为 2.0.0 版本。Fabric 的主要版本历史总结如下表所示,也可在 https://github.com/hyperledger/fabric/releases 找到。

版本 发布时间 新特性 增强和改善
1.0.0 2017-07-11 重新设计架构,支持多通道、Kafka 共识机制、系统链码、分角色节点 大幅度提升性能和可扩展性
1.1.0 2018-03-15 Node.Js 链码,链码加密库,链码中基于证书属性的访问控制,节点之间的双向 TLS,Fabric CA 中对 CRL 的支持。部分实验特性,如 sideDB、idemix、细粒度的权限控制。 大幅优化了性能,某些场景下可提升一个数量级;提供基于通道的事件通知模型
1.2.0 2018-07-04 正式支持私有数据库(Private Data),提供可插拔的 ESCC 和 VSCC,细粒度访问控制,服务自动发现 提高了稳定性和易用性
1.3.0 2018-10-11 正式支持 Java 链码;提供细粒度的基于状态的背书策略;支持 idemix 增强隐私保护 部分重构链码生命周期管理;通过分页机制优化链码中对大量数据的查询
1.4.0 2019-01-09 提供运维相关的 RESTFul API(统计、健康检查、日志级别);使用新的日志控制环境变量 增强私有数据:新 Peer 自动获取缺失私有数据,客户端层面对私有数据的权限控制;开始支持新的 RAFT 排序机制
2.0.0 2020-03-TBD 新的面向通道的链码生命周期管理;独立 shim 库等 增强私有数据支持;增强排序服务;改进性能

网络基本结构

Fabric 网络中存在四种不同种类的服务节点,彼此协作完成整个区块链系统的记账功能:

  • 背书节点(Endorser Peer):一类特殊的 Peer,对交易提案(Transaction Proposal)进行检查,通过执行智能合约计算交易执行结果(读写集合)并对其进行背书;
  • 记账节点(Committer Peer):负责维护账本,检查排序后交易结果合法性,接受合法修改,并写入到本地账本结构,目前所有 Peer 默认都是记账节点;
  • 排序节点(Orderer):正式交易会发给排序节点,排序节点负责对网络中所有交易进行排序处理,并整理为区块结构,之后被记账节点拉取提交到本地账本;
  • 证书节点(CA):提供标准的 PKI 服务,负责对网络中所有的证书进行管理,包括签发和撤销。

节点角色是 Fabric 设计中的一大创新。根据性能和安全需求,不同的节点可以由组织分别管理,共同构建联盟链。

此外,网络账本的基本单位是通道(Channel),每个通道内的成员可以共享账本,不同通道内账本则彼此隔离。客户端可以向网络内发送交易,交易经过共识后被通道内的 Peer 节点接收并更新本地对应的账本。

本章后续将详细介绍安装、部署 Fabric 网络并进行启动的操作过程,建议读者跟随步骤进行实践学习。

下一节:本地编译生成 Fabric 网络的各个组件,可以形成更直观的认识。Fabric 采用 Go 语言实现,推荐使用 Golang 1.10+ 版本进行编译。