Hyperledger Fabric原理详解与实战4

2,104 阅读5分钟

本文主要内容如下,爱看不看~

从本章开始,我们要实际操作,来搭建一个Fabric的基础网络。

有一个概念贯穿整个Fabric应用层面,非常核心的东西,叫“Channel”。

国内一般把它翻译为“通道”,但我觉得“频道”更贴切一点。作为一个中二的程序员,怎么可以与世俗苟同?所以,后面我会称它为“Channel”或者“通道”。

什么是Channel

上一章我们看到了Fabric的部署架构(也有称为“运行时架构”的)。这是整个Fabric网络运行的基础设施。

基础设施很直观很好理解,但Channel是个逻辑概念。要理解Channel的意义,首先要知道以下几点:

  1. 一个Fabric网络有多个参与者(组织)。

  2. 每个参与者可以自由的和其他参与者组合成一个“联盟”,就像我们的微信好友,可以自由组合成群组。

  3. 每个“联盟”维护一条区块链。也就是说,一个Fabric网络中支持同时运行多条区块链。 一个组织可以同时参与多条区块链的维护。

举个例子:一个糖果公司,为了食品溯源需要,跟上游原料提供商组建了一个Fabric网络。如下图:

由于区块链里的数据,“联盟”成员都是可以全部访问到的。就像群里的消息,群成员都可以读到。

但牛奶供应商和巧克力供应商并不希望让其他人看到自己公司与糖果公司的交易数据。

于是,就将他们切分成了两个联盟,每个联盟维护一条区块链。

这时,该Fabric网络上就有两条区块链,糖果商同时参与了这两条链的维护。

Channel可以理解为上面说的“联盟”或群组。

每个Channel可以自定义一个全局唯一的名称,比如:ChannelMilk和ChannelCoco。

所有的智能合约、交易、区块链操作都是针对某一个Channel来说的。

也就是说,Channel将一个物理上的Fabric网络分成了多个逻辑分区。而每一个应用都是针对某一个分区上的资源进行操作。

就像是一块硬盘,被划分了多个分区,数据存在某一个分区里,应用可以针对某一个分区里的数据进行操作。

所以,我为什么说,Channel翻译成“频道”更贴切一点。

收音机调到某一个频道,得到的信号是相同的。参与者加入某一个Channel以后,收到的数据也是相同的。

如果把“Channel”改为“Group”,我想此处就不会有歧义了。当然,后续我还会讲到私有数据,就是允许数据的值不必保存到区块链上。也许到时候,你对Channel的理解又会不一样。

理解了channel的概念,后面的就好说了。我们就先把这个基础网络搭建起来。当然,还有很多其他的概念,我们边做边讲。

实施说明

Fabric官方文档上部署和演示的例子,都是基于docker容器来运行的。

为了照顾对docker不熟悉的小伙伴,后面的内容我会把涉及docker的部分做屏蔽处理,让你们看上去好像是在虚拟机或物理机上运行似的。很贴心有没有?实际上我还是用的容器^_^ 。

当然,对docker不熟悉的小伙伴,如果是搞技术的,请一定要把这块知识空白补起来。

默认情况下,Fabric都是运行在容器环境中,因为它需要自动生成另外一个容器来运行智能合约。

不过Fabric也提供了在单独服务器上运行智能合约的方式。

对了,在Fabric中,智能合约一般称为“链码”。在后续文章中我也会这么称呼它。

搭建基础网络,分如下几步实施:

  1. 网络规划
  2. 生成证书文件
  3. 启动节点
  4. 创建Channel
  5. 加入Channel

下面我们开始吧。

网络规划

还记得我们原来定义的几个组织和角色吗?

  • M公司:债券发行人
  • R公司:证券评级机构
  • DB和BH:金融机构,买卖债券

我们对参与的组织做如下规划:

组织 域名 peer节点 所属通道 IP
M公司 m.com peer0.m.com channelBond 172.16.0.10
peer1.m.com channelBond 172.16.0.11
R公司 rate.com peer0.rate.com channelBond 192.168.10.10
peer1.rate.com channelBond 192.168.10.11
DB公司 db.com peer0.db.com channelBond 10.1.1.10
peer1.db.com channelBond 10.1.1.11

这次还没有涉及到CA,先把概念搞懂,后续再加入。

还有一个组织:BH,我们把它作为后来者,等网络建好后,演示一下如何添加新的组织。

还有一个组织负责管理orderer集群,就是中间人。为什么要引入它,原因我已经在业务场景那一章说过了。

它的组织域名叫mid.org。还记得我们的目标吗?没有中间商赚差价(隐含的意思就是,”我就是唯一的中间商”:-D)。

orderer集群做如下规划:

组织 域名 order节点 IP
mid.org mid.org order0.mid.org 172.31.10.10
order1.mid.org 172.31.10.11
order2.mid.org 172.31.10.12

TOP图如下:

拓扑图
拓扑图

Tips

如果你觉得上面的规划复杂了(毕竟是做学习和测试用的),那就把所有IP换成同一个网段。

要在电脑上完全模拟出多个真实的企业网络环境并不容易,需要有相关的网络基础知识。

不过你不用担心,我们只关注Fabric网络本身。如果你对如何模拟出真实的网络感兴趣,我会另外写文章,敬请关注!

今天就聊到这,下一篇,准备撸起袖子大干一场吧!

我是2流程序员,我们下次再贱!

本文使用 mdnice 排版