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

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


                 均由 MVerRequestUtils.request 发送到 Gateway,然后,Gateway 根据请求者以及携带的版本依赖进行请求重定向.
                 如果 Gateway 中没有针对该请求者的路由缓存,则发送请求到 Cluster Agent 进行响应实例的分配.Cluster Agent
                 通过运行阶段算法(第 3.1.2 节)为该请求者的该种版本依赖分配响应实例,分配完成后缓存分配信息,并将 URL
                 返回到 Gateway.之后,Gateway 根据路由信息重定向请求并缓存该路由信息.

                 4    实   验

                    本文的实验在由多个云服务器搭建成的云-边缘实验环境中进行,其中,5 个 8vCPU 和 16GB RAM 的 AWS
                 EC2 实例通过 Kubernetes 1.18.2 作为边缘集群,各个节点之间的延迟小于 1ms,带宽为 1000Mb/s.另外,两台 AWS
                 EC2 实例作为云服务器节点,边缘集群中的各个节点和云端之间的节点延迟为 20ms,带宽为 1000Mb/s.Control
                 Center、Service Analyzer 和 Build Center 均部署在云服务器节点上.Cluster Agent 部署在 Kubernetes 边缘群集
                 的主节点上,Gateway 部署在每个边缘服务器节点上.
                    实验中使用了根据现实中的打车、购物和支付场景实现的服务集 1 和服务集 2.集合 1 有 6 个服务,每个服
                 务具有 0~2 个依赖,且依赖关系不超过两层,即服务 A 依赖于服务 B,服务 B 不依赖其他服务;服务集合 2 对服务
                 集 1 进行了拓展,新添了 4 个新服务,且每个服务至少具有 3 层依赖.在服务集 1 和服务集 2 中,每个服务都有 2~3
                 个不同的接口,每个接口的输入和输出数据的大小随机在 1KB~20KB 之间.每个服务都有 2~3 个版本,且同一服
                 务的不同版本的版本依赖与其他版本不同.集合 1 和集合 2 中均包含 3 种依赖类型,且集合中的每个服务的同
                 时最大用户数量在 100~300 之间.
                    实验中有 2 000 个模拟用户,均匀分布在 5 个边缘服务器上.每个用户每 5s~10s 会发送具备版本依赖的请
                 求到最近边缘服务器节点上的 Gateway 实例.在本次实验中,平均响应时间和失败用户需求数量作为评估指标,
                 同时,部分实验还采用由服务停机总时长除以总运行时间得到的服务可用性来评估系统性能.在计算服务可用
                 性时,仅对受影响的服务进行计算.
                    针对用户需求变化,服务升级以及用户新需求的提出是现实中较为常见的应用场景.在服务升级场景中,用
                 户需求会随着服务的升级而不断发生变化;在用户新需求提出的场景中,开发者通过不断更新服务来满足用户
                 的新需求.这两种场景均能够很好地表征用户需求的变化,因此我们分别对这两种场景进行实验.考虑到现有算
                 法不适合该问题,因此,本文通过对现实世界中的两种常见场景的模拟,对该系统进行评估.针对开发者敏捷
                 DevOps 流程中的部署需求,我们针对多种不同的需求类型分别进行了实验进行对比.本文中所提及的新需求均
                 指系统服务库中存在服务能够满足的或者开发者将要推出新服务能够满足的用户需求,没有对应服务能够满
                 足的用户新需求不在本文考虑范围.
                 4.1   普通用户需求变化

                 4.1.1    场景 1:服务升级
                    考虑到服务升级是现实世界中较为常见的场景,我们分别使用实验集合 1 和集合 2 对该种场景进行了模拟
                 实验.系统中的普通用户被分为 3 类:在服务的新版本发布后立刻更新相关需求至最新版本;在新版本发布后的
                 随机时间内保持原需求不变,然后变更为最新需求;相关需求不随服务更新变化.系统自演化的时间窗口设置为
                 5 分钟,具体实验结果如表 1 及图 6(a)、图 6(b)所示.
                                     Table 1    Service availability of Experiment 1~Experiment 3
                                              表 1   实验 1~实验 3 的服务可用性
                                        实验       服务失效总时长(分钟)           服务可用性(%)
                                         1              3.0                95
                                         2              2.5               95.83
                                         3              28                53.33

                    实验结果表明:当系统检测到失败用户需求的出现后,系统会进行自动演化以满足失败的用户需求,进而提
                 高 QoS.系统演化结束后,针对之前失败的用户需求,部署了相关的服务实例,并确保它们的版本依赖得到满足,
   124   125   126   127   128   129   130   131   132   133   134