Page 119 - 《软件学报》2021年第5期
P. 119

贺祥  等:多版本共存的微服务系统自适应演化方法                                                        1343


                 DevOps 流程中部署需求.该问题如图 1(b)所示.考虑到 DevOps 是一套完整的快速交付流程,本文仅考虑 DevOps
                 流程中和服务实例部署相关的操作.
                    在本文中,我们考虑了有关云边缘环境中多版本共存微服务系统自适应演化的 3 个研究问题(RQ).
                    RQ1. 如何对微服务之间的版本依赖进行建模?由于每个微服务的版本树都是独立的,版本依赖关系会随时
                        间变化,因此对于服务系统而言,在运行时对版本依赖关系进行建模至关重要.此外,现有描述微服务
                        之间调用依赖关系的方法如 SDG 无法应对微服务的快速迭代开发.当微服务发生兼容升级时,调用
                        该微服务的其他微服务应动态扩展其版本依赖.
                    RQ2. 如何在考虑版本依的情况下得到最佳演化方案?为了满足不断变化的用户需求,考虑到每个可行的演
                        化计划都有特定的成本,例如货币成本、服务停机时间等,演化方案需要满足一定的约束条件.同时,
                        在版本依赖的约束下,应在有限的时间内得到最佳的演化方案.针对 DevOps 流程中的部署需求,需要
                        在考虑版本依赖的情况下,正确执行相关指令.
                    RQ3. 如何在版本依赖的约束下自动执行演化方案?由于多版本共存微服务系统的复杂性,该系统应具有自
                              [6]
                        适应性 :监视系统的运行时状态、决定何时以及如何演化、自动执行演化方案.在演化过程中,应保
                        证多版本共存系统中请求路由的正确性,并满足系统中各个微服务实例的版本依赖.此外,为了降低
                        系统维护的复杂度,需要能够自动化处理用户需求变化以及 DevOps 流程中部署需求,减少人工操作.
                    本文主要有 3 点贡献.
                    1)   提出了版本依赖模型(version dependency model,简称 VDM)以解决 RQ1 的版本依赖建模,该模型很好
                        地解决了迭代部署问题,同时实现了编程框架 Microservice Framework  for Microservice System
                        (MF4MS),通过将版本依赖描述集成到源代码中,可以让系统在部署之前实现服务依赖的自动分析,
                        并能够让多版本同时部署在系统中.
                    2)   提出了一系列自适应算法以解决 RQ2.这些算法在不同的应用场景中,面对不同种类的用户需求变
                        化,在版本依赖的约束条件下,找到近似最优解的演化方案,从而随着用户需求的变化而维持或者提
                        高 QoS;在处理 DevOps 流程中的部署需求时,能够自动计算依赖关系,并得到演化方案以自动执行
                        DevOps 流程中部署需求.
                                              [7]
                    3)   开发了基于 MAPE-K 模型 的微服务系统架构 Microservice Infrastructure for  Microservice  System
                        (MI4MS)以解决 RQ3.它采用自控制循环(self-control loop),可以在满足版本依赖的情况下,对不同种
                        类的用户需求变化进行服务系统的运行时监控、演化方案的生成以及演化方案的自动执行.针对
                        DevOps 流程中部署需求,能够接收来自开发者的操作指令,在考虑依赖的情况下自动执行相关指令.
                    通过对现实世界中常见的应用场景的刻画,构建了真实的云边缘环境来进行实验.结果表明:该方法在有着
                 复杂版本依赖的情况下,针对用户需求变化能够进行自适应演化,并且保持 QoS 稳定;针对 DevOps 流程中的部
                 署需求,该方法能够正确处理依赖关系并自动执行相关的 DevOps 操作,减轻了系统维护的负担.
                    本文第 1 节介绍版本依赖模型 VDM 以及自适应系统的设计.第 2 节介绍不同场景下的相关演化算法.第 3
                 节介绍编程框架和微服务系统架构的具体实现.第 4 节介绍实验设计以及实验结果.第 5 节介绍相关工作.最后
                 在第 6 节进行总结并探讨未来工作.
                 1    版本依赖模型与自适应系统设计


                 1.1   版本依赖模型
                    考虑到服务依赖关系图只能描述特定版本的微服务的 API 之间的调用依赖关系,不适用于不断变化的服
                 务依赖关系进行迭代开发,因此我们提出了基于服务依赖关系图的版本依赖关系模型.
                    定义 1. s=〈I,c,m,v〉服务系统中的服务定义,s∈S,S 是系统中的服务集合,其中,
                    •   I={i 1 ,i 2 ,…,i n },服务 s 提供的功能接口集合.每一个接口都表示为 i = 〈    f  ,,l d in ,d out 〉  ,其中,f i 表示服务的
                                                                           i   i  i  i  i
   114   115   116   117   118   119   120   121   122   123   124