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 都能同时捕获到当前通道中的区