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 与证书文件、初始区块或者通道文件处于不同节点.所
   100   101   102   103   104   105   106   107   108   109   110