转转测试环境docker化实践

【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程,一周学完让你面试通过率提高90%!(自动化测试)

测试环境对于任何一个软件公司来讲,都是核心基础组件之一。转转的测试环境伴随着转转的发展也从单一的几套环境发展成现在的任意的docker动态环境+docker稳定环境环境体系。期间环境系统不断的演进,去适应转转集群扩张、新业务的扩展,走了一些弯路,但最终我们将系统升级到了我们认为的终极方案。下面我们介绍一下转转环境的演进和最终的解决方案。

1 测试环境演进

1.1 单体环境

转转在2017年成立之初,5台64G内存的机器,搭建5个完整的测试环境。就满足了转转的日常所需。一台分给开发,几台分给测试。通过沟通协调就能解决多分支并行开发下冲突问题。
在这里插入图片描述

1.2动态环境+稳定环境

随着微服务化的进行,转转的服务数量是急速扩充的。分支并行开发增多,共用环境造成的互相影响也逐渐增多。单体环境已经不能满足我们的需求。新的组织形式被提了出来。动态环境部署修改的服务和一些必要服务。稳定环境部署和线上一致的服务。同时我们开发了一个环境平台去管理环境的申请到回收的整个生命周期。阶段性的满足了我们诉求。

在这里插入图片描述

存在问题:请求进入到稳定环境之后,调用将会在稳定环境中,无法调用到动态环境的服务。导致被测服务之前的所有服务、mq的生产方都要部署到当前测试机上,即使这些服务没有任何变化,随着集群规模的继续扩大,对资源的消耗飞速增加。

1.3 动态环境+稳定环境(ip路由)

对于上面的问题,我们期望能做成请求的流量是动态环境下优先,如果没有的情况下再请求到稳定环境上,这样测试机上只部署发生了变化的服务和入口服务(必需)就可以了。随后和架构运维一起实现了ip路由的功能,就是将ip作为泳道名称向下传递。

在这里插入图片描述

这个方案上线后,资源使用量下降30%左右。在2019年上线后的两年内,转转经历了和找靓机合并,芯片供应紧张导致机器长时间无法采购到,在这个背景下,保证了转转环境的应用。但是问题也日益的凸显。

2 环境使用中的问题

图片
从大的方面来讲:系统稳定性,资源成本,使用效率三个方面互相制衡。在成本(包括采购困难)这个限制下,旧机器无法淘汰导致稳定性问题。资源不足,现存的测试机使用率就降不下来,稳定环境就无法保持内存30%空闲率的下限,稳定性就会成问题。测试环境就需要严格的回收策略,导致用户的使用体验和使用效率下降,如:到期回收和资源空闲回收,肯定会导致部分使用中的环境被回收掉,尤其是大的内存环境,对应大的项目,恢复起来慢,影响也大。已有的架构下不能做到三者兼得,或者说不能做到我们希望的妥协。具体的问题如下:

2.1 资源的不足

业务的增长和集群数量的增长,叠加服务器采购不到的情况,机器资源很紧张。测试资源池3.8T, 高峰占用率80%。剩余资源散落在20几台物理机上,导致超过40G内存的机器都是比较难申请的。

2.2 资源的浪费

在机器资源不足的情况下,还存在机器资源浪费的情况,现有的方案,机器申请下来内存是固定的,不能自动的扩容和缩容,随着环境中被测服务的逐渐上线,最新版本会被同步到稳定环境中,动态环境和稳定环境中重复的服务会越来越多。但是无法将测试资源回收到资源池之中。

2.3 稳定性问题

机器的稳定性

众所周知,测试环境的机器基本都是线上过保的机器,年龄不一,但是一般比较大,损坏是常有的事情,我们高峰期一个月损坏了5台物理机。对业务产生直接影响。

部署过程简要介绍

先简单介绍下机器启动部署过程:

在这里插入图片描述

系统的稳定性

整个初始化部署,流程7-8步,各个环境都可能出现问题,日常稳定性不足。

在上面3个方案的历史迭代中,积累了大量的历史包袱。每次部署都要要对测试配置文件中的数据库、redis、mq、zk等配置进行替换,易出错,不易维护,工程规范化不足。

在环境的构成中,环境中每次添加删除服务,都要重新计算nginx和host,依赖长,容易出错。

日常使用中,内存不足的情况下,无法自动扩容,只能重新申请环境,时间成本高。

Kvm资源方案生态差,维护成本高。

以上这些过程中的问题,每周会有25个左右环境问题反馈,我们每周都需要8h左右的运维时间。为了解决上面的问题,我们开发了系统错误分析工具,虚拟机重启工具、机器资源报警工具、机器存活监控、稳定环境整体迁移工具等众多管理员工具帮助用户和我们解决日常问题。整体来讲日常的维护成本是很高的。用户用着有很多问题,也很不爽。

3 解决方案:动态环境+稳定环境(标签路由)

3.1 解决方案

系统底层架构修改

由于以上的问题,我们和架构运维重新设计了环境平台的方案。我们最终采用了docker + 稳定环境的方案。ip路由变成了标签路由,一个环境不再是一台机器上部署多个服务,而是一个环境下,多个docker组成,多个ip组成,如下:环境yyy由服务B和D组成,ip分别为192.168.5.1和192.168.6.1。

在这里插入图片描述

这样镜像初始化、agent初始化过程被干掉。环境的大小限制不再是一个宿主机大小决定,极限情况下一个环境可以包含转转所有的服务。单个环境容量不再是问题。    通过k8s的特性,部署时会新启动一个节点,并且新节点启动成功之后,下线旧节点。保证了服务在部署过程中,服务不中断。

工程规范化

推动rd升级服务,将测试配置修改为正常的配置,从而下掉平台的配置替换。

nginx中心化

去掉每个环境上的nginx,消灭ng部署生成过程的问题。通过系统联动使用运维的中心化nginx。

host配置

推动删除不必要的公共host,在服务升级的过程中推动RPC的host调用方式升级为服务管理平台,剩余公共host采用内部dns能力进行解决。

新问题

在制定新方案的过程中,一个目标是解决之前的依赖问题,一个就是尽量减少新方案带来的使用方式上变动,减少用户使用成本。环境docker化之后最大的影响是什么呢?一、ip变成了标签,不再是唯一ip。

二、服务每部署一次,ip变一次。

ip没了,那么入口host怎么配置?ip变了,那么如何登录到机器上?如何查看历史日志?如何进行单元测试?解决方案:

转转之前有泛域名解析的能力,如app.zhuanzhuan.com带标签可以写为app-${tag}.zhuanzhuan.com。
请求whistle配置中 增加:192.xxx.xxx.xxx app.zhuanspirit.com excludeFilter://*/api reqHeaders://(Global-Route-Tag:test1234)。注:192.xxx.xxx.xxx为中心化nginx。

增加webshell 解决ip变动带来的登录成本增加。

增加历史日志查询功能,解决ip销毁后历史日志查询问题。

增加本地化标签路由的功能,解决单元测试每次输入ip的问题。变成标签设置。注:在后面的docker推广过程中,我们发现方案中,我们漏掉了远程debug场景下,ip变动的问题。最后通过开发了一个idea插件和环境平台联动解决。

新的运营方式

新的技术方案中,资源的最小管理节点由之前的一个kvm变为标签中的一个服务。在测试服务上线之后,环境平台会自动同步最新代码到稳定环境,之后将测试标签中刚刚上线的服务删除,回收资源。从而避免资源的浪费。

在这里插入图片描述

成果

部署过程缩减为:服务镜像启动 + ng配置同步。步骤极大的缩减。稳定性、效率提高。在宿主机挂掉的情况下,k8s自动调度到新的节点。进一步保证稳定性。资源成本、稳定性和使用效率三方的制衡被打破。三方面充分的得到了提高。目前:

用户问题:减少95%,并且大项目测试中,环境问题消失了。

申请时间:由28分钟到5分钟以内。

资源占用:3200G到1200G。

总结

在制定了这个方案之后,转转在架构、运维和工程效率三个部门互相配合情况下,1个月内完成开发,3个月内完成了服务升级。1年内完成了整体功能的推广。取得了丰硕的成果。

docker化之后,改变了整个环境的使用生态。现在,要用一个测试环境,申请则立即可用。过程中不再有任何心力消耗,不再有中断。并且资源管理的最小节点变为一个服务。环境系统的底层技术架构在我们看来处于业内目前的最优的方案,在系统、用户层面上做到了资源,性能和效率三者的整体性提升和平衡。整个系统是相对成熟的,可以预见的是,在未来很长一段时间内系统不需要再进行系统结构上的升级。

最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【开源】JAVA+Vue.js实现农家乐订餐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核心代码4.1 查询菜品类型4.2 查询菜品4.3 加购菜品4.4 新增菜品收藏4.5 新增菜品留言 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的农家乐订餐系统&#xff0c…

MS1030超声波流量高精度测量电路

产品简述 MS1030 是一款针对超声波流量高精度测量电路,它具有高 精度,高稳定性,高效率的特点。它的测量精度 15ps ,测量范 围 500ns  4ms4MHz 。在第一波模式情况下,内部比较器的 offset 可编程范围为 127…

type.GetFields() 获取不到,改用type.DeclaredFields

StatisticQuery 类 private Dictionary<string, DateTime> GetTBHBDate(StatisticQuery model, string field){Dictionary<string, DateTime> dic new Dictionary<string, DateTime>();DateTime TB new DateTime();//同比开始日期 &#xff08;年&#xff…

计网面试题整理下

1. HTTP常见的状态码有哪些&#xff1f; 常见状态码&#xff1a; 200&#xff1a;服务器已成功处理了请求。 通常&#xff0c;这表示服务器提供了请求的网页。301 &#xff1a; (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时&am…

揭秘测试工程师的6大必备技能!你也常遇到这个问题吗?

作为一名Tester&#xff0c;无论是面试还是工作&#xff0c;我们都常常会遇到该问题&#xff0c;毕竟现在大部分接手的项目都是中小型的项目&#xff0c;很多又是生疏行业的系统&#xff0c;所以这个问题就会常常伴随我们&#xff0c;那么遇到这个问题该怎么办呢&#xff0c;现…

淘宝1688京东商品采集API接口系列,item_get-获得淘宝商品详情

请求示例&#xff0c;API接口接入Anzexi58 商品采集API接口系列 商品搜索API&#xff1a; 功能&#xff1a;根据关键词、分类、价格范围等条件搜索商品。参数&#xff1a;关键词、分类ID、价格范围、品牌等。返回&#xff1a;商品列表&#xff0c;包括商品ID、名称、价格、图片…

【C++练级之路】【Lv.10】【STL】priority_queue类和反向迭代器的模拟实现

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C语言》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 一、仿函数1.1 仿函数的介绍1.2 仿函数的优势 二、priority_queue2.1 push2.2 pop2.3 top2.4 size2.5 empty 三、…

[Java 探索之路~大数据篇] 新时代大数据流处理入门指南

本文主要介绍大数据基础&#xff0c;以及 flink 流计算 文章目录 【基础知识】1. 批处理与流处理1.批处理2.流处理 2. 为什么需要一个优秀的流处理框架1. 股票交易的业务场景2.生产者——消费者模型3. 流处理框架要解决的诸多问题&#xff08;1&#xff09;可扩展性&#xff08…

自定义View中的ListView和ScrollView嵌套的问题

当我们在使用到ScrollView和ListView的时候可能会出现显示不全的问题。那我们可以进行以下分析 ScrollView在测量子布局的时候会用UNSPECIFIED。通过源码观察&#xff0c; 在ScrollView的onMeasure方法中 Overrideprotected void onMeasure(int widthMeasureSpec, int heightMe…

C++ 类的大小 原理+详细计算示例

大小的组成 类的大小受&#xff1a;基类&#xff0c;成员&#xff0c;虚基表指针&#xff0c;虚函数表指针 影响。 计算方式 需要按照下列要素对齐和规则计算对齐&#xff1a; 对齐要素 编译器默认对齐数 根据环境改变&#xff0c;一般32位为4&#xff0c;64位为8。 有效…

KMP算法模板

KMP算法模板 自用&#xff0c;相关题解参考

电瓶车充电安全谈|南京小区15死44伤火灾背后的思考

今年2月23日&#xff0c;南京雨花台区明尚西苑居民楼发生了一起重大火灾事故&#xff0c;在事故中&#xff0c;共有59人受到不同程度的伤害&#xff0c;遇难的有15人&#xff0c;另有44人在医院接受治疗。 南京雨花台区火灾的发生无疑是一场令人痛心的悲剧&#xff0c;这场事故…

如何在 Linux 中快速清空文件而不删除它们?

在Linux系统中&#xff0c;清空文件而不删除它们是一种常见的需求&#xff0c;特别是在需要保留文件结构或权限的情况下。本文将详细介绍如何在Linux环境中快速清空文件内容的多种方法&#xff0c;以及每种方法的优缺点。清空文件通常涉及到文件内容的擦除&#xff0c;但并不涉…

【MySQL】事务管理 -- 详解

一、前言 CURD 不加控制&#xff0c;会有什么问题&#xff1f; CURD 满足什么属性&#xff0c;能解决上述问题&#xff1f; 买票的过程得是原子的。买票应该不能受互相的影响。买完票应该要永久有效。买前和买后都要是确定的状态。 什么是事务&#xff1f; 事务就是一组 DML…

DCTNet

DCTNet http://giantpandacv.com/academic/%E7%AE%97%E6%B3%95%E7%A7%91%E6%99%AE/%E9%A2%91%E5%9F%9F%E4%B8%AD%E7%9A%84CNN/CVPR%202020%20%E5%9C%A8%E9%A2%91%E5%9F%9F%E4%B8%AD%E5%AD%A6%E4%B9%A0%E7%9A%84DCTNet/ 一个对输入图像进行频域转换和选择的方法&#xff0c;达到…

Timeout while connecting to “172.168.252.245:161

Timeout while connecting to “172.168.252.245:161” 现象 排查过程 交换机型号H3C&#xff0c;交换机采用SNMPV3协议对接zabbix&#xff0c;交换机配置如下 snmp-agent sys-info version all snmp-agent group v3 zabbix_group privacy read-view isoview snmp-agent …

本地安装部署Flask并结合内网穿透实现远程访问本地web界面

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程语…

windows下的反调试探究——调用API

NtGlobalFlag 在 32 位机器上&#xff0c;NtGlobalFlag字段位于PEB的0x68的偏移处&#xff0c;64 位机器则是在偏移0xBC位置&#xff0c;该字段的默认值为 0。当调试器正在运行时&#xff0c;该字段会被设置为一个特定的值 该字段包含有一系列的标志位&#xff0c;由调试器创…

(学习日记)2024.03.02:UCOSIII第四节:创建任务

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

【MySQL 系列】在 Windows 上安装 MySQL

在 Windows 平台上安装 MySQL 很简单&#xff0c;并不需要太复杂的步骤。按照本文的步骤操练起来就可以了。 文章目录 1、下载 MySQL 安装程序2、安装 MySQL 数据库2.1、选择安装类型2.2、检查所需组件2.3、安装所选产品组件2.4、产品配置2.5、配置高可用性2.6、配置服务器类型…