为什么需要搭建多套预发环境?

发布于:2023-01-04 ⋅ 阅读:(343) ⋅ 点赞:(0)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

目前在项目开发过程中,基本上都会使用到预发环境来进行功能的测试,往往会导致预发环境上同时部署了太多的分支,造成代码的严重冲突,甚至无法解决这些冲突,对其他业务功能的测试产生影响。另外,太多的分支部署会造成业务功能的过度混合,很难达到预期的测试结果。


一、常见的几种开发环境

  • 项目环境

    项目环境也可理解为开发环境,顾名思义,开发同学开发时使用的环境,每位开发同学在自己的dev分支上编码,和其他代码是完全分离的,类似于自己的电脑在debug。数据库和日常环境是一套。

  • 日常环境

    日常环境的部署是把其他开发同学部署到日常机器上的代码和你要发布到日常的代码融合起来(merge)一起测试。融合的时候可能会存在冲突,有冲突就需要排除冲突。

    提示:项目环境可以大致理解为只部署了你自己的分支代码的日常环境

  • 预发环境

    预发环境和日常环境一样是把其他开发同学部署到日常机器上的代码和你要发布到日常的代码融合起来(merge)一起测试。融合的时候可能会存在冲突,有冲突就需要排除冲突。但预发环境区别于日常环境最大的点是,预发环境和生产环境是同一套数据库(线上的数据库环境,但数据是不通的)。而且相对日常,预发的数据更加接近真实的线上数据。预发环境和生产环境的访问域不同。 题外话:很多时候,日常环境不稳定而且存在较多的脏数据,日常实在没法测试,会跑到预发环境去测试(这也是无奈之举)。另外,有时候会在预发上进行debug,这时候可能就会影响到在预发测试的同学了(有时候就会突然断点卡住了)。

  • 灰度环境

    灰度环境其实已经是生产环境了,生产数据,所影响的也是生产环境,只是比预发环境更真实。简单地说,其实就是小范围的生产环境,还没到完全线上环境。如果出现问题,那么造成问题的原因是线上产生的,但比起完全线上环境带来的损失要小很多。(爱玩游戏的同学可以把它理解为游戏内侧、体验服等)。

    浏览器如何进入灰度环境?在浏览器中打开正式环境,按下 option + command + i 打开控制台,找到Cookie,在Cookie中添加键值对:tbversion :grey在这里插入图片描述

  • 正式环境

    即线上环境,用户使用的环境。由特定人员来维护,一般人没有权限去修改。生产环境和灰度环境的区别是:生产环境一般会部署在很多台的机器上,以防某台机器出现故障,这样其他机器可以继续运作,不影响用户使用。灰度环境只发布到其中的小部分机器上,验证观察新功能是否正常。如果失败,只需回滚这几台机器即可。

在这里插入图片描述
实际上,环境的名称只是一种形式,关键在于不同的环境之间存在一些代码、数据、服务之间的差异。以接入的数据源来说,项目/日常环境的数据库与预发/生产环境的数据库肯定不一样,这样测试使用的数据就不会污染线上数据;预发环境/灰度环境会与生产环境共用一套数据库,以便在预发环境下测试新的功能也能较真实地反映线上的情况。还有一些差异在于使用者的不同,比如预发和灰度环境都使用的是生产环境的一套数据库,但灰度环境的使用者是一小部分的外部用户(客户),而预发环境的使用者一般都是内部人员(开发/测试)。

二、预发环境的解决方案

搭建多套预发环境,多套预发环境的流量与预发的流量隔离开。
在这里插入图片描述
当部署了多套预发环境后,会根据请求是否有多套预发的标记,决定是路由到多套机器,还是公共预发环境。如果多套预发环境挂了,有标记也会路由到公共预发;如果公共预发挂了,没有标记也会路由到多套预发。
在这里插入图片描述