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

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

作者:攻心

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

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

一、测试环境可靠性

图 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://xiahunao.cn/news/3281488.html

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

相关文章

修改所属用户/用户组——chown

目录 &#xff08;1&#xff09;修改所属用户 &#xff08;2&#xff09;修改所属用户组 &#xff08;3&#xff09;修改所属用户和用户组 &#xff08;4&#xff09; 选项 -R 使用 chown 可以修改文件/文件夹的所属用户&#xff0c;所属用户组&#xff1b; 当然与 chmod …

数字人直播系统搭建能力评测!3招教你快速摸清源码厂商的真实实力?

随着数字人直播的应用场景不断拓展和应用频率的持续升高&#xff0c;其所蕴含着的市场前景和收益潜力逐渐显现&#xff0c;连带着数字人直播系统搭建的热度也迎来了新的高潮。在此背景下&#xff0c;作为非科班和研发资源有限的创业者们主要的入局途径&#xff0c;各大数字人源…

C++原创系列创斯人工智能Trons10.0.135.7911最新概念版本预告及思路总结

这次更新删掉了以前的所有代码&#xff0c;重新编写&#xff0c;只因我有了新的思路&#xff0c;以前的思路太过于原始&#xff0c;我的思路中的聊天功能如下 这只是聊天函数的原理&#xff0c;聊天函数对一句话的回答有5个到10个&#xff0c;在主函数中多次运行这个函数&#…

ruoyi vue3版本web端隐藏侧边栏及其顶部导航栏

做项目时有个需求是在web端里面嵌入一个页面全屏的大屏&#xff0c;但若依web自带的侧边栏导航和顶部导航一时还不知道怎么隐藏起来&#xff0c;于是在网上到处查找资料&#xff0c;终于&#xff0c;还是在若依的gitee文档中发现了线索 怎么隐藏侧边栏和顶部导航栏实现完全的全…

<数据集>工程机械识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;6338张 标注数量(xml文件个数)&#xff1a;6338 标注数量(txt文件个数)&#xff1a;6338 标注类别数&#xff1a;7 标注类别名称&#xff1a;[Excavator, Loader, Dumb_truck, Mobile_crane, Roller, Bull_dozer, …

微信小程序之使用智能对话服务,客服回复的跳转小程序指定页面链接无效

在微信小程序中使用了微信智能对话服务&#xff0c;客服回复的是小程序指定页面的链接&#xff0c;无法正确跳转&#xff0c;而是返回到进入客服时的页面去了 解决方案&#xff1a; 需在小程序的客服组件 button 上添加 bindcontact 监听事件即可 <movable-area class"…

【ROS 最简单教程 007/300】ROS 架构 - 目录解析 增删改查 计算图

⭐ 工作空间目录解析如下 &#xff1a; WorkSpace --- 自定义的工作空间|--- build:编译空间&#xff0c;用于存放 CMake 和 catkin的 缓存信息、配置信息和其他中间文件|--- devel:开发空间&#xff0c;用于存放编译后生成的目标文件&#xff0c;包括头文件、动态&静态链接…

MySQL基础练习题14-产品销售分析1

题目&#xff1a;获取 Sales 表中所有 sale_id 对应的 product_name 以及该产品的所有 year 和 price 。 准备数据 分析数据 题目&#xff1a;获取 Sales 表中所有 sale_id 对应的 product_name 以及该产品的所有 year 和 price 。 准备数据 ## 创建库 create database db;…

DNS查询服务器的基本流程以及https的加密过程

DNS查询服务器的基本流程&#xff0c;能画出图更好&#xff0c;并说明为什么DNS查询为什么不直接从单一服务器查询ip&#xff0c;而是要经过多次查询&#xff0c;多次查询不会增加开销么&#xff08;即DNS多级查询的优点&#xff09;&#xff1f; 用户发起请求&#xff1a;用户…

Linux 修改磁盘挂载的目录路径

确认新路径地址&#xff0c;能找到&#xff0c;或者mkdir新创建新路径&#xff0c;考虑权限 #查看当前挂载情况 df -h 卸载已经挂载的目录 umount /media/vdtest #挂载新目录 mount /dev/vdb /mnt #查询/dev/vdb的UUID blkid /dev/vdb #修改 fstab文件实现开机自动挂载&…

Spring源码解析(25)之AOP的BeanDefinitiion准备

一、AOP代码准备 aop.xml文件准备&#xff0c;代码如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance…

汇川技术|CANlink、CANopen、Profibus-DP网络编辑器的使用

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 本节学习CANlink、CANopen、Profibus-DP网络编辑器的使用。 以下为学习笔记。 01 CANlink编辑器 在AC810的【网络组态】中未看到CANlink主站的功能&#xff0c;所以先简单了解&#xff0c;等具体使用时再具体查看。 …

2025上海国际显示技术及应用创展览会

DIC EXPO2025中国&#xff08;上海&#xff09;国际显示技术及应用创展览会 时间&#xff1a;2025年8月7-9日 地点&#xff1a;上海新国际博览中心 主办单位&#xff1a; 中国光学光电子行业协会液晶分会 联合主办&#xff1a; 中国电子材料行业协会 中国电子商会 韩国…

【iOS】——持久化

在iOS开发中&#xff0c;数据持久化是非常重要的&#xff0c;因为它允许应用程序在不同会话之间保存用户数据、设置、偏好等信息。 为什么数据持久化 数据保存&#xff1a; 目的&#xff1a;将应用程序中的数据保存到非易失性存储中&#xff0c;以便在应用程序关闭或重启后仍…

对零基础想转行网络安全同学的一点建议

最近有同学在后台留言&#xff0c;0基础怎么学网络安全&#xff1f;0基础可以转行做网络安全吗&#xff1f;以前也碰到过类似的问题&#xff0c;想了想&#xff0c;今天简单写一下。 我的回答是先了解&#xff0c;再入行。 具体怎么做呢&#xff1f; 首先&#xff0c;你要确…

WIFI7在游戏领域引发的变革

随着无线技术的快速进步&#xff0c;游戏体验正变得愈加丰富、复杂和逼真。现在最新的WIFI 7技术将带来新的飞跃&#xff0c;不仅有望重新定义网络游戏的体验&#xff0c;还有可能彻底革新整个游戏产业。可以想象一下&#xff0c;在未来&#xff0c;游戏世界不再有延迟和连接中…

VirtualFlow案例 | 油箱燃油晃动模拟,高效分析管路及油箱内油面变化

在探索流体行为模拟的领域&#xff0c;CFD技术为油箱燃油晃动模拟带来了革命性的转变。通过高精度的数值模拟&#xff0c;它不仅揭示了燃油在不同工况下的复杂动态&#xff0c;还为油箱设计的优化提供了关键洞察。这一技术在航空航天、汽车制造、船舶与海洋工程等多个行业中展现…

阿里云SSO和RAM权限控制及TLS安全设计实践

阿里云SSO和RAM概述 随着企业上云的趋势越来越明显&#xff0c;阿里云提供的各类服务成为了许多企业的首选。为了确保云上资源的安全管理&#xff0c;阿里云提供了单点登录&#xff08;SSO&#xff09;和资源访问管理&#xff08;RAM&#xff09;两种权限控制机制。 企业在使…

深入浅出消息队列----【延迟消息的实现原理】

深入浅出消息队列----【延迟消息的实现原理】 粗说 RocketMQ 的设计细说 RocketMQ 的设计这样实现是否有什么问题&#xff1f; 本文仅是文章笔记&#xff0c;整理了原文章中重要的知识点、记录了个人的看法 文章来源&#xff1a;编程导航-鱼皮【yes哥深入浅出消息队列专栏】 粗…

记录下Xjar部署问题

记录下 java Xjar部署问题 XjarXjar是什么&#xff1f;静态资源问题处理 项目是部署在客户端springboot项目&#xff0c;打包jar后静态资源都范文异常 net::ERR_CONTENT_LENGTH_MISMATCH 200 Xjar Xjar是什么&#xff1f; 无需侵入代码&#xff0c;只需要把编译好的JAR包通过…