一种新型的标准化测试环境管理平台
- 来源:互联网周刊 smarty:if $article.tag?>
- 关键字:DevOps,测试环境,环境管理 smarty:/if?>
- 发布时间:2022-09-25 18:39
摘要:本文对如何高效使用测试环境,满足多项目的并发需求,同时节约环境硬件成本,建立环境标准体系等问题,提供了一套完整的解决方案。该方案可以提供对测试环境总类及成本的管理,解决测试环境的创建和维护这一大痛点。
引言
随着分布式、微服务等技术的发展,主流业务系统服务通常由Web应用、中间件、数据库和许多后台业务程序组成。一般情况下,一套可独立运行的环境就是一个自成一体的小生态。例如部署了正式发布版本的生产环境,可以为用户提供持续可靠的服务。此外,还有许多环境用于产品团队日常验证,不对外部用户开放,这些环境统称为测试环境。
在环境搭建时,早期依靠人工维护测试环境的模式已经无法满足新技术对测试环境的需求,环境搭建的效率急需改善;在环境使用时,由于测试环境需要频繁部署不同版本的代码,且这些代码未经充分验证,这会导致测试环境不能正常提供服务;在环境维护时,为提高测试环境的稳定性,可以通过增加多套测试环境副本的方式控制故障的影响范围,但这也同时提高了测试环境的硬件成本。
因此,微服务架构下如何高效、低成本地进行测试环境管理,是一个具有现实研究意义的课题。
1. 现状分析
目前,在浩鲸科技长期的软件研发与项目交付过程中,测试环境的创建与维护在IaaS和PaaS层的环境自动获取都取得了一定的进展,但SaaS层还没有彻底解决,具体存在以下问题。
1.1 测试环境多,运维成本高
浩鲸科技基于微服务、容器化技术,在软件开发与交付中引入了DevOps[1]技术,研发敏捷开发平台并配置CI/CD[2]流水线,虽然提高了软件版本集成与发布的效率,但并未解决测试环境多的问题,运维成本仍然过高。
目前浩鲸科技在软件研发中主要有三套测试环境:集成测试环境(开发环境)、QA环境(测试环境)、预发环境(CD环境)。每套环境都完全独立部署在不同的主机,使用不同的数据库。一套环境搭建时间一周左右,包括研发、测试、平台、集成等。如图1所示。
1.2 环境不稳定,持续集成相互影响
由于共用一个集成环境,不同团队代码更新都会触发持续集成流水线的执行并更新测试环境,环境更新则会频繁重启系统,影响在途测试。另外,开发本地因为缺乏上下游服务,所以开发自测通常直接调用集成环境(开发环境)服务,这种开发直连的方式经常会导致公共环境不可用。
1.3 测试效率低下
开发本地服务即便注册到集成环境的注册中心(Zookeeper),由于无法确保上游服务可以精准地调用本地服务,BUG泄露到集成环境的情况也会时有发生。因此,开发5分钟,自测1小时,是典型的“最后一公里”问题。此外,公用集成测试环境为避免不同的流程产生交叉影响,无法并行构建,单次持续构建耗时在半小时以上,效率极低。
2. 解决方案
针对微服务架构下测试环境治理面临的困难,浩鲸科技提出了基于零业务入侵的全链路标识透传隔离方案,设计并实现了一个标准化测试环境管理平台(STEM,Standardized Test Environment Management platform)。
2.1 设计思路
为节约环境机器成本,可通过对业务无入侵流量隔离的方式使得环境之间能够复用,以满足多项目、多团队对测试环境的需求,建立环境标准体系。该思路参考了GIT 的分支管理策略,如图2所示。
浩鲸科技维护了一套稳定的基础环境,当需要创建新的测试环境时,只需要针对新环境和基础环境的差异部署“增量”的部分,其余部分和基础环境实现公用,两套环境的流量转发通过软件分流的方式进行隔离,互不产生影响,对于用户来说则是如同完全私有的独立环境。
具体来说,在浩鲸科技的交付流程上,包含两种特殊类型的测试环境:公共基础环境和特性环境,它们形成了具有浩鲸科技特色的测试环境使用方法。公共基础环境是一个全套的服务运行环境,通常运行一个相对稳定的服务版本。特性环境是虚拟的环境。从表面上看,每个特性环境都是一套独立完整的测试环境,由一系列服务组成集群,而实际上,除了个别当前使用者想要测试的服务,其余服务都是通过路由系统和消息中间件虚拟出来的,指向公共基础环境的相应服务。这种开发者自用的虚拟环境部署来自代码特性分支的版本,故可称为“特性环境”,如图3所示。
该方案的关键是请求的正确投递,因为不能为了某个特性环境而修改公共基础环境的路由,所以单靠正统路由机制只能实现单向目标控制,即特性环境里的服务主动发起调用能够正确路由,若请求的发起方在公共基础环境上,就无法知道该将请求发往哪个特性环境,对于HTTP类型的请求甚至很难处理回调的情况。当处于公共基础环境的服务进行回调时,域名解析会将目标指向公共基础环境上的同名服务。因此,要解决数据双向的正确路由和投递,关键在于识别请求发起人所处的特性环境和进行端到端的路由控制。这个过程与“灰度发布” [3]有几分相似,可采用类似的思路解决。
得益于浩鲸科技在中间、调用链等工具方面的积累,可以通过识别请求发起人和追溯回调链路的方式来进行路由控制。当使用特性环境时,用户需要“加入”到该环境,这个操作会将用户标识与指定的特性环境关联起来,每个用户只能同时属于一个特性环境。当数据请求经过路由中间件(消息队列、消息网关、HTTP网关等)时,一旦识别到请求的发起人当前处在特性环境中,就会尝试把请求路由到该环境中的服务,若该环境没有与目标一致的服务,才路由或投递到公共基础环境上。
2.2 功能架构
浩鲸科技基于环境复用的理念及灰度发布功能,设计并实现了STEM管理平台。
灰度发布,又名金丝雀发布,是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing[4],即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现并解决问题,以保证其影响度,同时灰度发布具有以下优点。
第一,发布过程可定义;第二,发布过程可管控;第三,发布过程可追溯;第四,发布过程可复用;第五,发布过程可观察。
STEM管理平台由测试环境管理门户、灰度发布管理、灰度发布引擎、业务网关、自动化部署、测试环境集群等组成,其功能架构图如图4所示。
2.3 工作原理
STEM的测试环境请求路由支持HTTP分流引擎与RPC分流引擎,完全复用灰度发布产品的灰度引擎。HTTP分流引擎的工作原理如图5所示。
当用户在界面创建一个灰度规则时,系统将路由规则同步到缓存服务器,Lua引擎[5]从缓存服务器加载规则。当不同的客户端发起HTTP请求时,能力开放平台根据客户请求的参数,将请求传递给Nginx服务器,Nginx服务器从Lua引擎中读取路由规则,并根据规则匹配,将请求分发给不同的环境。如图5所示,appid=123的请求会被分发给灰度环境,appid=456的请求会被分发给正式环境。
RPC分流引擎的工作原理如图6所示。
当用户在界面创建一个灰度规则时,系统将路由规则同步到缓存服务器,Dubbo引擎从缓存服务器加载规则。当不同的客户端发起dubbo请求时,能力开放平台根据客户请求的参数,将请求传递给LoadBalance服务器,LoadBalance服务器从Dubbo引擎中读取路由规则,并根据规则匹配,将请求分发给不同的环境。如图6所示,appid=123的请求会被分发给灰度环境,appid=456的请求会被分发给正式环境。
结语
浩鲸科技目前正在逐步完善基于Kubernetes的特性环境解决方案,后续将会提供更全面的路由隔离支持,并考虑将其加入公有云中,以克服在联调时将本地主机加入云上集群的难题,这也是浩鲸科技标准化测试管理平台后续探索的问题。
参考文献:
[1]Ebert C,Gallardo G,Hernantes J,et al.DevOps[J].IEEE Software,2016,33(3):94-100.
[2]What is CI/CD in DevOps?[EB/OL].[2022-08-17].https://www.jetbrains.com/teamcity/ci-cd-guide/devops-ci-cd/.
[3] What is a Canary Release?[EB/OL].[2022-08-17].https://www.jetbrains.com/teamcity/ci-cd-guide/concepts/canary-release/.
[4]张如云.A/B测试在软件项目开发中的应用探析[J].电脑开发与应用,2014, 27(5):54-56.
[5]熊军军,彭晓刚,郑晓勇,等.基于“Nginx+Lua”组件的应用系统灰度发布[J].金融电子化,2020,(5):92-94.
作者简介:何永进,微服务平台团队负责人,研究方向:大规模分布式服务治理、APM监控、基础开发平台等;卢健,硕士研究生,中级工程师,研究方向:DevOps、软件质效。
