2.1.2 Fabric区块链平台的体系结构
Fabric区块链平台的体系结构
Fabric区块链平台的体系结构如图2-1所示。
图2-1 Fabric区块链平台的体系结构
Fabric区块链平台分为接口层、应用层和服务层3个层次。
1.接口层
接口层负责为客户端应用提供与Fabric网络进行交互的渠道,包括API、SDK和CLI,具体说明如下。
● API(Application Program Interface,应用程序接口)是Fabric区块链提供的对区块链网络进行访问和操作的接口。可以在客户端应用中调用API与网络进行交互。
● SDK(Software Development Kit,软件开发工具包)是Fabric区块链提供的开发包,客户端应用可以利用SDK与智能合约进行交互。
● CLI(Command Line Interface,命令行界面)是一个命令行客户端工具,用户可以通过命令行访问 Fabric 网络。开发者可以通过 CLI 快速测试链码,或者查询交易状态。智能合约经过打包就是链码。
2.应用层
应用层位于接口层和服务层之间,包括身份管理、账本管理、交易管理和智能合约4个模块。
(1)身份管理
身份管理模块负责对Fabric网络中的成员进行身份管理,颁发数字证书,并提供身份验证服务。
加入Fabric网络的组织也被称为“成员”。Fabric区块链属于联盟链。与比特币、以太坊等公有链不同,并不是任何人都可以随意加入Fabric网络。在大多数情况下,由多个组织组合在一起构成一个联盟,形成一个区块链网络。在对网络进行初始化时,联盟会制定一组安全策略。这组安全策略决定了每个组织的权限。
策略是由属性的数字标识符组成的表达式。例如,OR('Org1.peer', 'Org2.peer')表示组织Org1的任意Peer节点或者组织Org2的任意Peer节点。策略用于限制对区块链上的资源进行访问。例如,可以在策略中定义谁可以在指定的通道上进行读/写操作,谁可以调用指定的链码API。在搭建排序服务和通道之前,可以在配置文件configtx.yaml中定义策略。当在通道中初始化链码时,也可以指定策略配置文件。
configtx.yaml 中包含一组默认的示例策略,这组示例策略适用于大多数网络。关于Fabric网络的策略定义规则将在第4章介绍。
区块链网络的创建者可以邀请组织加入网络,加入的具体方式是将组织的MSP加入网络。MSP定义网络的其他成员如何验证交易中签名的有效性。可以使用组织的数字证书来生成签名,生成后由组织发布。在MSP中,一个组织的标识所拥有的访问权限由策略来管理。策略由加入网络的组织共同制定。
组织可以是一个跨国公司,也可以是一个人。在Fabric区块链的网络拓扑中使用三角形表示一个组织,如图2-2所示。
联盟是区块链网络中排名不分先后的组织的集合。这些组织共同组建了通道,通道是允许数据隔离和保密的私有区块链实现。指定了通道的账本,可以在通道中的Peer节点间共享数据。交易各方必须通过身份验证才能与通道进行交互。通道在配置文件configtx.yaml中被定义。
在Fabric区块链的网络拓扑中使用椭圆表示一个通道,如图2-3所示。通道C连接应用程序A1、Peer节点P2和排序节点O1。
图2-2 使用三角形表示一个组织
图2-3 使用椭圆表示一个通道
尽管一个网络可以有多个联盟,但是大多数网络中都只有一个联盟。在创建通道时,所有加入通道的组织必须是联盟的成员。但是通道创建后,不是联盟成员的组织也可以加入其中。
排序服务是指事先定义好的一组节点,用于对交易进行排序,并写入区块,然后将区块发布至相关Peer节点进行验证和记账。
排序服务独立于Peer节点,按照先到先服务的原则对网络中的所有通道提供服务。
排序服务集成Kafka消息队列和Raft共识算法,具体情况将在第5章介绍。
(2)账本管理
账本负责存储网络中的交易数据。Fabric 区块链中的数据存储结构由区块链、状态数据库、区块索引和历史索引组成。
● 区块链中的数据保存在区块中,不可篡改,并且按交易发生的顺序存储。
● 状态数据库中保存着账本数据的当前缓存值。
● 区块索引和历史索引分别保存当前和历史的区块索引,以便可以在账本数据中快速定位交易数据。
在比特币和其他很多区块链网络中,区块一旦被加入链中,其内容就不允许被修改了。但是Fabric网络的状态数据库内容是可以修改的。状态数据库中以键值对的形式记录账本的最新数据,因此其内容是经常变化的。通道中的每个 Peer节点都会维护其自己的账本副本,并会通过一个名为Consensus的进程与其他Peer节点同步账本的内容。关于Fabric区块链的账本存储方式将在6.1节具体介绍。在Fabric区块链的网络拓扑中,账本的表现形式如图2-4所示。
图2-4 账本的表现形式
每个通道只有一个账本,通道中的每个Peer节点都会维护一个该通道的账本副本。
(3)交易管理
交易是指资产在网络成员之间转移的操作。资产是区块链管理的对象,它可以是有形的(比如房地产或硬件设备),也可以是无形的(比如智能合约或知识产权)。在Fabric区块链中使用一组键值对表示资产(可以是二进制格式或JSON格式的),并且可以通过交易修改资产。
(4)智能合约
智能合约是指部署于区块链网络上的程序,可以存取状态数据库中的数据。
3.服务层
服务层中包括成员服务、区块链服务、链码服务和事件流,具体说明如下。
(1)成员服务
成员服务用于管理用户ID,并对网络的所有参与者进行身份验证,可以通过ACL(Access Control List,访问控制列表)对用户的特定网络操作授权进行管理和控制。关于成员服务的具体情况将在第4章中介绍。
(2)区块链服务
区块链服务用于管理Fabric网络中的数据存储和交易,在交易过程中负责节点间的共识管理,维护一个分布式账本。账本存储在Peer节点中,Peer节点间通过P2P网络传输协议进行通信。
Fabric网络的共识机制由以下几个阶段组成。
● 客户端向背书节点提交交易提案。
● 背书节点对交易的有效性进行检查,通过检查后进行背书签名。
● 背书节点把经过背书签名后的交易发送回客户端,客户端收集到足够数量的背书签名后把包含背书签名的交易广播给排序节点。
● 排序服务对交易进行排序并产生区块。
● 排序服务将排序后的区块广播给记账节点,记账节点对所有的交易和背书信息进行验证,通过验证后把区块写入账本中。
(3)链码服务
链码是经过打包的智能合约;链码服务用于管理Fabric网络中的智能合约,包括智能合约的编码、部署和调用等。
链码可以部署于区块链网络中。客户端应用可以通过调用链码来与状态数据库进行交互。链码可以通过多种编程语言实现,例如Go、Node.js和Java等。
多个智能合约可以放在一个链码中。当链码被部署后,其中的所有智能合约都可以被客户端应用调用。此时智能合约是一个与特定商业过程相关的、有域名的程序,而链码则是一组相关智能合约的容器。每个链码都有自己的背书策略,该策略应用于链码中定义的所有智能合约。背书策略中会指定哪个组织必须对智能合约生成的交易进行签名,从而证明该交易是有效的。
智能合约可以调用通道内的其他智能合约,也可以跨通道调用智能合约。
(4)事件流
事件流是Fabric网络中各组件的通信机制,可以在应用程序、Peer节点、排序服务和智能合约间传递消息。所谓事件流是指事件在各组件之间流转、传递的机制。由于篇幅所限,本书不对事件流展开介绍。