当前位置: 首页 > news >正文

转转测试环境docker化实践

    测试环境对于任何一个软件公司来讲,都是核心基础组件之一。转转的测试环境伴随着转转的发展也从单一的几套环境发展成现在的任意的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变了,那么如何登录到机器上?如何查看历史日志?如何进行单元测试?解决方案:

  1. 转转之前有泛域名解析的能力,如app.zhuanzhuan.com带标签可以写为app-${tag}.zhuanzhuan.com。

  2. 请求whistle配置中 增加:192.xxx.xxx.xxx app.zhuanspirit.com excludeFilter://*/api  reqHeaders://(Global-Route-Tag:test1234)。注:192.xxx.xxx.xxx为中心化nginx。

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

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

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

  • 新的运营方式

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

  • 成果

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

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

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

  • 资源占用:3200G到1200G。

总结

在制定了这个方案之后,转转在架构、运维和工程效率三个部门互相配合情况下,1个月内完成开发,3个月内完成了服务升级。1年内完成了整体功能的推广。取得了丰硕的成果。
docker化之后,改变了整个环境的使用生态。现在,要用一个测试环境,申请则立即可用。过程中不再有任何心力消耗,不再有中断。并且资源管理的最小节点变为一个服务。环境系统的底层技术架构在我们看来处于业内目前的最优的方案,在系统、用户层面上做到了资源,性能和效率三者的整体性提升和平衡。整个系统是相对成熟的,可以预见的是,在未来很长一段时间内系统不需要再进行系统结构上的升级。

更多技术实现细节

关于作者

陈秋,转转工程效率负责人,主要负责配置管理和devops体系建设。欢迎大家留言、交流互相学习。

> 转转研发中心及业界小伙伴们的技术学习交流平台,定期分享一线的实战经验及业界前沿的技术话题。

> 关注公众号「转转技术」(综合性)、「大转转FE」(专注于FE)、「转转QA」(专注于QA),更多干货实践,欢迎交流分享~

相关文章:

转转测试环境docker化实践

测试环境对于任何一个软件公司来讲,都是核心基础组件之一。转转的测试环境伴随着转转的发展也从单一的几套环境发展成现在的任意的docker动态环境docker稳定环境环境体系。期间环境系统不断的演进,去适应转转集群扩张、新业务的扩展,走了一些…...

linux 之 ps命令介绍

哈喽,大家好,我是有勇气的牛排(全网同名)🐮 有问题的小伙伴欢迎在文末评论,点赞、收藏是对我最大的支持!!!。 前言 如过想实现对进程监控,就需要使用到ps命…...

Server端的Actor,分工非常的明确,但是只将Actor作为一部手机来用,真的合适吗?

这是一篇介绍PowerJob,Server端Actor的文章,如果感兴趣可以请点个关注,大家互相交流一下吧。 server端一共有两个Actor,一个是处理worker传过来的信息,一个是server之间的信息传递。 处理Worker的Actor叫做WorkerRequ…...

2023年美赛C题 预测Wordle结果Predicting Wordle Results这题太简单了吧

2023年美赛C题 预测Wordle结果Predicting Wordle Results 更新时间:2023-2-17 11:30 1 题目 2023年MCM 问题C:预测Wordle结果![在这里插入图片描述](https://img-blog.csdnimg.cn/e059d917333e497e90ca082605869e3c.png#pic_center) Wordle是纽约时报目前每天提…...

UE4 渲染学习笔记(未完)

原文链接:虚幻4渲染管线入门 - 知乎 从原文摘抄一下: 渲染框架 1,一套是传统的以RHICmdList为核心构建RenderPass,从RHICmdList.BeginRenderPass(...)开始,以RHICmdList.EndRenderPass()结束的框架。 2.一套是以新的Gr…...

Ajax?阿贾克斯?

一、Ajax简介 AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 不是新的编程语言,而是一种使用现有标准的创新方法。 AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网…...

项目质量要怎么保持? 如何借助系统软件进行管理

对于任何项目型的企业总是很关心项目成本的话题,但不知从什么时候开始,高质量等于高成本成了各个企业的一种潜意识。 如果交付的项目产品不符合质量标准,即使企业使用最好的项目管理工具或者每个里程碑都达到并在预算范围内完成项目&#xf…...

没有接口文档的怎样进行接口测试

前言: 在进行接口测试之前,一般开发会提供接口文档,给出一些接口参数和必要熟悉,便于我们编写接口脚本。但如果没有提供接口开发文档的请求下,我们该如何编写接口测试脚本呢?在编写测试脚本前要做哪些必要…...

Unity—游戏设计模式+GC

每日一句:"少年一贯快马扬帆 道阻且长不转弯 要盛大要绚烂要哗然 要用理想的泰坦尼克去撞现实的冰川 要当烧赤壁的风而非借箭的草船 要为一片海就肯翻万山。" 目录 状态模式: 外观模式 组合模式, 单例模式 命令模式 观察者模…...

【刷题笔记】--二分查找binarysearch

当给一个有序的数组,在其中查找某个数,可以考虑用二分查找。 题目1: 二分查找的思路: 设置left和right指针分别指向要查找的区间。mid指针指向这个区间的中间。比较mid指针所指的数与target。 如果mid所指的数小于target&…...

Python版本的常见模板(二) 数论(一)

文章目录前言质数相关质数判断求约数求取区间质数埃氏筛法线性筛法分解质因数欧拉欧拉函数求取单个数线性筛法求取欧拉定理求逆元快速幂/幂取模欧几里得算法求最小公约数拓展欧几里得算法求解同余方程前言 本文主要是提供Python版本的常见的一些与数论相关的模板,例…...

SQL快速上手(知识点总结+训练资料)

文章目录一 SQL训练资料二 SQL知识点总结1.SQL语句的执行顺序2.窗口函数3.字符串处理函数模糊查询三 SQL题目的总结一 SQL训练资料 牛客SQL题目 猴子数据分析题目 关注的公众号 猴子数据分析 二 SQL知识点总结 1.SQL语句的执行顺序 每一个子句产生的中间结果供接下来的子句…...

无需经验的steam搬砖,每天操作1小时,轻松创业赚钱!

我作为一个95后社畜,就喜欢倒腾各种赚钱的事情,8年老韭菜告诉你,副业创收一点都不难,难就难在是否找对项目,俗话说方向不对,努力白费! 什么做苦力、技能、直播卖货,电商等等对比我这…...

如何创建你的公司的FAQ页面?

很多企业考虑为公司搭建一个“常见问题”页面,作为帮助客户回答关于产品和服务的常见问题的一种方式。 FAQ页面和登录/销售页面不同,没有展现出直接的投资回报,但是为团队节省了其他成本,据了解,高达67%的客户相比于跟…...

CK-GW06-E03与欧姆龙PLC配置指南

CK-GW06-E03与欧姆龙PLC配置指南CK-GW06-E03是一款支持标准工业EtherCAT协议的网关控制器,方便用户集成到PLC等控制系统中。本控制器提供了网络 POE 供电和直流电源供电两种方式,确保用户在使用无POE供电功能的交换机时可采用外接电源供电;系统还集成了六…...

使用docker-compose部署RocketMQ5.0

简介:使用docker-compose部署rocketmq5.0。文中会介绍docker-compose版本以及需要注意的项第一步:进入hub.docker.com搜索rocketmq我们选择第一个,因为第一个是7个月前更新的,(我看有很多博客使用的依旧是最下面的那种…...

嵌入式ARM设计编程(四) ARM启动过程控制

文章和代码已归档至【Github仓库:hardware-tutorial】,需要的朋友们自取。或者公众号【AIShareLab】回复 嵌入式 也可获取。 一、实验目的 (1) 掌握建立基本完整的ARM 工程,包含启动代码,C语言程序等&…...

企业维基都说好,今天我们来看看 wiki 软件的缺点有哪些?

企业维基企业wiki和内部知识库可能看起来是一回事——但它们实际上是非常不同的软件类型。也许您可能不知道你在寻找的是知识基础软件,还是wiki软件。 无论哪种方式,缺乏知识都是生产力的巨大瓶颈。事实上,未能分享知识是财富500强企业每年亏…...

08- 汽车产品聚类分析综合项目 (机器学习聚类算法) (项目八)

找出性价比较高的车 LabelEncoder: python:sklearn标签编码(LabelEncoder) sklearn.preprocessing.LabelEncoder的使用:在训练模型之前,通常都要对数据进行一定得处理。将类别编号是一种常用的处理方法,比如把类别“电脑”,“手机…...

揭开苹果供应链,如何将其命运与中国深度捆绑

前 言 诺基亚在2007年时拥有9亿用户,在手机市场上占据主导地位,福布斯在当时以“谁能赶上手机之王?”为标题刊登了一篇关于该公司的报道,与此同时,苹果公司推出了iPhone系列产品。16年后,苹果公司以充足的…...

Mybatis 之useGeneratedKeys注意点

一.例子 Order.javapublic class Order {private Long id;private String serial; }orderMapper.xml<?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd…...

数据结构---时间复杂度

专栏&#xff1a;数据结构 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;开学数据结构&#xff0c;接下来会慢慢坑新数据结构的内容&#xff01;&#xff01;&#xff01;&#xff01; 时间复杂度前言1.算法效率1.1如何衡量一个算法的好坏1.2算法的复杂度2.时间复杂度2.1大…...

如何保证集合是线程安全的 ConcurrentHashMap如何实现高效地线程安全?

第10讲 | 如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全&#xff1f; 我在之前两讲介绍了 Java 集合框架的典型容器类&#xff0c;它们绝大部分都不是线程安全的&#xff0c;仅有的线程安全实现&#xff0c;比如 Vector、Stack&#xff0c;在性能方面也…...

C++对象模型和this指针

成员变量和成员函数分开存储&#xff1a;基本概念&#xff1a;在C中&#xff0c;类内的成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上每个空对象都会有一个独一无二的内存地址&#xff0c;所以&#xff0c;空对象占用内存空间的大小为1代码实现&#xff1a;#i…...

kubernetes教程 --Pod调度

Pod调度 在默认情况下&#xff0c;一个Pod在哪个Node节点上运行&#xff0c;是由Scheduler组件采用相应的算法计算出来的&#xff0c;这个过程是不受人工控制的。但是在实际使用中&#xff0c;这并不满足的需求&#xff0c;因为很多情况下&#xff0c;我们想控制某些Pod到达某…...

功率放大器科普知识(晶体管功率放大器的注意事项)

虽然功率放大器是电子实验室的常用仪器&#xff0c;但是很多人对于它却没有清晰的认识&#xff0c;下面就让安泰电子来为大家介绍功率放大器的科普内容以及使用注意事项&#xff0c;希望大家可以对功率放大器有清晰的认识。功率放大器可以把输入信号的功率放大&#xff0c;以满…...

CentOS 7转化系统为阿里龙蜥Anolis OS 7

转载&#xff1a;原社区CentOS 7迁移Anolis OS 7迁移手册 一、注意事项 Anolis OS 7生态上和依赖管理上保持跟CentOS7.x兼容&#xff0c;一键式迁移脚本centos2anolis.py&#xff0c;实现CentOS7.x到Anolis OS 7的平滑迁移。 使用迁移脚本前需要注意如下事项&#xff1a; 迁…...

【快速复习】一文看懂 Mysql 核心存储 隔离级别 锁 MVCC 机制

一文看懂 Mysql 核心存储 & 隔离级别 & 锁 & MVCC 机制 Mysql InnoDB 引擎下核心存储 数据&索引存储 IBD 文件 mysql 实际存储采用 B 树结构。 B 树是一种多路搜索树&#xff0c;其搜索性能高于 B 树 所有叶节点在同一深度&#xff0c;保证搜索效率仅叶节…...

面试题----集合

概述 从上图可以看出&#xff0c;在Java 中除了以 Map 结尾的类之外&#xff0c; 其他类都实现了 Collection 接⼝。 并且&#xff0c;以 Map 结尾的类都实现了 Map 接⼝List,Set,Map List (对付顺序的好帮⼿)&#xff1a; 存储的元素是有序的、可重复的。 Set (注重独⼀⽆⼆…...

XSS注入基础入门篇

XSS注入基础入门篇1.XSS基础概念2. XSS的分类以及示例2.1 反射型XSS2.1.1 示例1&#xff1a;dvwa low 级别的反射型XSS2.1.2 攻击流程2.2 DOM型XSS2.2.1 示例2&#xff1a;DOM型XSS注入1.环境部署2.基础版本3.进阶绕过2.3 存储型XSS2.3.1 示例1&#xff1a;dvwa low示例2.3.2 攻…...

wordpress 大图主题/网站制作app

Rational Jazz Team Serve这个IBM的项目管理工具貌似很强大。但是从2.0升级到3.0后配置方式有所不同&#xff0c;总结一下&#xff1a; 1、离线安装版本需要自己下载IBM Installation Manager。 2、Linux需要设置BROWSER导出变量。 3、由于java安装的问题&#xff0c;需要修改i…...

wordpress邮箱设置/网站建站开发

大一我有VB课&#xff0c;由于老师讲的太催眠&#xff0c;我基本上没听过VB课。上机课也只是打开VB6.0干一些其它的事&#xff0c;所以学没学对我来说是一样的。来到提高班我们要走向计算机专业化&#xff0c;VB是我们首先要接触的程序设计语言。米老师已经为我们讲了两节有关V…...

莆田有交做外贸网站的没/拼多多关键词排名查询软件

JS操作小数运算&#xff0c;结果莫名其妙出现多位小数问题 Number类型&#xff1a; Number类型是ECMAScript中最常用和最令人关注的类型了&#xff1b;这种类型使用IEEE754格式来表示整数和浮点数值&#xff08;浮点数值在某些语言中也被成为双精度数值&#xff09;&#xff0c…...

台州市建设招标投标网站/网络游戏推广员的真实经历

有些时候需要调用系统内部的一些命令&#xff0c;或者给某个应用命令传不定参数时可以使用该模块。初识 Subprocess 模块 Subprocess 模块提供了多个方法来运行额外的进程。在 Python2.7 的时候使用的方法主要有 call(),check_call(), check_output(),到了 Python3.5 的时候加入…...

做服务器的网站都有哪些功能/项目推广平台有哪些

触控科技CocoaChina2013秋季开发者大会今日在北京国家会议中心召开&#xff0c;触控科技CEO陈昊芝围绕“2013、2014、2015”为主题对中国手游行业的现在以及将来做了自己的分析与预测。 轻量级游戏是趋势 今年触控科技将重启大规模营销&#xff0c;近期成为“中国好声音”的标王…...

的建站网站/电商平台排行榜

Android 保存图片到系统及相关问题的解决方案参考文章&#xff1a; &#xff08;1&#xff09;Android 保存图片到系统及相关问题的解决方案 &#xff08;2&#xff09;https://www.cnblogs.com/dyllove98/archive/2013/06/15/3137522.html 备忘一下。...