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

1342                                     Journal of Software  软件学报 Vol.32, No.5,  May 2021

                 execute the evolution plan. Experiments show that the proposed approach performs well on service down time, service availability, and
                 the developers’ cost of DevOps coping with self-adaptation in the situation where complicated version dependencies exist.
                 Key words:    microservice systems; multi-version coexistence; version dependency; self adaptation; user requirement changes; DevOps

                                                                                                     [2]
                                                    [1]
                    在当今的一些诸如智慧城市(smart city) 等较为复杂的计算场景中,由于容器技术和微服务架构模式 在
                                                     [3]
                 持续交付、敏捷开发以及 DevOps 方面的优势 ,随着计算场景中的业务逻辑变得越来越复杂,容器技术和微服
                 务架构模式受到越来越多的关注.然而,微服务的独立开发和部署,导致它们之间可能存在复杂的依赖关系.微
                                                                                     [4]
                 服务通过 API 相互通信,它们之间存在的调用依赖关系可表示为服务依赖关系图(SDG) .将某个微服务升级到
                 新版本后,它的调用依赖关系可能会变化,依赖于该微服务的其他微服务可能会由于不能向前兼容的升级而无
                 法正常调用.考虑到某些用户会请求特定的旧版本,微服务开发人员无法更新系统中已部署的所有微服务实例.
                 因此,同一个微服务会有多个不同版本在系统中同时部署,这称为多版本共存(multi-version coexistence).在多版
                 本共存的微服务系统中,不同微服务的不同版本之间有着不同的依赖关系,这种复杂的依赖关系称为版本依赖
                 (version dependency),如图 1(a)所示,服务 S1 在版本 v1 时,依赖服务 S2 的 v2,v3 版本.而当服务 S1 升级至 v3 版
                 本后,依赖变为服务 S2 的 v3,v4 版本以及服务 S3 的 v2,v3,v4 版本.


























                              (a)  版本依赖                                 (b) 系统架构概观
                                  Fig.1   Introduction for multi-version coexisting microservice system
                                              图 1   多版本共存的微服务系统介绍
                    这种复杂的微服务系统面临着频繁的演化需求.
                    •   一方面,此类系统往往存在着大量的用户和服务,且用户需求处于时刻变化中.而系统无法对变化的用
                        户需求作出及时响应,导致系统的服务质量(QoS)下降.由于多版本共存导致版本依赖性的复杂性增
                        加,在边缘计算的微服务场景中,如何在复杂版本依赖的情况下让服务系统对用户需求变化作出及时
                        响应,成为了一个新的挑战.为此,需要形成一个针对需求动态变化的演化方案.
                    •   另一方面,开发者为了完善系统,不断在 DevOps 流程中提出需求,如部署新服务、管理现有实例等操作.
                        服务之间复杂的版本依赖,让一项 DevOps 流程中部署需求的实现不再是原子的,而是可能影响到其他
                        微服务的其他版本的 DevOps 流程中部署相关的操作,增加了开发者运维微服务系统的负担.
                    综合起来,考虑到系统中大量的用户、服务以及依赖关系,在云边缘环境中的微服务系统应能够在满足版
                                                                           [5]
                 本依赖的情况下:(1)  针对用户需求变化进行自适应演化以保持 QoS 稳定 ;(2)  正确和自适应地满足开发者的
   113   114   115   116   117   118   119   120   121   122   123