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

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

                 Service Analyzer 并构建依赖模型.然后查询该服务的每个版本在容器镜像仓库中是否已经存在镜像文件:如果
                 不存在,则发送镜像构建任务到 Build Center.
                    Build Center 通过 JenkinsServer 提供的 Java API 来控制 Jenkins,并提供了 autoBuild 接口,接收微服务的原
                 源码仓库地址,服务版本号以及微服务名称,然后将参数转译为 XML 形式的管道(pipeline)配置文件,并通过
                 JenkinsServer 的 createJob 接口将 XML 文件发送到 Jenkins 构建出管道.该管道包含 3 个任务.
                    •   从指定的源码仓库克隆指定版本标签的源代码;
                    •   利用 Maven 进行自动编译;
                    •   利用 docker 构建镜像容器并推送到镜像仓库.
                    全部任务完成后,Build Center 返回镜像文件地址到 Control Center,并保存入库.具体工作流程如图 4(b).
















                            (a)  服务注册信息                               (b) 服务注册流程
                                          Fig.4    Service registry description and process
                                               图 4   服务注册描述信息及流程
                 3.2.3    多版本共存路由
                    该部分由 Gateway 和 Cluster Agent 协同工作完成,如图 5 所示.






















                              Fig.5    Request routing process in multi-version coexisting microservice system
                                        图 5   多版本共存的微服务系统中的请求路由流程
                    对于实例和用户的所有请求,开发人员都需要使用 MF4MS 提供的 MVerRequestUtils.request,并携带在配置
                 文件中定义的唯一依赖项 ID 进行请求的发送,如图 2(b)所示.由于不同接口之间的数据格式不是本文的重点,
                 因此提供了一个以键值映射表为基础的 MResponse 类型来保存所有参数或返回值.所有带有版本依赖的请求
   123   124   125   126   127   128   129   130   131   132   133