一 、背景
去哪儿旅行非常重视测试环境治理,提高开发和测试人员的使用效率。从 2018 年就开始了测试环境治理和优化之路,到目前为止总共进行了三轮环境治理和优化。
1. 测试环境1.0
环境 1.0 中使用的固定环境,总共有十台固定机器组成,每台机器部署全链路的环境,但随着业务不断发展,原有环境已经不能满足需求:
-
随着微服务越来越多,人工在 beta 机器上维护越来越难;
-
环境有限,经常出现环境争抢,导致环境使用效率低下。
2. 测试环境2.0
测试环境 2.0 使用了基础研发自研的 noah 环境管理系统(下面简称 Noah ),通过模板化解决测试环境微服务应用的管理问题。所有环境信息(应用配置,数据库,配置)都在模板中维护。
需要创建环境时,使用最新的模板数据构建全新环境:
-
创建环境速率的提升,从配置一套固定环境的几天到 noah 拉起一套酒店环境 30 分钟左右(整个环境约 200+ 服务(应用+数据库/ redis / es ));
-
随着环境交付速率提升,每个项目可以单独创建一套环境,减少环境争抢和干扰现象。
3. 测试环境3.0
测试环境 2.0 在同规模环境管理/创建方面已经做到行业前列,在 2021 年进行环境效率摸底,收集环境使用痛点问题,准备进行下一轮优化。
问题主要有:
-
排查问题很难,全链路的问题排查耗费时间长;
-
测试环境机器服务容易宕机;
-
创建环境是不是能更快一点,等待时间还是有点长。
将大家使用遇到的痛点问题归纳成三类问题(交付效率,基础可靠性,业务连通性):
二、环境 3.0 设计
1. 交付效率如何提升
1.1 交付效率提升分析
在环境 2.0 阶段,酒店同规模环境创建速率已经达到行业前列(200模块/30分钟交付)。
如果想进一步提高环境交付速率,有两种思路:
-
提升单个模块构建时间;
-
降低模块规模。
第一个方案,和基础研发同学分析一下,单个模块的时间优化空间不大(投入时间长收益较少), 最终我们选择从第二个思路开始优化,是否能够降低单个环境的应用规模。
而在实际项目中,项目环境其实并不需要全部模块,我们可以让项目环境按需拉取所需要的模块即可,这种方式既可以降低整体创建时间,也可以提高测试环境资源利用率。
1.2 软路由提升交付效率
这里需要介绍下软路由机制,软路由环境主要包含两部分:
-
基准环境, 基准环境是一套全链路的稳定环境,当线上代码发布的时候,基准环境代码也会同步更新;
-
软路由环境,软路由是我们日常使用的项目环境。每个项目都只需要按需拉取自己使用的模块即可,缺省的模块会由基准环境的稳定服务代替,组成一套互不干扰的软路由环境。
1.3 软路由的整体方案
软路由方案整体包括两大核心功能, 环境绑定 和 流量分发:
1.3.1 环境绑定功能
环境使用者通过 Noah 环境绑定工具将 uid (去哪儿用户标识,下称 uid )和环境绑定,建立环境绑定关系并存储。绑定完环境后,请求到网关(openresty)时读取环境绑定关系,将 uid 转换成环境标识,然后将环境标识植入 HTTP Header 中,方便后续的流量分发。
1.3.2 软路由环境的流量分发
流量分发中涉及 or/dubbo/qmq(去哪儿消息中间件)三个中间件,主要分为服务感知和服务选择两个步骤:
(1) 服务的感知
核心思路是将环境信息统一上报,方便后续路由选择。
Or:所有环境入口使用同一套域名(比如 ortest.qunar.com ),在环境创建/更新时新增/更新 对应的upstream