找回密码
 立即注册

扫一扫,登录网站

首页 自媒体 查看内容
  • 3406
  • 0
  • 分享到

深度探索Hyperledger技术与应用之超级账本的系统架构

2018-4-27 14:14

来源: HiBlock-Net

本文内容节选自《深度探索区块链:Hyperledger技术与应用》一书的第2章《超级账本初体验》。

本书作者:张增骏,董宁,朱轩彤,陈剑雄

感谢机械工业出版社华章分社的支持和分享。



区块链的业务需求多种多样,一些要求在快速达成网络共识及快速确认区块后,才可以将区块加入区块链中。有一些可以接受相对缓慢的处理时间,以换取较低级别的信任。各行各业在扩展性、可信度、合法性、工作流复杂度以及安全性等方面的需求和用途都不尽相同。我们先来看一下在企业级区块链系统中常见的模块构成,如图3-1所示。


 


从图中可以看到一些常用的功能模块有:应用程序、成员管理、智能合约、账本、共识机制、事件机制、系统管理等。纵轴代表用户或者开发者更关心的内容,越往上代表用户更关注,比如应用程序和钱包等,越靠下是开发者更关注的模块,比如事件机制。而横轴则是从时间的维度来看的,左边是一开始关注的功能,直到完成所有的功能。


Hyperledger Fabric 1.0是一种通用的区块链技术,其设计目标是利用一些成熟的技术实现分布式账本技术(Distributed Ledger Technology,DLT)。超级账本采用模块化架构设计,复用通用的功能模块和接口。模块化的方法带来了可扩展性、灵活性等优势,会减少模块修改、升级带来的影响,能很好地利用微服务实现区块链应用系统的开发和部署。Hyperledger Fabric 1.0设计有几个特点:


1)模块插件化:很多的功能模块(如CA模块、共识算法、状态数据库存储、ESCC、VSCC、BCCSP等)都是可插拔的,系统提供了通用的接口和默认的实现,这满足了大多数的业务需求。这些模块也可以根据需求进行扩展,集成到系统中。


2)充分利用容器技术:不仅节点使用容器作为运行环境,链码也默认运行在安全的容器中。应用程序或者外部系统不能直接操作链码,必须通过背书节点提供的接口转发给链码来执行。容器给链码运行提供的是安全沙箱环境,把链码的环境和背书节点的环境隔离开,链码存在安全问题也不会影响到背书节点。


3)可扩展性:Hyperledger Fabric 1.0在0.6版本的基础上,对Peer节点的角色进行了拆分,有背书节点(Endorser)、排序服务节点(Orderer)、记账节点(Committer)等,不同角色的节点有不同的功能。节点可以加入到不同的通道(Channel)中,链码可以运行在不同的节点上,这样可以更好地提升并行执行的效率和吞吐量。


4)安全性:Hyperledger Fabric 1.0提供的是授权访问的区块链网络,节点共同维护成员信息,MSP(Membership Service Provider)模块验证、授权了最终用户后才能使用区块链网络的功能。多链和多通道的设计容易实现数据隔离,也提供了应用程序和链码之间的安全通道,实现了隐私保护。


1

系统逻辑架构


下图所示为Hyperledger Fabric 1.0设计的系统逻辑架构图。

 


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


1、应用程序角度


(1)身份管理


用户注册和登录系统后,获取到用户注册证书(ECert),其他所有的操作都需要与用户证书关联的私钥进行签名,消息接收方首先会进行签名验证,才进行后续的消息处理。网络节点同样会用到颁发的证书,比如系统启动和网络节点管理等都会对用户身份进行认证和授权。


(2)账本管理


授权的用户是可以查询账本数据(ledger)的,这可以通过多种方式查询,包括根据区块号查询区块、根据区块哈希查询区块、根据交易号查询区块、根据交易号查询交易,还可以根据通道名称获取查询到的区块链信息。


(3)交易管理


账本数据只能通过交易执行才能更新,应用程序通过交易管理提交交易提案(Proposal)并获取到交易背书(Endorsement)以后,再给排序服务节点提交交易,然后打包生成区块。SDK提供接口,利用用户证书本地生成交易号,背书节点和记账节点都会校验是否存在重复交易。


(4)智能合约


实现“可编程的账本”(Programmable Ledger),通过链码执行提交的交易,实现基于区块链的智能合约业务逻辑。只有智能合约才能更新账本数据,其他模块是不能直接修改状态数据(World State)的。


2.底层角度


下面的内容是从Hyperledger Fabric 1.0底层的角度来看,如何实现分布式账本技术,给应用程序提供区块链服务。


(1)成员管理


MSP(Membership Service Provider)对成员管理进行了抽象,每个MSP都会建立一套根信任证书(Root of Trust Certificate)体系,利用PKI(Public Key Infrastructure)对成员身份进行认证,验证成员用户提交请求的签名。结合Fabric-CA或者第三方CA系统,提供成员注册功能,并对成员身份证书进行管理,例如证书新增和撤销。注册的证书分为注册证书(ECert)、交易证书(TCert)和TLS证书(TLS Cert),它们分别用于用户身份、交易签名和TLS传输。


(2)共识服务


在分布式节点环境下,要实现同一个链上不同节点区块的一致性,同时要确保区块里的交易有效和有序。共识机制由3个阶段完成:客户端向背书节点提交提案进行签名背书,客户端将背书后的交易提交给排序服务节点进行交易排序,生成区块和排序服务,之后广播给记账节点验证交易后写入本地账本。网络节点的P2P协议采用的是基于Gossip的数据分发,以同一组织为传播范围来同步数据,提升网络传输的效率。


(3)链码服务


智能合约的实现依赖于安全的执行环境,确保安全的执行过程和用户数据的隔离。Hyperledger Fabric采用Docker管理普通的链码,提供安全的沙箱环境和镜像文件仓库。其好处是容易支持多种语言的链码,扩展性很好。Docker的方案也有自身的问题,比如对环境要求较高,占用资源较多,性能不高等,实现过程中也存在与Kubernetes、Rancher等平台的兼容性问题。


(4)安全和密码服务


安全问题是企业级区块链关心的问题,尤其在关注国家安全的项目中。其中底层的密码学支持尤其重要,Hyperledger Fabric 1.0专门定义了一个BCCSP(BlockChain Cryptographic Service Provider),使其实现密钥生成、哈希运算、签名验签、加密解密等基础功能。BCCSP是一个抽象的接口,默认是软实现的国标算法,目前社区和较多的厂家都在实现国密的算法和HSM(Hardware Security Module)。


Hyperledger Fabric 1.0在架构上的设计具有很好的可扩展性,目前是众多可见的区块链技术中最为活跃的,值得区块链技术爱好者深入研究。


2

网络节点架构


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



接下来详细地解释图3-3所示的不同节点的类型。


1.客户端节点


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


2. Peer节点


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


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

在图3-2 中还可以看到,有的节点同时是背书节点和记账节点,也可以同时是背书节点、主节点和记账节点,也可以只是记账节点。在后面的章节中,有的地方会用记账节点代表普通的Peer节点。


3.排序服务节点


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


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


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


4. CA节点


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

版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。
相关新闻
发表评论

请先 注册/登录 后参与评论

    回顶部