如何实现一个好用的全链路多测试环境(HTTP篇)

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党

背景

随着公司的发展,研发的系统和开发人员会变得越来越多。但是测试环境却始终只有一个,所以久而久之,我们就发现研发经常遇到如下问题:

  1. 测试环境太少开发人员太多,一个人服务bug影响所有人测试

  1. 代码冲突增加,许多人同事代码合并到一个测试环境分支,经常存在很多代码冲突,需要花大量时间解决
  2. 有冲突的需求无法再一个测试环境进行测试,需要多个测试环境

解决思路

解决上面的问题很简单,就是部署多套测试环境,但是在在微服务系统架构下不同服务(比如我们有库存服务、商品服务、订单服务)可能是由多个团队进行开发维护的。

如果每个团队有单独的一套开发联调环境,那么每个团队不仅需要维护自己环境的微服务应用,还需要维护其他团队环境的自身所属微服务应用,效率大大降低。同时,每个团队都需要部署完整的一套微服务架构应用,成本也随着团队数的增加而大大上升

比如 订单服务需要部署的自己的测试环境,可能需要部署
productorderpay等服务多个服务

实际上订单小组可能只关心order服务,其他服务自己不关心,也不用去维护。

只需要自己在测试调用其他服务的接口的时候稳定不报错,不影响自己测试就好。

然后如果商品小组也想要自己的测试环境,也需要再部署一套如下系统

productorderpay等服务多个服务

总体成本是非常高的,那么有没有其他更省事实力的方案呢?

多测试路由架构

此时可以使用测试环境路由的架构来帮助部署一套运维简单且成本较低开发联调环境。测试环境路由是一种基于服务路由的环境治理策略,核心是维护一个稳定的基线环境作为基础环境,测试环境仅需要部署需要变更的微服务
多测试环境有两个基础概念,如下所示:

  1. 基线环境(Baseline Environment): 完整稳定的基础环境,是作为同类型下其他环境流量通路的一个兜底可用环境,用户应该尽量保证基线环境的完整性、稳定性。
  2. 测试环境(Feature Environment): 一种临时环境,仅可能为开发/测试环境类型,测试环境不需要部署全链路完整的服务,而是仅部署本次有变更的服务,其他服务通过服务路由的方式复用基线环境服务资源

各个小组需要自己的测试环境只需要关心自己系统的多测试环境,在调用其他系统的时候调用他们稳定的基线环境所有服务只需要维护一套基线环境,其他小组想要增加自己的测试环境只需要自己多部署几个自己的特性环境,而不用管其他小组的服务。

实现原理

总体实现思路如下:

我们大致实现的就是pay1调用的就是order1,如果order1不存在,则调用基线环境,即pay。这样我们就是想要多少个测试环境,就有多少个,相互依赖的服务如果没有对应的测试环境就会调用基线环境

实现技术支持

要实现上面路由我们需要如下技术支持

  1. 网关支持通过不同的标签选用不同的服务
  2. 网关和所有业务系统需要支持全链路标签传递
  3. 所有业务系统需要支持打标签

网关路由这一块我们需要通过扩展spring cloud loadbalacer的接口DelegatingServiceInstanceListSupplier来支持自定义服务路由

全链路标签透传我们需要通过skywalking进行全链路标签透传

服务pod打标我们需要通过k8s的服务发现对服务进行打标

总结

总得来说我们基于服务编排、流量染色、动态自定义路由实现了http的多测试环境。

如果我们要实现全链路,还需要实现MQxxl-job等三方中间件的多测试环境隔离

参考

  • spring-cloud-tencent 测试环境路由

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

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

相关文章

载誉前行!科士达新能源荣获光能杯卓越解决方案奖项

1月10日,由索比光伏网主办的“光能杯”光伏行业颁奖典礼在苏州隆重举行,科士达新能源凭借深厚的技术实力、强大的创新力、优质的产品及解决方案、丰富的项目经验等,斩获“卓越光储充一体化解决方案“殊荣。 作为智慧能源领域全场景解决方案供…

数据结构排序算法总结

直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 选择排序 堆排序 归并排序 1.直接插入排序 前面的有序 后面的无序&#xff0c;无序元素插入到前面的有序列表中 int len nums.length, i 1, j 0;for(i1; i<len; i){int ele nums[i];// 插入过程for(j i…

深信服技术认证“SCSA-S”划重点:逻辑漏洞

为帮助大家更加系统化地学习网络安全知识&#xff0c;以及更高效地通过深信服安全服务认证工程师考核&#xff0c;深信服特别推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…

springboot设置统一响应头——无效?接口无响应?

背景 对接一个关联方系统&#xff0c;我这边需要提供几个接口。对方要求&#xff0c;这些接口有统一的响应格式&#xff0c;并且有统一的响应头。统一的响应头包含如下&#xff1a; {"TT-Encrypt":"noaction","Content-Encoding":"gzip&q…

v-if 实现不同的状态样式

目录 一、实现思路 二、实现步骤 案例一&#xff1a; ①view部分展示 ②JavaScript 内容 ④ 效果展示 案例二&#xff1a; ①view部分展示 ②JavaScript 内容 ④ 效果展示 ​编辑 一、实现思路 通过v-for循环获取数据并进行判断该条记录中status的状态 给不同的状态赋值&am…

FDTD2018a安装问题记录

FDTD2018a安装问题记录 目录问题解决方案 目录 问题 解决方案 电脑名字如果是中文改成英文

【数据结构】C语言实现顺序栈

顺序栈的C语言实现 导言一、栈的分类二、顺序栈2.1 顺序栈的数据类型2.2 顺序栈的初始化2.3 栈的判空2.5 顺序栈的进栈2.6 顺序栈的出栈2.7 顺序栈的查找2.8 顺序栈的另一种实现方式2.9 顺序栈的销毁 结语 导言 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff0…

【数学建模美赛M奖速成系列】数据可视化(二)

数据可视化&#xff08;二&#xff09; 写在前面百分比堆叠线条图优点缺点实现pythonmatlab 火山图优点实现pythonmatlab 最后 写在前面 上一篇文章为大家分享了山脊图和气泡图的绘图方法与代码&#xff0c;这里学姐为继续为大家分享百分比堆叠线条图和火山图&#xff0c;包含…

Linux下的HTTPS配置:从证书到安全连接

在当今的互联网环境中&#xff0c;数据传输的安全性越来越受到重视。HTTPS&#xff0c;作为HTTP的安全版本&#xff0c;通过使用SSL/TLS协议来加密数据传输&#xff0c;确保了数据在传输过程中的安全。在Linux环境下&#xff0c;配置HTTPS需要从证书的生成到服务器的配置进行一…

RT-Thread入门笔记3-线程的创建

线程 RT-Thread 中&#xff0c;线程由三部分组成&#xff1a;线程代码&#xff08;入口函数&#xff09;、线程控制块、线程堆栈. 线程代码: 线程控制块 : 线程控制块是操作系统用于管理线程的一个数据结构&#xff0c; 它会存放线程的一些信息&#xff0c; 例如优先级、 线程…

[Python练习]使用Python爬虫爬取豆瓣top250的电影的页面源码

1.安装requests第三方库 在终端中输入以下代码&#xff08;直接在cmd命令提示符中&#xff0c;不需要打开Python&#xff09; pip install requests -i https://pypi.douban.com/simple/ 从豆瓣网提供的镜像网站下载requests第三方库 pip install requests 是从国外网站下…

为何劳保鞋现在如此受欢迎,这就是原因!

当代年轻人最大的消费原则&#xff0c;必须是不花半点冤枉钱&#xff0c;伴随着军大衣成为“时尚单品”&#xff0c;硬核劳保鞋也大受欢迎。今天百华小编就与大家一起看看劳保安全鞋为何如此受大众欢迎呢。 首先&#xff0c;随着人们安全意识的提高&#xff0c;对个人安全和健康…

手把手教你学会接口自动化系列十一-将用例写在json中,持久化管理起来下

上一篇我写了登录&#xff0c;我们发现json还是没有什么大问题&#xff0c;还蛮好用的&#xff0c;但是我们再写下一个&#xff0c;比如线索新建接口的时候&#xff0c;我们写着写着会发现问题&#xff1a; 我们写获取url的没有问题&#xff0c;代码如下&#xff1a; # !/usr…

vue:使用【3.0】:拖拽数据

1、参考链接&#xff1a;vue.draggable中文文档 - itxst.com 2、想要实现的效果图&#xff1a;红框内容可以拖拽 3、安装 yarn add vuedraggablenext npm i -S vuedraggablenext 4、代码 <template><draggable:list"columns"ghost-class"ghost&qu…

mac下配置git自定义快捷命令

1. 指定自定义别名 vi ~/.bash_profile open ~/.bash_profile 配置环境变量,插入类似下面的内容 alias gcgit checkout alias gmgit commit -m alias gcbgit checkout -balias gtgit statusalias gagit add .alias glggit logalias gdgit diffalias grnmgit rm node_modul…

[python]pyside6安装和在pycharm配置

安装命令&#xff1a; pip install PySide6 -i https://mirror.baidu.com/pypi/simple Pycharm配置Pyside6 打开Pycharm点击File -> Settings -> Tools -> External Tools&#xff0c;点击&#xff0b;。需要添加 Pyside6-Designer 、 Pyside6-UIC 和 Pyside6-rcc三…

新手入门Java 方法带参,方法重载及面向对象和面向过程的区别介绍

第二章 方法带参 课前回顾 1.描述类和对象的关系 类是一组对象的共有特征和行为的描述。对象是类的其中一个具体的成员。 2.如何创建对象 类名 对象名 new 类名();3.如何定义和调用方法 public void 方法名(){}对象名.方法名();4.成员变量和局部变量的区别 成员变量有初…

【MySQL高级】——索引的创建设计原则

1. 索引的声明&使用 <1> 索引分类 功能逻辑 说&#xff0c;索引主要有 4 种&#xff0c;分别是普通索引、唯一索引、主键索引、全文索引。物理实现方式 索引可以分为 2 种&#xff1a;聚簇索引和非聚簇索引。作用字段个数 索引可以分为 2 种&#xff1a;单列索引和…

无迹卡尔曼滤波(Unscented Kalman Filter, UKF):理论和应用

无迹卡尔曼滤波&#xff08;Unscented Kalman Filter, UKF&#xff09;&#xff1a;理论和应用 卡尔曼滤波是一种强大的状态估计方法&#xff0c;广泛应用于控制系统、导航、机器人等领域。然而&#xff0c;传统的卡尔曼滤波假设系统是线性的&#xff0c;而在实际应用中&#…

一篇文章带你了解接口测试(总结)

接口测试是软件测试中的一块重要部分&#xff0c;简言之&#xff0c;接口测试是指验证软件系统中各个模块间接口处的交互是否正确。 接口是软件组件之间交互的协议&#xff0c;允许不同的软件系统或模块通过明确定义的方法通信和交换数据。 一. 接口测试的重要性 在微服务架…