联盟链—Hyperledg Fabric架构简述
一直以来想再仔细的过一遍Hyperledger Fabric的基础知识,可惜自身太懒惰便一拖再拖,今天终于想起这件事,心里很惭愧,花了一段时间通过《区块链技术进阶与实战》这本书和网上一些资料对Fabric有了一个大致了解,略作记录,细节还需要之后再做补充。
Hyperledger Fabric 是分布式账本技术的独特实现,v1.0版本具有以下特性:
- 身份管理: Fabric是一个许可链网络,因此Fabric提供了一个成员服务,用于管理用户ID并对网络上所有的参与者进行认证,成员通过身份信息互相识别,但不知道彼此在做什么,提供了一定的机密性和隐私性。
- 隐私保密: 通过通道来限制消息的传播路径,为成员提供交易的隐私性和机密性保护。通道中的所有数据,包括交易、成员以及通道信息,对于未订阅该通道的网络诗体都是不可见且无法访问的。
- 性能高效: Fabric按照节点类型分配网络角色,对事务执行、失误排序、事务提交进行了有效的分离。这种并发执行极大地提高了Peer节点的效率,加速了交付过程。
- 模块化设计: 模块化架构能够为网络设计者提供功能选择。
Fabric包括了一些特有的概念:
- 锚节点: 能被一个通道中所有对等节点探测并能与之进行通信的一种对等节点。通道中的每个成员都有一个(或多个)锚节点,允许属于不用成员身份的节点来发现通道中存在的其他节点。
- 通道: 通道为实现数据的隔离和保密。每个通道内有一个区块链,在通道中是与所有对等节点共享的,并且交易方必须通过该通道的正确性检验才能与账本进行交互。
- 动态成员管理: Fabric支持动态添加/删除成员、对等节点和排序服务节点,而不会影响整个网络的操作性。当业务关系调整或因各种原因需要添加/移除实体时,动态成员管理至关重要。
- 世界状态: 账本的当前状态表示其区块链交易日志中所有key的最新值。对等节点会将最近处理过的每笔交易对应修改的value值更新到账本的当前状态,其表示通道中当前最新的key-value值。
- 共识服务: 将交易排序放入区块的节点的集合。
- 提交: 通道中的每个对等节点都会验证区块的有序性,然后将区块提交至通道上账本的各个副本。对等节点也会标记每个区块中的每笔交易的状态是有效或无效。
- 并发控制版本检查: 是保持通道中个对等节点间状态同步的一种方法。对等节点并行执行,检查交易在执行其监督到的数据是否被修改。
- Gossip协议: 包括三个功能, 管理对等节点,发现通道上的成员;通道上的所有对等节点间广播账本数据;通道上的所有对等节点间同步账本数据。
Hyperledger Fabric 整体架构
Fabric在架构上采用了模块化设计,主要由三个服务模块组成:成员服务、区块链服务和链码服务。
- 成员服务提供会员注册、身份保护、内容保护、交易审计功能,以保证平台访问的安全性和权限管理。
- 区块链服务负责节点的公式管理、账本的分布式计算、账本的存储以及节点间的P2P协议功能的实现,是区块链的核心组成部分,为区块链的主体功能提供底层支撑。
- 链码服务提供一个智能合约的执行引擎,为Fabric的合约代码程序提供部署运行环境。
其中,Fabric提供了API、SDK、CLI三种接口,用户可以用来对Fabric进行操作管理。
成员服务
成员服务为Fabric的参与者提供网络上的身份管理、隐私、保密性和可审核性的服务。Fabric通过PKI体系完成成员服务。
成员服务实际上是一个认证中心,负责为用户提供证书认证和权限管理的功能,对区块链网络中的节点和交易进行管理和认证。 Fabric当前采用的模型是基于可信的第三方机构,证书颁发机构(CA)签发的证书。
通常,PKI体系包含***构(RA)、证书颁布机构(CA)、证书数据库和证书存储实体。其中,RA负责对用户进行身份验证以及对数据、证书或其他用于支持用户请求的材料进行合法性审查,还负责创建注册所需的注册凭证。CA根据RA建议颁发证书,证书由根CA直接或分层进行认证。成员服务详细实体如下图:(待补)
图
注: 在陶辉老师的博客里的1.4节对PKI这部分有基础的解释,这里不再细说。区块链开源实现hyperledger fabric架构详解 —— 陶辉
区块链服务
包含四个模块: 共识管理、分布式账本、账本存储和P2P网络协议。
1. P2P网络
前面提到过Gossip协议,通过Gossip完成节点发现和同步数据,使用gRPC来做区块链交互调用。底层使用protocol buffer实现结构数据序列化/反序列化。
Fabric网络中存在三类不同的节点:客户端节点(client)、Peer节点以及共识服务节点(Orderer)。
Client节点代表着终端用户实体。必须连接到Peer节点后才可以与区块链进行通信交互。能够根据自己的选择来连接到任意的Peer节点上,创建交易和调用交易。
Peer节点负责与共识服务节点通信来进行世界状态的维护和更新。可以额外担当背书节点的角色,负责为交易背书。
Orderer节点是共识服务的组成部分。负责为交易进行排序,确保最后所有的交易时以同样的序列输出,并提供送达保证服务的广播通信服务。
在v1.0版本中,Fabric引入通道,支持多通道多链,即系统中可以存在多个链,不同通道的交易不会存在任何联系。在共识服务上支持多通道消息传递,Peer节点能够基于应用访问控制策略来订阅任意数量的通道。应用程序可以指定Peer节点的子集来架设一个通道,这些Peer节点组成相关者集合,只有这些Peer节点可以接受包含相关交易的区块,与其他交易隔离。
2. 共识服务
Fabric共识服务保证了消息通信是序列化和可靠的。目前Fabric提供了三种模式实现:Solo、Kafka和BFT。
Solo部署在单个节点上,是一种简单时序服务,用于开发测试,只支持单通道和单链。
Kafka是一种支持多通道分区的集群共识服务,容忍部分节点宕机失效,但不容忍恶意节点。基于zookeeper实现,要求失效节点不多于一半 n >= 2f + 1
BFT是拜占庭容错模式,允许存在恶意节点,要求失效节点不多于三分之一 n >= 3f + 1
注: 资料中只提到Orderer节点聚集在一起形成共识服务。其实我认为Peer节点的背书,也算作共识服务。
3. 分布式账本
区块链账本存储了所有的历史交易和状态改变记录。在Fabric中,每个通道都对应着一个共享账本,每个连接在账本上的Peer节点都能参与网络和查看账本信息。每个Peer节点都维护者一份账本的副本。
区块链账本以文件系统的形式存储于本地。账本由两部分组成:区块链体和状态数据库。区块链部分存储着所有交易信息,只可增查不可删改。数据库部分存储着交易日之中所有变量的最新值,表示通道中所有变量键值对的最新值。
链码调用执行交易来更改目前的状态数据,键值对数据存储于状态数据库中,默认的是LevelDB,可以切换到CouchDB或其他DB。
注: 这里的NOSQL选择根据判断写远大于读,所以优先选用LevelDB。
未完待续。。。