Page 121 - 《软件学报》2021年第5期
P. 121
贺祥 等:多版本共存的微服务系统自适应演化方法 1345
依赖关系.
(2) 提供对服务的功能接口的功能以及服务质量的描述功能,开发者可以通过注解等方式为服务的每个
接口注明功能及质量信息.
(3) 提供发起具备任意类型的版本依赖关系的请求功能,考虑到 VDM 对现有的微服务依赖关系进行了
拓展,以及已有的编程框架无法满足 VDM 的需求,MF4MS 需要提供相关接口允许在请求过程中携带
额外的版本依赖信息.
(4) 提供集成与未集成 MF4MS 服务实例的区分能力.对于未使用该框架的服务实例,系统不应该将其纳
入管理范围内,不能够对其进行任何操作.
(5) 支持运行时的依赖修改.运行时能够通过特定接口对服务实例的依赖关系进行更新而不需要修改源
代码、重新编译打包、停止旧实例并部署新实例.
此外,编程框架还需要尽量降低开发者对现有代码迁移的负担.
1.2.2 系统架构
MI4MS 旨在借助 MAPE-K 模型让微服务系统具备自适应能力,系统可以自动检测用户需求变化,生成演进
计划,并自动执行计划,如图 2 所示.考虑到不同微服务有着不同的运行环境,MI4MS 使用容器运行每个微服务
实例,并使用 Kubernetes 搭建边缘侧容器集群.
Fig.2 Overview of the MI4MS
图 2 MI4MS 示意图
MI4MS 有 5 个主要组件.
• Control Center.在 MI4MS 中起主要作用,负责控制整个服务系统.它采用了 MAPE-K 模型,并实现了自
适应控制循环:在运行时监视系统状态,分析系统当前 QoS 情况以及用户需求变化,通过自适应算法计
算出合适的演化方案,最后自动执行方案.该组件应该部署在云端的任意节点上.
• Service Analyzer.旨在分析符合编程框架 MF4MS 规范的微服务源代码,自动从中抽取 3 种类型的服务
依赖信息,同时与 Control Center 协作进行版本依赖模型的构建.该组件应该部署在云端节点上.
• Cluster Agent.负责借助 Kubernetes API Server(https://kubernetes.io/docs/concepts/overview/components/
#kube-apiserver)和服务注册中心 Registry(https://microservices.io/patterns/service-registry.html)来获取
边缘集群的部署状态,并将收集到的信息传递到 Control Center.同时,它需要接收来自 Control Center 的