1. 项目介绍
Hyperledger Fabric
是IBM发起的,后来被Linux基金会托管,作为开源的区块链项目
Hyperledger Fabric
的主要目标是作为企业级联盟链的基础设施,它的基础架构与公有链有很大的不同
Hyperledger Fabric
现阶段拥有可插拔的共识机制,包含solo与kafka两种机制
2. 智能合约(链码,chaincode)
最初引入智能合约这个概念的是以太坊项目
3. Hyperledger Fabric
整体架构图
整体架构分为应用程序层与底层的区块链层
应用程序层
- API:
Hyperledger Fabric
为应用程序开发者提供了gRPC接口 - SDK:针对不同语言封装不同的SDK,包括go,node.js等
- 事件:区块链是一个分布式系统,在各个节点之间达成一致是需要消耗一定时间的,采用同步的方式肯定是不可能的,
Hyperledger Fabric
采用异步通信的模式来进行开发,可以在链码里面定义某些事件,然后通过应用程序去监听,当某个事件被触发的时候,就可以执行预先设定好的回调函数了
应用程序层与底层交互的媒介
身份管理
精确确定每一个角色在区块链中的权限和资源。一个身份验证不能通过的请求是不能被底层系统认可的。任何请求的处理流程都必须要经过身份验证。对于一个参与者的身份有两点要求:
- 一个身份必须是可以验证的
- 一个身份必须是符合验证要求的
账本管理
对区块的查询,Hyperledger Fabric
提供了多种区块查询的方式。
- 按照区块高度进行查询
- 按照区块哈希去查询
- 根据交易ID去查询区块(哈希算法的抗碰撞性,导致了交易ID也是不重复的,这样就可以将交易ID与包含这个交易的区块对应起来)
账本管理的另外一个功能就是根据通道的名称获取整个账本的信息。在Hyperledger Fabric
中,账本是通过通道(channel)进行隔离的,这种隔离不仅体现在逻辑上,在物理上也是进行分隔的。区块存储是以文件块的形式,根据通道名划分不同的文件夹
交易管理
账本管理主要提供的都是一些查询方法,而与区块链底层做数据修改的都是通过交易管理。
上层的应用程序通过交易管理模块,将交易提交到交易背书节点,在获得了交易背书以后,将交易提交给排序服务排序,排完序的交易会被打包成区块进行分发,这样交易就被扩散到了整个网络。
智能合约
做智能合约的安装,初始化以及升级等操作。
智能合约与交易的关系,智能合约相当于函数的声明与定义,而交易相当于函数的一次调用
底层区块链层
成员服务
身份模块是依托于底层的成员服务模块的,Hyperledger Fabric
利用的PKI体系(公钥架构,在网络中提供安全通信的技术,让HTTP变成HTTPS)和CA系统,提供了包括注册登录,身份认证等待功能。这里的注册登录是指能与区块链底层进行交互的一个身份的管理,一个应用程序可能只需要一个身份就可以完成所有与区块链底层交互的功能。
在成员服务中,每一个成员都包含了多个证书,用于注册身份的注册证书,要与交易签名的交易证书,以及加密传输用的TLS证书。
简单来说,成员服务提供了一系列证书,用于交易加密以及签名等等
共识服务
在分布式系统中,有一个重要的CAP原理。
- C:Consistency,即一致性,访问所有的节点得到的数据都是一样的,这里说的一致性是强一致性,也就是数据更新完,所有节点看到的数据是一样的,要与弱一致性,最终一致性区分开来
- A:Availability,即可用性,所有的节点都保持高可用性。注意,这里的高可用还包括不能出现延迟,比如如果节点B由于等待数据同步而阻塞请求,那么节点B就不满足高可用性。也就是说,任何没有发生故障的服务必须在有限的时间内返回合理的结果集
- P:Partiton tolerence,即分区容忍性,这里的分区是指网络意义上的分区。由于网络是不可靠的,所有节点之间很可能出现无法通讯的情况,在节点不能通信时,要保证系统可以继续正常服务。
CAP原理说,一个数据分布式系统不可能同时满足C和A和P这3个条件。在分布式系统中,如果网络中断了,系统就会被分隔开来,形成一个个网络孤岛,这就形成了分区。当某个请求发生到某个孤岛上的时候,可能会因为数据不一致,造成请求失败。为了防止这样的情况发生,就必须将同一份数据尽可能多得分散到各个孤岛上,也就是备份,这就是要满足一致性。但是随着备份的增多,备份的写入也会消耗更长的时间,每次更新数据都要备份很多份,这就造成了可用性的下降。
如果对数据的一致性要求不那么严格(即不是强一致性,可能是弱一致性或是最终一致性),那么就可以弱化一致性,这样就增加了可用性。
区块链这样的典型的分布式系统中,他保证每一个节点都有一份完整的数据,都可以对外提供完整的服务。因此区块链是弱化了一致性,正因为区块链弱化了一致性,所以需要更好的共识算法保证一致性。
Hyperledger Fabric
的共识与其他区块链有一定程度上的不同。
- 应用程序向背书节点发送一个交易提案,背书节点经过交易模拟执行以后,返回给应用程序背书结果以及签名
- 应用程序将背书后的交易交给排序节点进行排序
- 排序节点生成区块,向全网进行广播。记账节点在收到区块广播以后,先验证区块交易的正确性,如果都验证通过了再存到本地的账本中
上述过程用到了两种通信协议,排序节点与组织的锚节点使用的是gRPC进行通信,而在一个组织内部使用的是Gossip协议进行区块扩散。Gossip协议是一个最终一致性的协议,它能在某个时间点,在所有的节点间达成数据一致。
链码服务
提供了安全且隔离的交易执行环境,Hyperledger Fabric
使用了docker,基于docker提供多种语言的合约镜像,支持多种语言的合约编写。
安全及密码服务
提供了公私钥签名以及加密解密的基础功能,实现了一套国际通用的密码服务。国内用这一套是不行的,国内的商业项目想要获得国家的认可就必须使用国密(国密即国家密码局认定的国产密码算法,即商用密码)。