Page 101 - 《软件学报》2021年第11期
P. 101
张富利 等:一种智能合约微服务化框架 3427
提出了一种新型的智能合约体系结构,并对其各层的关键技术进行了研究.Wang 等人的实验部分针对的是智能
合约的可扩展性与性能,并未提升智能合约部署、监控自动化水平.Sousa 等人 [30] 提出了一种基于微服务和区块
链技术的公证机构,使公证处和其他机构能够结合起来,确保各方之间信息交流的安全和迅速,并详细介绍了一
种针对所提议的业务模型的框架.该框架将核心出生证书文件上链,其他业务场景在链下执行,并使用自动化工
[5]
具进行构建.Li 等人 进行了典型案例研究,系统分析了当前区块链应用技术领域存在的挑战以及可能的解决
方法,并给出了区块链 DevOps 化、区块链微服务化的研究方向.
受 Li 等人区块链微服务化工作的启发,针对目前智能合约开发、部署以及监控等环节自动化工具不健全
等问题,本文提出一种智能合约微服务化框架.基于该框架构建起的支持平台 Mictract 能够有效整合各类支持
DevOps 的自动化工具,提升智能合约开发运维的自动化水平.
2 智能合约微服务化
2.1 智能合约微服务化框架
针对第 1 节中智能合约在开发运维中存在的问题,本节重点探寻智能合约微服务化改造,并利用支持
DevOps 的自动化工具简化智能合约的开发运维工作,提升智能合约开发运维的效率.目前,SpringBoot(https://
spring.io/projects/spring-boot)是构建微服务应用的流行框架.SpringBoot 的部署方式主要分为两种.
(1) Java 档案文件(Java archive file,俗称 jar 包)形式.开发者直接将 jar 包运行在服务器的某端口上对外提
供服务.
(2) 容器化形式.开发者将 jar 包进一步打包成容器,然后将该容器部署于集群,由集群管理容器并对外发
布服务.
图 2 展示了采用微服务容器化部署的流程,该流程拥有多种可选的自动化工具.
Fig.2 Process of deploying container-powered microservices
图 2 微服务容器化部署
由于智能合约与微服务在设计原则上的相似性,将智能合约进行解耦与容器化打包是智能合约利用支持
DevOps 的自动化工具的关键.如图 1 所示,智能合约运行在区块链网络中的节点中,智能合约与节点是强耦合关
系.这种强耦合关系使我们很难利用现有工具单独部署、监控智能合约.为此,本文提出智能合约微服务化框架,
如图 3 所示.
(1) 容器化
容器化技术有效隔离了资源,不仅能提高应用的安全性和可移植性,而且能够加速应用管道自动化和应用
部署.智能合约微服务化的目的是解耦,让系统更容易拓展、更富有弹性.将区块链网络的共识节点及智能合约
解耦,并以容器化的形式打包交给集群统一管理.与区块链网络的节点解耦后,智能合约变成无状态.智能合约
容器提供智能合约的运行环境,对外提供更加明确的接口,对网络节点提供更便捷的插拔式服务.合约本身并不
提供数据的维护管理,不关心数据的一致性、网络安全性等问题,分散、冗余且经过验证的数据管理交给下层
网络节点.
本文将智能合约和下层网络节点进行容器化改造,具有以下优势.
• 单一职责:每个智能合约容器仅需完成自身业务功能,智能合约独立开发、独立运营、独立部署、独立
升级.
• 高可扩展性:智能合约及其网络节点进行容器化编排后,对内封装编程语言,开发者可以自由选择编程
语言;对外暴露服务,当有新的智能合约需求或者对区块链网络要求升级时,仅需向集群内部增加新的
智能合约或者网络节点容器.