Page 107 - 《软件学报》2021年第11期
P. 107

张富利  等:一种智能合约微服务化框架                                                             3433


                    Mictract 目前主要对运行中的智能合约容器进行两方面监控.
                    (1)  资源消耗,利用 Prometheus 对智能合约及其网络节点容器进行资源节点收集.采用 Prometheus 提供的
                        强大的查询能力以及灵活查询接口节点的资源消耗如 CPU、内存、磁盘、网络 I/O 进行收集,时刻
                        监控智能合约的运行状态.
                    (2)  对于交易过程监控,集成 HyperledgerFabric 原生采集区块信息的方式,查询链上区块信息,如区块高
                        度、某区块具体信息、某区块包含的交易等.
                 3.2   案例研究
                    为了验证本文提出的智能合约微服务化框架及原型平台 Mictract 可行性,本文需要选取合适的案例,使用
                 Mictract 对其进行托管、运行、监控,并保证其运行的正确性.本文最终选取官方给出的示例链码 Marbles
                 (https://github.com/hyperledger/Fabric-samples)进行操作,其支持 levelDB 的功能见表 4.
                                                  Table 4  Marble functions
                                                     表 4   Marbles 功能
                     编号             名称                   参数                        作用
                                                     marbleName,color,   为 owner 分配一颗名为 marbleName、
                      F1          initMarble
                                                       size,owner         大小为 size、颜色为 color 的弹珠
                      F2         transferMarble    marbleName,newOwner  将名为 marbleName 的弹珠移交给 newOwner
                      F3    transferMarblesBasedOnColor  color,newOwner  将颜色为 color 的全部弹珠交给 newOwner
                      F4            delete             marbleName          销毁名为 marbleName 的弹珠
                      F5          readMarble          marbleName           获取 marbleName 的相关信息
                                                      marbleName1,         获取名称位于 marbleName1 与
                      F6       getMarblesByRange
                                                      marbleName2          marbleName2 之间的弹珠情况
                      F7       getHistoryForMarble    marbleName          获取 marbleName 的资产转移情况
                    本文选择了 5 名志愿者,使用 Mictract 搭建区块链网络并部署链码.选取的 5 名志愿者具备基本软件开发的
                 经验和能力,且有区块链网络搭建和区块链应用的开发经验.由于目前基于 HyperledgerFabric 的开源 BaaS 平台
                 基本处在研发当中(例如 Cello(https://github.com/hyperledger/cello)),功能都不完备,所以本次案例研究仅考虑官
                 方推荐的脚本方式部署以及 Mictract 对区块链网络及链码分别部署、升级.本文考虑并排除了一些影响公平性
                 的因素,如:在实验中使用相同的机器,并且 HyperledgerFabric 所必需的网络节点、证书节点、客户端节点镜像
                 提前下载完成.本文希望志愿者们自由搭建不同规格的区块链网络,但规定每一个网络只创建唯一通道.通道
                 (channel)是链码运行的具体环境,相同的通道就意味着拥有相同的账本.这 5 名志愿者中,最终使用 Mictract 搭建
                 了 5 种不同结构的区块链网络,网络规格如后文表 8 所示.
                    志愿者操作 Mictract 过程如下:(1)  利用网络管理的界面搭建网络.志愿者们可以在网络管理界面定制不同
                 规格的网络结构,即选取不同数量的 order 节点个数、组织(Org)个数、peer 节点个数.(2)  利用通道管理界面创
                 建通道.志愿者们需选择要创建通道的网络及相关节点.(3)  利用链码管理界面安装链码.本文按照表 2 中 S5 的
                 描述修改 Marbles 链码,并编写好 Dockerfile 与部署的 yaml 模版,将其推送至代码托管平台,并将镜像地址交给
                 志愿者们.在链码管理界面,志愿者们只需选择需要安装链码的通道并填写好链码地址,即可完成链码的安装.
                    图 7 所示为志愿者 A 搭建的区块链网络架构图.该网络拥有 2 个 order、2 个组织、2 个 peer 节点.每个 peer
                 节点都含有一个相同的名叫 mychannel 的通道,志愿者 A 将 Marbles 链码安装在该通道内.表 5 为志愿者 A 在网
                 络搭建完成后,Kubernetes 集群所拥有的 Pod 情况.由于表格长度限制,故将信息简略描述.为体现 chaincode-
                 marbles-org1 的高可用,表 5 中将 chaincode-marbles-org1 设为 3 个副本.Pod 是 Kubernetes 系统的基础单元,是用
                 户所创建或部署的最小组件.表 5 中:“pod name”描述的 Pod 的名称;“ready”表示准备好的副本数量;“status”表明
                 Pod 所处的生命周期,“Running”表示该 Pod 已经被成功调度运行;“node”表示 Pod 所在的集群节点的名称,Pod
                 所在的 dop-node2 和 dop-node3 两个节点是随机的.
                    Mictract 可以对运行时链码进行操作,并且每当执行一次交易时,Mictract 都能同时捕获到当前通道中的区
   102   103   104   105   106   107   108   109   110   111   112