fabric的结构非常的复杂,这也是IBM的富贵病,经常把软件设计到复杂无比,乍一看又专业又帅气,名家之作,一上手操作起来巨费劲,讲出去没人懂,勉强用上了发现是大炮打蚊子,有用的就那么一点点,只好时间长了慢慢的死掉,比如说lotus,WebSphere,db2,甚至包括AIX, 哪样不是满满IBM风格呢?
但IBM在乎吗?不在乎,IBM的目标是:
- 抢占市场,唬住客户,拉住订单,向下一个风口出发!!!

吐槽真是简单的快乐,现在我们回归正题,来看fabric的网络结构。
本文是部署fabric网络的心法总纲
一:物理结构
我们先说一下fabric网络中,运行的物理结构,即实际运行的程序是什么。
核心的只有两个:orderer和peer。
orderer负责出块,peer负责处理业务逻辑。其相互关系为:
- 首先由orderer组成fabric基础网络,这时候就有区块链的雏形了,有共识,能出块,能够形成一条链。但是没业务逻辑
- 然后peer连接到orderer, peer负责块数据的业务逻辑,和orderer结合,形成完整网络

图中一共由三个orderer节点,两个peer节点,组成一个fabric网络
组织关系
有了运行实体,还得再增加一个概念:组织。orderer和peer可以属于不同的组织。
组织的基本应用场景是这样:fabric设计为一个联盟链,也就是多个公司都可以进入这条链共襄盛举。那么一个公司总得有自己私密数据吧,因此可以把公司当作一个组织。每个组织可以有自己的orderer,peer节点,组织间数据默认是隔离的,不允许串组织访问,但是区块链嘛,总得需要协作,因此配置后组织间节点才可以相互访问
总的说来,组织起着权限控制的基本作用
有了组织 ,就得有身份认证,fabric通过CA证书来管理身份, 同一个组织的节点,都要有相同的根证书
一般来说,生产环境中,不同组织之间,都有自己的CA证书服务器,由证书服务器生成证书,各组织之间根证书各不相同
所有市面上标准的证书都可以在项目中使用。同时fabric也提供了两个证书生成工具:
- fabric-ca。生产环境中使用
- cryptogen。测试环境中使用,用于开发测试
引入组织的概念后,fabric的物理结构中增加了CA程序

图中有三个orderer节点,两个peer节点,两个CA服务器,各自隶属于不同组织,共同组成一个fabric网络
因此fabric网络中,除去中间一些辅助工具,最后实际运行的物理程序只有三种:
- orderer
- peer
- CA
二:逻辑结构
有了物理程序,网络还建不起来,实体程序之间至少得相互通讯啊,还得需要一定的部署步骤。而要理解fabric的部署步骤,就得懂fabric的逻辑结构了
- 多个orderer节点组成network。并且维护一个配置:network configuration(也常常被叫做system channel)

2. 在orderer上安装application channel。一个application channel就相当于一条私链,fabric支持多个私链,application channel也维护自己的配置:channel configuration

3. 每个application channel(私链)都对应一个账本ledger(私链数据)。ledger对应application channel的业务逻辑。可以简单的理解为ledger和application channel是一个东西的不同表示形式

4. peer连接到Application channel后, 拥有可以访问ledger的权利

5. 在peer上安装chaincode,通过chaincode读写ledger。chaincode是ledger的访问入口,其实就相当于其他链的智能合约

6. 最终的用户user, 访问链的过程就是:
urser向peer发起请求->
peer根据请求调用chaincode->
chaincode操作ledger->
ledger数据变化被orderer同步->
同步后的数据保存在区块链数据库中->

三:部署顺序
明白了逻辑结构,当我们要部署一个fabric网络的时候,需要一些什么成员就很清楚了:
- orderer, 用于搭建fabric底层网络
- peer, 维护ledger
- Application channel和ledger, 用于创建私链
- Organization,成员间的组织
- CA服务,给组织成员颁发证书
- chaincode, 智能合约
- user,最终用户
大致部署步骤也归纳如下:
- 设计网络结构,规划组织数据,组织成员
- 部署CA服务器,给组织成员如orderer, peer,user颁发证书
- 部署orderer,配置network configuration, 启动网络(network)
- 部署application channel,配置channel configuration,启动私链
- 配置peer, 链接到channel
至此,一个完整的fabric网络就应该运行正常了,接下来就是chaincode操作了:
- 发布chaincode
- 调用chaincode, 更新或读取ledger
Next
怎么样,小伙伴们,天下有始,以知其子,这一章是理解fabric的心法总纲,您学废了吗?
纸上得来终觉浅,接下来我们来实战一把吧:
Ref
- https://hyperledger-fabric.readthedocs.io/en/release-2.2/network/network.html
回复 agodelo 取消回复