Page 105 - 《软件学报》2021年第11期
P. 105
张富利 等:一种智能合约微服务化框架 3431
3.1 原型平台
Mictract 作为 BaaS 平台,能够为构建区块链应用程序的人或组织提供基于云的第三方服务,允许用户在云
平台上构建、托管、运行、监控自己的区块链应用,其架构如图 5 所示.UI 层使用 React 和 ICE 实现,为用户提
供简单易操作的可视化界面.用户可以在网络管理页面根据业务与组织需要搭建定制化的网络,在通道管理页
面对搭建的网络进行通道配置,在链码管理页面为新建的通道自动化安装链码、升级链码以及操作链码,在安
全管理界面对链码进行自动化单元测试、性能测试,在监控管理与日志管理界面对运行的链码与网络进行各种
性能指标数据的收集,同时收集账本信息.账本信息中包含当前通道的区块信息以及交易信息.业务层通过
SpringBoot 实现,暴露 API 以支撑上述操作.工具层利用 DevOps 以及 HyperledgerFabric 领域相关的工具对上述
网络搭建、自动化部署、安装、升级链码、监控与日志收集、镜像容器的打包存储提供底层工具支持.持久层
利用 NFS 共享证书、账本文件.最后,整个平台与部分工具部署于 Kubernetes.Mictract 将上述功能与工具形成
工具链,支撑智能合约微服务化的开发运维工作.
Fig.5 Mictract architecture
图 5 Mictract 体系结构
将官方 Hyperledger Fabric 的网络节点镜像以及链码打包成 Docker 镜像,并将这些镜像在 Kubernetes 集群
中成功部署,是智能合约微服务化的基础,也是阻碍智能合约微服务化的主要问题.Hyperledger Fabric 2.0 引入
了链码新生命周期,链码包的格式从序列号协议缓冲消息变为由 gzip 压缩的 POSIX tape 归档,通过新生命周期
命令可以打包新类型链码包,并生成一个链码包的 id(CCID),作为环境变量注入到 Kubernetes 的 pod 容器中.如
图 6 所示,利用伪代码 1 将链码打包成 Docker 镜像.当需要部署链码时,利用伪代码 2 所示配置链码的部署文件,
拉取链码镜像并为其配置环境变量(如 CCID,容器内链码运行地址),最终生成相应的 Kubernetespod 容器作为
独立的运行单元.
如表 3 所示,将官方给出的搭建网络、外部链码部署教程进行总结与 Mictract 启动网络、部署链码原理进
行对比.智能合约容器化改造过程存在 3 个难点.
(1) Kubernetes 部署 Deployment 时,Kubernetes 在非人为指定下会选择出集群中适合运行当前 pod 资源
的一个节点,这种资源调度策略很可能使 pod 与证书文件、初始区块或者通道文件处于不同节点.所