这篇文章根据某次IBM技术人员做的分享进行整理。从下面几个方面介绍了Hypeledger Fabric。
- Hyperledger Fabric 简介
- Hyperledger Fabric 特性
- Hyperledger Fabric 架构与核心组件
Hyperledger Fabric 简介
Hyperledger Fabric,中文称超级账本,原来主要由IBM和Data Asset发起,现在由Linux基金会管理。
IBM和Data Asset的客户都是企业、政府部门。那么超级账本的也是是针对企业应用的开发的。企业应用里使用区块链主要为了利用技术提升内部运作效率,基本没有挖矿和币的概念。所以 Fabric 的默认实现基本也不包含这两块儿,这点儿和比特币以太坊等公链还是有很大差别的。
除了Fabric之外,Hyperledger项目还管理一些别的工具,有兴趣的话可以到官网了解一下。
Hyperledger Fabric 特性
Fabric 基本有下面几个特性:
- 开放
- 开源
- 多语言支持
- 可插拔,可扩展
- 兼顾数据共享与隐私保护
下面我们一个个看一下。
开放
Linux 基金会大家都知道。谈到这个 Linux 基金会的大家首先会想到 Linux 操作系统和 github。Linux 毫无疑问是应用最广的服务器端操作系统。github是最大的开源社区,github 上有无数的开源软件,遍布全球的程序员每天都在 github 上提交新项目,改进代码。
Linux基金会的会员非常多,目前企业会员就超过 1000 家,当然也包括很多中国的大企业,像 BAT,华为,中国移动,招商银行,中国电信,中信银行等等。
超级账本的是 Linux 基金会 15 年底宣布成立的,成立之后很快就吸引了大批的企业,到 2016 年底就有 120 多家企业,大约四分之一是中国企业。所以说中国的IT现在是非常活跃的,对这个区块链的投入也非常大。
下面这个图是目前这个项目下面的18家白金会员。
超级账本白金会员
开源
这个没太多好说的,它的源代码是公开的,github 上有镜像,大家可以很方便地下载。
支持多语言
这里说的多语言主要是指与 Fabric 交互的 SDK 支持多种语言。
如下图所示,SDK目前支持 go, java, js, python 四种语言。
超级账本SDK支持的语言
这四种编程语言基本是目前最流行的编程语言了吧?我相信绝大部分写代码的同学至少会其中的一种。这也就大大降低了使用 Fabric 的门槛,你不用再新学一种语言就可以开始写程序做区块链应用了。
另外,超级账本还有一个叫做 Hyperledger Composer 的工具。借助这个工具,可以很快的搭建区块链环境。
可插拔,可扩展
Fabri 当中的 CA,数据库,共识算法等,都是可以插拔的。另外,Farbric的 Chaincode 通过docker实现。
Chaincode是什么呢?
这又要说回到共识机制,共识机制就是所有参与者对每个合约的确认过程。举个简单的例子,你转账给我,转100块钱。你付款,我收款确认。你转账,我确认,这些信息被记录下来记得账本上。这就是共识机制。
代码怎么实现这个动作呢?
你转账的动作,我确认的动作,都是在chaincode实现。类似于我们定义一个转账的接口,你实现付款的代码,我实现确认的代码。这些代码就是chaincode。
兼顾数据共享和隐私保护
隐私一直是大家都比较关心的话题。Facebook 也因为 Cambridge Analytica 被搞得焦头烂额,很多公司都修改了隐私保护规则。
我最近就收到很多网站发的邮件,通知我隐私条例改了,包括facebook,微软等等。欧盟也出了新的数据保护条例,GDPR(General Data Protection Regulation)5月25日生效份生效,对数据保护提出了更高的要求,据说目前欧盟超过一半的企业达不到要求。
区块链的账本是共享的,这是区块链的一大特点,没有这个特点也就不是区块链了。想比特币,以太坊等等,交易数据大家都可以查看,虽然不知道是谁,但是很多人还是很担心,财不外露嘛。
在 Fabric 中,账本不是共享给所有人的。而是通过 channel 隔离数据,虽然大家都在同一个区块链网络里,但是大家不在同一个 channel,也没办法共享账本。通过建立不同的 channel 可以达到按需共享的目的。你业务上需要,才把你加到 channel 里面,你不需要就不把你放到这个 channel 里。
Hyperledger Fabric 架构与核心组件
如下图所示,Fabric由三大模块组成。
- CA——也就是成员管理;
- Peer,就是节点,大部分代码都在peer里面实现;
- Ordering-Service,这是完成共识机制的地方。
orderer
orderer是排序的意思。Order是接收transaction,产生block。并且负责共识机制的policy管理,RWSet。有点类似比特币里面的矿工。
OrdererPeer
Peer 是 Fabric 网络中维护账本状态和 chaincode 的网络节点。
Peer有三种:endorser, committer, submitter
image.png
Endorser 负责背书,根据定义好的规则读写数据,读写集,这个读写的数据叫 state db,或者叫 world state db。
背书就是签署,它做的具体事情就是根据约定,往事务里读写数据。可以理解为执行合同里的每个条款。注意这个数据没有写到账本数据。账本是共享的。
Commiter 负责验证 endorsements 和 transaction 结果。Committer 会写共享账本数据。
看下面这个图,左边的是账本,每个 peer 都保存一份。
右边的是 state db,或者叫 world state db。
它记录背书的数据,签名等等。账本数据本身是文件系统。World State DB 可以是 CouchDB 或者 LevelDB。
下面我看看一下完成一个事务的具体工程。
事务就是合约、合同,完成这个合同不同的参与者需要完成不同的任务。
在下面这个图中,右上角这个紫色的框是签署规则。
根据这个规则, E0 E1 E2 三方需要签名。
第一步就是客户端根据规则向这个网络中广播一条消息
image.pngE0,E1,E2 收到消息就执行背书
image.pngE0, E1, E2 完成背书之后,通知客户端。
image.png客户端收到大家的确认之后就,就向 orderer service 发送请求。
image.pngOrder service 对这个 transaction 进行排序,完成之后写到 block 中,并且发送给committing peers。这个 block 就是区块链的 block。
image.pngCommitting peer 调用 validate chaincode 对这个 transaction 进行验证。验证通过,就写入到账本里面。
image.png最后再通知客户端,交易完成。
image.png简单回顾一下
- 客户端发请求
- endorser 背书
- 通知客户端,客户端收到所有的确认之后
- 发给order, order排序,并且写进block
- committer 验证交易
- 交易数据写到账本里面
- 通知客户端完成
网友评论