测试环境领域到测试环境产品

news2024/12/23 8:20:28

测试环境领域到测试环境产品

作者:攻心

去年之前,阿里巴巴的淘天集团测试环境是以领域方式运作:不局限测试环境治理本身,从测试模式方法论及用好测试环境思路引领集团测试环境治理。领域运作最难的是“统一思想”。业务进一步细分调整后,测试环境治理策略理应由业务方自行决策,领域尽可能多的提供更好用的工具产品供业务方使用。

测试环境产品得很稳定,让用户相信环境是可靠的,其次环境部署需要高效,二者缺一不可。下面从这两个方面做一下阐述。

一、测试环境可靠性

图 1:测试环境使用示意图

从图 1 可以看出,可靠性主要有两个:

  • 路由隔离:需要精确。项目间调用乱窜,不仅会相互影响,还测非所测。

  • Stable 环境:作为基座环境必须稳定。不稳定就会影响所有依赖的项目。

1.1 路由隔离

通用的隔离逻辑:从项目环境发起的流量,下游默认调用项目环境,如果没有,就调用 Stable 环境兜底。这看似很简单,只要使用过都能理解,但要所有人都能理解(统一思想)又挺难。团队新人入职,都需要深入学习一遍。

因此环境组在上述通用逻辑基础上,做了账号与环境绑定的路由隔离产品:只要用户绑定了账号和环境的关系,这个账号所有到这个应用的请求,一定会走到绑定的环境上,而不用了解环境相关的任何业务逻辑。

图 2:路由隔离系统实现流程图

路由准确性高要求不言而喻,所以最近一年发了 120+迭代来提升路由系统稳定性,稳定性有了质的飞跃。总结如下:

  • 重构字节码增强。

  • 升级插件安装:守护进程和路由插件分离。

  • 改进自建转发路由方案。

路由稳定性提升还在持续,长尾问题如流量账号解析等还需进一步挖掘治理。

1.2 环境监控

Stable 环境作为基座环境必须稳定,因此需要对 Stable 环境进行监控。Stable 环境流量小,时有时无,和线上大流量不同,不可以通过流量下跌来判断稳定性。倘若借用线上思路,自动打大流量检测,投入产出比不高。环境组也尝试过,核心链路可行,但不具备通用性。经过这几年的实践,还是以业务视角的监控指标有用、可靠、维护成本低。

  • 检测进程、HSF 接口心跳、磁盘空间

  • 接口(http(s)/HSF)自动化巡检并断言

监控只是提前发现问题,最终还是需要解决问题,所以发现问题后,系统先进行自愈(不限于重启、磁盘清理等),后故障仍然不能消除的,报警通知责任人,走 GOC 的风险预警及故障处理流程。

监控系统还需要考虑低成本的维护,在用户不介入的前提下就有较高的监控水平。环境系统自动同步 Stable 环境的变化,在无人介入情况下,通过 fuzz 方式随机出接口测试用例并发起接口调用巡检。针对不同的环境类型,分层处理,如:fuzz 的测试用例是随机的,可以运用在线下 Stable 环境,而预发 DB 与线上共用,不能使用 fuzz 从而污染线上环境。同理,磁盘自动清理也只使用在线下。

环境的稳定,不仅仅在于服务的稳定,动态配置的一致性也至关重要。用户共用一套动态配置成本最低,而为了自己验证需要,可随意变更配置,以至于对其他用户产生影响也不自知。其他用户每次验证时不会也不可能做到 check 每个配置,就会出现“测非所测”情况。用户做不到的,由监控系统来兜底。

图 3:环境监控系统流程示意图

环境监控的业务监控逻辑也可以运用在线上环境,对线上环境监控是一个有力的补充。

1.3 可观测

环境报警后的问题排查就依赖可观测产品来快速排查与定位,好的可观测产品一定具备以下特点:

  • 链路精确,不能有节点丢失

  • 通过账号、商品、订单等业务信息能轻松获得对应的 traceId(链路 id,链路唯一标识)

  • 沉淀参数数据,覆盖通用中间件协议与子调用

  • 节点调用的路由正确性判断并有具体的分析

  • 单节点应用可以查看包含 trace 的日志集合

  • 其他特点

    访问过的 trace 自动保存,任何时候都可以访问到

    请求需要秒级展示

    安全性:有数据脱敏能力。

在实际实施过程中,具有业务定制的技术栈如:function 函数服务等都需要关联系统对接,“逢山开路、遇水搭桥”。这也是环境治理最需要坚持的事情。

二、启动加速

环境可靠是基石,基石稳定后追求的自然是高效部署;一个应用构建与部署时长超过 10 分钟,感受不强烈,但是放到淘天集团的体量对效率的影响就非常巨大。以我自己应用为例,全量部署一次在 12 分钟左右,一个 feature 开发完后的第一次部署,因为心理有预期,能接受这个时长,大不了喝杯 coffee;但是改 bug 的时候,改了一行验证也是需要 12 分钟,这就很难接受了。一天通常得部署 5~6 次,但也喝不了那么多 coffee;所以,高效部署不仅仅是高效这点收益,同时是程序员的幸福感提升。

“高效部署”这个命题,前人前赴后继做了很多的工作。去年我们环境组与阿里云 jvm 团队合作也在 cds 技术上做了研究与尝试。环境系统会自动将分支没有修改到的代码缓存起来,无需重新进行类加载,从而提升部署效率,单次部署时长缩短 30s。有一定的效果,但和总量 10 分钟相比又显的是“萤火之光”。要想达到秒级效果,还是得死磕热部署。

图 4:热部署与部署流水线结合

代码差异检测这一点,就很难做到 100%,在当下基于 dcevm 技术、爱橙科技的 fastboot 技术基础上,再新增插件能力来解决。目前的思路是通过分层的方式:

  1. 只修改方法体的代码,直接 redefine,秒级生效

  2. 文件的增删,bean 与中间件等变更借助于 dcevm 与 fastboot 技术,做到秒级生效

  3. 对于确实无法做到的热部署的,与现有的部署方式保持不变,走全量部署。

自从尝试了一下启动加速的秒级效果,有那种“天突然亮了”的感觉。启动加速还在继续丰富插件来支持更多的场景,降低第三种部署方式的次数。

三、测试数据

测试环境高效稳定,其实还不能做到高效的验证,因为测试数据也是验证过程中的关键一环。核心团队质量 TL 明确和我说:“如果能解决好测试数据构造的问题,至少我们的效率可以再提升 30%”。可见测试数据的重要性。为此进行了相关调研,结论如下:

1. 跨部门的数据构造依旧很难

2. 自己域内容易解决,但解决方案对外部门通用性不够。

3. 链路级别的数据构造基本上需要再新起应用来包一层服务来提供,成本高。

为此,环境组孵化了配置化数据构造的系统,具体的逻辑如下:

图 5:配置化数据构造示意图

配置化数据构造,提供数据构造的两大基础能力:界面化通过接口完成数据配置单配置和用户利用基础节点编码框架生成配置单。用户可以通过 Api 界面化的面包版实时构造数据,也可以通过有保鲜能力的数据池直接领用想要的数据。

数据构造最核心的是原子数据的供给。供给原子数据丰富度以及更新效率直接影响上层用户的使用,这块是任何业务都需要优先保障的事项。

四、可测性

测试环境与测试数据是研发效能问题的基座。依然存在上层可测性问题带来低效点。当然可测性问题不是某个环境特有的,只是部分环境如:线下环境可以暴力的去解决,譬如:直接 update DB、clean cache、modify Date 等快速支持让线下环境的可测性不是那么突出。在预发环境或者 SPE 环境下,因为 DB 和线上共用,使得很多解决可测性的策略都需要考虑不能产生故障这条铁律!下面以时间穿越案例做一下阐述。

4.1 时间穿越

先抛一个问题:需要做一个活动,在 3 天后的 00:00 点发一批消费券。系统代码无需改动,只需要业务同学后台进行复杂的配置即可。那将如何测试?

  • 肯定不能等到 3 天后才来验证,这样来不及测试。

  • 如果配置两套活动,一套用来验证;另外一套设置 3 天后生效。

  • 如何保证这两套活动除了时间不一样,其他都一致,这也是需要验证的

  • 如果第一套用完还没有验证完成,需要再配置一套,又需要业务同学支持,业务同学本身是用户,有自己的本职工作,本不应参与过多的技术验证。

从上述分析,问题转化为:业务同学作为用户只想有且只配置一次消费券,技术同学需要保证业务同学配置的这次消费券是正确的,能正常的发送到 C 端消费者手上。这就需要时间穿越。

很显然想到的方法,就是修改机器时间,这样带来两个问题:

  • 修改机器时间影响有所用户,就必须要独占机器,其他验证不能共用。

  • 需要重启应用,环境准备时间长,用户不能接受

因此,好的时间穿越产品就至少要必须具备以下 3 点:

  • 只针对有需要穿越的用户生效,其他用户不受影响。

  • 环境准备时间要短。

  • 是否穿越成功生效排查方便,这点又和上述的可观测系统对应上。

环境组根据用户 id,对 System.currentTimeMillis 做字节码增强,进行时间穿越,无需重启机器,环境准备时间<10 分钟。

图 6:时间穿越流程示意图

目前时间穿越产品已经支持多次大促预演,时间穿越是可测性的一个缩影,随着对研发效能的深入,相信会有更多可测性问题等着我们去解决,研发效能也将会逐步提升。

五、结语

目前的测试环境实践部分方案是基于当前的现状做了局部最优的选择,并非终态方案。有些在已有的基础上做的升级,有些依赖于架构治理的妥协选择:

  • Stable 环境稳定可靠最核心方案应该是运维等级等同于线上,如与线上一同发布、机器规格、部署策略、操作管控等。这方面能力淘天集团前几年已经完成相关的升级。

  • 可观测系统对长尾技术栈需要按部就班的接入,如果所有架构统一,也就无需多余的投入。

  • 动态配置产品在分支隔离和使用规范上做到极致,其实也无需配置巡检。

  • 如果大促活动系统可以做到业务配置活动“所配即所得”,也无需独立的时间穿越产品。

在此希望各位同仁在做任何系统的时候,在考虑“功能又不是不能用”的同时,多思考一下系统的可测性和规范统一性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1963311.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Xilinx FPGA:vivado SPI实现FLASH通信

一、实验要求 要求使用SPI协议实现对flash芯片的页编程、读操作、页擦除等功能。 二、模块划分 大概的时序图&#xff1a; 三、程序设计 &#xff08;1&#xff09;接收端模块 timescale 1ns / 1ps module uart_rx(input sys_clk ,input …

Mongodb新增文档、查询文档、更新文档、删除文档

文章目录 1、新增文档1.1、进入容器1.2、向集合插入一个新文档1.3、查询文档1.4、向集合插入一个或者多个文档 2、查询文档2.1、查询年龄等于202.2、查询年龄是20的男性2.3、查询年龄是20或者性别是男2.4、查询年龄小于232.5、查询年龄小于等于232.6、查询大于等于232.7、查询年…

新型蜜罐有哪些?未来方向如何?

前言&#xff1a;技术发展为时代带来变革&#xff0c;同时技术创新性对蜜罐产生推动力。 一、新型蜜罐的诞生 技术发展为时代带来变革&#xff0c;同时技术创新性对蜜罐产生推动力&#xff0c;通过借鉴不同技术思想、方法&#xff0c;与其它技术结合形成优势互补&#xff0c;…

Docker 搭建 Minio 容器

Docker 搭建 Minio 容器 (完整详细版) 简介&#xff1a; Minio 是一个基于Apache License v2.0开源协议的对象存储服务&#xff0c;虽然轻量&#xff0c;却拥有着不错的性能。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据。 例如图片、视频、日…

CentOS通过rsync实现文件同步(daemon方式)

rsync介绍 rsync是Liunx下的远程数据同步工具&#xff0c;可快速同步多台服务器间的文件和目录&#xff0c;并可实现增量同步以减少数据的传输。 rsync有两种常用的认证方式&#xff0c;一种是rsync-daemon方式&#xff0c;另外一种是ssh方式。 daemon 方式与 ssh 方式相比有…

Nginx代理路径被吃

Nginx代理路径被吃的情况 日常工作中经常使用nginx反向代理一些资源&#xff0c;有时正常代理&#xff0c;发现代理不过去。 验证被吃调location情况 通过浏览器访问&#xff1a; https://zhao138969.com/LinuxPackage/Python/SelectDocker location /LinuxPackage { proxy…

深度学习Day-27:生成对抗网络(GAN)入门

&#x1f368; 本文为&#xff1a;[&#x1f517;365天深度学习训练营] 中的学习记录博客 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制] 要求&#xff1a; 了解什么是生成对抗网络生成对抗网络结构是怎么样的学习本文代码&#xff0c;并跑通代码调用训练好…

【MeterSphere】3.X备份与还原

目录 一、手动备份数据库 二、备份 minio 目录 三、自动备份 3.1 设置备份服务器 3.2 创建文件夹 msdb_bak 3.3 设置备份脚本 3.4 创建用于定时任务脚本文件 3.5 为msdb_bak赋权 3.6 执行 install_ms_backup.sh 3.7 查看定时任务是否成功 四、还原数据 4.1 还原 s…

LinkedHashSet底层原理

LinkedHashSet 的特点 去重&#xff1a;不允许重复的元素&#xff0c;类似于 HashSet。有序&#xff1a;能够记住元素的插入顺序&#xff0c;类似于 LinkedList。性能&#xff1a;具有较好的平均时间复杂度&#xff0c;如添加、删除和查找操作通常都是 O(1)。 内部实现 数据…

Java全栈课程之Linux——进程管理

一、什么是进程 1、在Linux中,每一个程序都是有自己的一个进程,每一个进程都有一个id号! 2、每一个进程呢,都会有一个父进程! 3、进程可以有两种存在方式:前台!后台运行! 4、一般的话服务都是后台运行的,基本的程序都是前台运行的! 二、命令 ps 查看当前系统中正在执行的…

航空客运订票系统(数据结构与算法课设)(C语言版)

本文为数据结构与算法课设《航空客运订票系统》的分享与实践,采用了顺序表和链表两种数据结构。贴近生活采用了系统选择来区别用户和管理员。 目录 1.设计内容与要求 2.功能实现和程序调试 功能实现 函数原型清单 程序调试 3.代码实现 (1)结构体定义 (2)管理员菜单…

若依开发平台数据权限设计与实现深度剖析

概述 在之前的博客《数据权限的设计与思考》中&#xff0c;我们对软件系统的数据权限进行了全面的梳理。接下来&#xff0c;本文深度剖析主流开源的若依开发平台数据权限是怎么设计与实现的。 平台展示 在角色管理菜单中&#xff0c;在角色列表中选择一个具体角色&#xff…

【C++】实验十二

题目&#xff1a; 1、事先编好程序&#xff0c;上机调试和运行程序&#xff0c;分析结果。 将教材第11章例11.1的程序片段补充和改写成一个完整、正确的程序&#xff0c;用公用继承方式。在程序中包括输入数据的函数&#xff0c;在程序运行时输入num&#xff0c;name&#xf…

人工智能与机器学习原理精解【11】

文章目录 广义线性模型基础理论泊松分布的基本公式一、基本公式二、泊松分布的特点三、泊松分布的应用场景四、泊松分布与二项分布的关系五、总结 泊松回归例子1例子背景模型设定数据收集模型拟合结果解释预测应用场景 泊松回归例子2背景数据准备模型设定模型拟合结果解释预测 …

红外视觉简介:近红外图像与中远红外图像

在本教程中,您将学习红外成像的基础知识,包括: 什么是红外图像:近红外与中远红外红外摄像机的类型它们有什么用处什么是红外图像?近红外图像 在开始处理这种奇怪的图像之前,我们应该了解它们的来源。 我们都熟悉常见的数字彩色可见图片(图 1,左),因为我们每年都会用…

“华数杯”全国大学生数学建模竞赛含金量如何?

“华数杯”全国大学生数学建模竞赛是由华中师范大学主办的一项全国性的大学生数学建模竞赛。该竞赛旨在提高大学生的数学建模能力和实践能力,增强大学生的创新意识和团队协作精神。 搜集一些评价,有人说该竞赛的含金量较高,但是也有一些人认为其认可度不高,报名费用较贵。…

【漏洞复现】华天动力OA downloadWpsFile.jsp 任意文件读取漏洞

0x01 产品简介 华天动力OA是一款将先进的管理思想、 管理模式和软件技术、网络技术相结合&#xff0c;为用户提供了低成本、 高效能的协同办公和管理平台。 0x02 漏洞概述 华天动力OA downloadWpsFile.jsp 接口处存在任意文件读取漏洞&#xff0c;未经身份认证的攻击者可利用…

springboot民办高校科研项目管理系统-计算机毕业设计源码54009

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

Chat2DB新推Chat2Excel,让数据对话跃然纸上

Excel 智能问答 Chat2Excel 1. 创建新聊天 点击左侧AI对话&#xff0c;进入对话界面。点击加号""按钮以开始一个新的对话。 新建对话选择表格类型, 选择上传excel文档。 双击对话名称可以修改对话名称。现在我们就可以开始针对于Excel进行智能问答了。 2. 智能…

小程序开发_02项目构成

一、项目的基本结构 二、小程序的页面组成部分 三、json配置文件 ① project.config.json文件 作用&#xff1a;项目的配置文件&#xff0c;用来记录对小程序开发工具所作的个性化配置 ② sitemap.json 作用&#xff1a;是否允许被微信引擎搜索,不希望被搜索dis ③ app.jso…