HyperLedger Fabric 系统架构


title: HyperLedger Fabric 架构
tags: 区块链,HyperLedger Fabric


系统逻辑架构

        Hyperledger Fabric是一种模块化的区块链架构,是分布式记账技术(DLT)的一种独特的实现,它提供了可供企业运用的网络,具备安全、可伸缩、加密和可执行等特性。

Hyperledger Fabric提供了以下区块链网络功能:

  1. 身份管理:为了支持被许可的网络, Hyperledger Fabric提供了一个成员身份服务( Membership Identity Service),它管理用户ID并对网络上的所有参与者进行身份验证。访问控制列表可以通过特定网络操作的授权来提供额外的权限。

  2. 隐私和机密性:Hyperledger Fabric使得竞争的商业利益和任何需要私人的、机密的交易的团体能够在同一个被许可的网络上共存。私有频道是受限制的消息传递路径,可用于为网络成员的特定子集提供事务隐私和机密性。所有的数据,包括事务、成员和频道信息,都是不可见的,任何网络成员都不能访问该频道。

  3. 高效处理能力:Hyperledger Fabric通过节点类型分配网络角色。执行事务的操作从事务排序和提交验证中分离出来,以便向网络提供并发性控制和并行性操作。在排序之前,执行事务使每个对等节点能够同时处理多个事务。这种并发执行提高了每个对等点的处理效率,并加速了对排序服务的事务的交付。除了启用并行处理之外,还可以从事务执行和分类维护的需求中提取节点,而对等节点则从排序(一致的)工作负载中解放出来。角色的这种分支也限制了授权和身份验证所需的处理;所有的对等节点不需要信任所有的排序节点,反之亦然。因此,在一个节点上的进程可以独立于另一个节点进行验证。

  4. Chaincode功能:Chaincode应用程序对频道中特定类型的事务调用的逻辑进行编码。例如,为资产所有权变更定义参数的 Chaincode,确保所有转移所有权的交易都服从相同的规则和要求。系统Chaincode是一个特殊的 Chaincode,它定义了整个频道的操作参数。生命周期和配置系统Chaincode定义了频道的规则,认可和验证系统 Chaincode定义了支持和验证事务的需求。

  5. 模块化设计:Hyperledger Fabric实现了一个模块化的架构,为网络设计师提供功能选择。例如,特定的识别、排序(一致)和加密的算法可以被插入到任何一个 Hyperledger Fabric的网络中。其结果是一个通用的区块链架构,任何行业或公共领域都可以采用,并保证其网络将在市场、监管和地理界线之间进行互操作。

从应用层和底层来看

        上图所示的系统逻辑架构图是从不同角度来划分的,上层从应用程序的角度,提供了标准的gRPC接口,在AP的基础之上封装了不同语言的SDK,包括 golan、 Node. js、Java、 Python等,开发人员可以利用SDK开发基于区块链的应用。区块链强一致性要求,各个节点之间达成共识需要较长的执行时间,也是釆用异步通信的模式进行开发的,事件模块可以在触发区块事件或者链码事件的时候执行预先定义的回调函数。下面分别从应用程序和底层的角度分析应该关注的几个要素

  1. 应用层
  • API:提供了GRPC,RPC框架
  • SDK:在API基础上封装的SDK,go、java、python、nodejs
  • 事件管理:分布式系统中,达成共识需要一定时间,fabric使用异步通信模式开发,触发回调函数执行
  • 身份管理:依托于底层的成员服务,是联盟链的认证功能,例如CA
  • 账本管理:区块链的查询数据,是账本中查出来的,区块高度+交易ID,不重复
  • 交易管理: 对区块链数据进行修改,先提交交易到背书节点,签名认证之后再执行
  • 智能合约:做合约的安装、实例化和升级

2 .区块链底层

  • 成员管理:提供证书,并对身份证书进行管理,用于加密和签名
  • 共识服务:CAP(不能全满足,只能满足2个,一致性、可用性和分区容忍性),实际上区块链弱化了可用性和分区容忍性,所以需要共识算法保证一致性,fabric的共识大概分为3个阶段
    1)首先客户端向背书节点发送一个背书提案,背书节点进行交易模拟,将背书结果和签名返回给客户端
    2)然后将背书后的交易,交给排序节点进行排序,由排序节点生成区块,向全网广播,网络节点接收到广播后,先验证区块交易的正确性
    3)验证通过后,存入本地账本

PS:排序节点与组织的锚节点使用的是GRPC通信,组织内使用的是gossip协议通信

  • 链码服务:提供安全的、可隔离的交易环境,所以fabric使用docker,链码直接与docker通信,目前阶段对k8s支持的不好,会出问题。
  • 安全及密码服务:fabric定义了一个BCCSP接口,定义签名、加密解密等功能,默认实现了一套国际通用的密码服务,如sha256等

网络节点架构

        节点是区块链的通信主体,是一个逻辑概念。多个不同类型的节点可以运行在同一物理服务器上。有多种类型的节点:客户端、Peer节点、排序服务节点和CA节点。

  1. 客户端节点
            客户端或者应用程序代表由最终用户操作的实体,它必须连接到某个Peer节点或者排序服务节点上与区块链网络进行通信。客户端向背书节点( Endorser)提交交易提案( Transaction Proposal),当收集到足够背书后,向排序服务广播交易,进行排序,生成区块。

  2. Peer节点
            所有的Peer节点都是记账节点( Committer),负责验证从排序服务节点区块里的交易,维护状态数据和账本的副本。部分节点会执行交易并对结果进行签名背书,充当背书节点的角色。背书节点是动态的角色,是与具体链码绑定的。每个链码在实例化的时候都会设置背书策略,指定哪些节点对交易背书后才是有效的。也只有在应用程序向它发起交易背书请求的时候才是背书节点,其他时候就是普通的记账节点,只负责验证交易并记账。

        Peer节点还有一种角色是主节点( Leader Peer) , 代表的是和排序服务节点通信的节点, 负责从排序服务节点处获取最新的区块并在组织内部同步。 可以强制设置为主节点, 也可以动态选举产生。

有的节点同时是背书节点和记账节点, 也可以同时是背书节点、 主节点和记账节点, 也可以只是记账节点。

  1. 排序服务节点
            排序服务节点( Ordering service node或者 Orderer)接收包含背书签名的交易,对未打包的交易进行排序生成区块,广播给Peer节点。排序服务提供的是原子广播( Atomic broadcast),保证同一个链上的节点接收到相同的消息,并且有相同的逻辑顺序。

        排序服务的多通道( MultiChannel)实现了多链的数据隔离,保证只有同一个链的Peer节点才能访问链上的数据,保护用户数据的隐私。

        排序服务可以采用集中式服务,也可以采用分布式协议。可以实现不同级别的容错处理,目前正式发布的版本只支持 Apache Kafka集群,提供交易排序的功能,只实现CFT( Crash fault tolerence,崩溃故障容错),不支持BFT( Byzantine Fault Tolerance,拜占庭容错)。

  1. CA节点
            CA节点是 Hyperledger fabric10的证书颁发机构( Certificate Authority),由服务器和客户端组件组成。CA节点接收客户端的注册申请,返回注册密码用于用户登录,以便获取身份证书。在区块链网络上所有的操作都会验证用户的身份。CA节点是可选的,可以用其他成熟的第三方CA颁发证书。

交易流程图

        从上面的网络节点架构中, 我们已经了解到基于Hyperledger Fabric 的区块链应用中涉及几个节点角色: 应用程序、 背书节点、 排序服务节点和主节点。 在上图中, 假定各节点已经提前颁发好证书,且已正常启动, 并加入已经创建好的通道。

你可能感兴趣的:(#,Hyperledger,fabric,区块链)