流量复制_快速体验之《gor+diffy实现线上流量复制到测试环境》

66094b54871ef17c2f2750e9837cd5a0.png

对于没有副作用的接口(重复发送不会产生两份数据、不会产生多余的监控统计等等),就可以用这种方式方便的做回归测试。 部署三个不接外部流量的服务,两份老版本、一份新版本,把生产环境的流量复制到 Diffy 上。 如果生产环境支持通过请求头之类的方式区分测试流量和真实流量,就可以扩大使用范围。

37064e6aa74de62a7d4ab678f681e549.png

启动serverA-8000

# 启动服务docker run --detach --publish=8000:80 --name=serverA nginxdocker exec -it serverA bashapt updateapt install vimvim /etc/nginx/conf.d/default.conf# 添加一个 Pathlocation /testerhome {      default_type application/json;      return 200 '{"tag":"old","noise":"1"}';}# :wq 保存退出,重载 Nginxnginx -s reload# 退出容器exit# 输出 Nginx log 到终端上docker logs -f serverA

访问 http://127.0.0.1:8000/testerhome

curl http://127.0.0.1:8000/testerhome # 可以看到返回了 {"tag":"old","noise":"1"},终端也输出了如下日志172.17.0.1 - - [13/Oct/2019:07:04:04 +0000] "GET /testerhome HTTP/1.1" 200 28 "-" "curl/7.54.0" "-" "-"

启动serverB-8010

# 启动服务docker run --detach --publish=8010:80 --name=serverB nginxdocker exec -it serverB bashapt updateapt install vimvim /etc/nginx/conf.d/default.conf# 添加一个 Pathlocation /testerhome {      default_type application/json;      return 200 '{"tag":"old","noise":"1"}';}# :wq 保存退出,重载 Nginxnginx -s reload# 退出容器exit# 输出 Nginx log 到终端上docker logs -f serverB# 再打开一个终端,启动gor流量复制sudo ./gor --input-raw :8000 --output-http http://127.0.0.1:8010

访问 http://127.0.0.1:8000/testerhome

curl http://127.0.0.1:8000/testerhome # 可以看到 8010 端口上的 serverB 也产生了访问日志172.17.0.1 - - [13/Oct/2019:07:14:04 +0000] "GET /testerhome HTTP/1.1" 200 28 "-" "curl/7.54.0" "-" "-"

启动serverC-8020

#  响应是 {"tag":"old","noise":"2"}# 启动服务docker run --detach --publish=8020:80 --name=serverC nginxdocker exec -it serverC bashapt updateapt install vimvim /etc/nginx/conf.d/default.conf# 添加一个 Pathlocation /testerhome {      default_type application/json;      return 200 '{"tag":"old","noise":"2"}';}# :wq 保存退出,重载 Nginxnginx -s reload# 退出容器exit# 输出 Nginx log 到终端上docker logs -f serverC

启动serverD-8030

#  响应是 {"tag":"new","noise":"3"}# 启动服务docker run --detach --publish=8030:80 --name=serverD nginxdocker exec -it serverD bashapt updateapt install vimvim /etc/nginx/conf.d/default.conf# 添加一个 Pathlocation /testerhome {      default_type application/json;      return 200 '{"tag":"new","noise":"3"}';}# :wq 保存退出,重载 Nginxnginx -s reload# 退出容器exit# 输出 Nginx log 到终端上docker logs -f serverD

访问 http://127.0.0.1:8000/testerhome

curl http://127.0.0.1:8000/testerhome # 可以看到 8010 端口上的 serverB 也产生了访问日志172.17.0.1 - - [13/Oct/2019:07:14:04 +0000] "GET /testerhome HTTP/1.1" 200 28 "-" "curl/7.54.0" "-" "-"

启动diffy服务

# primary  主要版本返回的结果# secondary 如果开启降噪处理,会认同这个版本接口返回的结果# candidate 要对比的版本docker run -d --name diffy-01   -p 8880:8880 -p 8881:8881 -p 8889:8889   diffy/diffy   -candidate=10.2.76.154:8030  -master.primary=10.2.76.154:8010 -master.secondary=10.2.76.154:8020 -service.protocol=http -serviceName=My-Service -proxy.port=:8880 -admin.port=:8881 -http.port=:8889 -rootUrl='localhost:8889' -summary.email="happy@a.com"访问 [http://127.0.0.1:8889]访问 [http://127.0.0.1:8889]

访问 [http://127.0.0.1:8889]

看到展示 Diffy 结果的界面

e89cda48f64da09ed544b2a2d507e4fc.png

重启 gor

这次把将 8000 端口监听到的请求复制一份转发到 Diffy 的 8880 端口

sudo ./gor --input-raw :8000 --output-http http://127.0.0.1:8880

访问http://127.0.0.1:8000/testerhome

可以看到 8010、8020、8030 端口上的三个服务都产生了访问日志

对比diffy上面的结果

aa1d3cea820faa82446be30a8dad7196.png

如果一个字段在 master.primary 和 master.secondary 上不一致,很有可能不是 bug,时间戳或者个性推荐之类的数据会这样。这时候可以 把 Exclude Noise 开关打开,排除这些“噪声”。如果一个请求过去,返回的value可以是不同的场景

419eccdb28d10a0f90444c1141c09d49.png

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

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

相关文章

顶级程序员的心得 –– Coders at Work

顶级程序员的心得 –– Coders at Work说明:这篇文章是我 2010 年的原创,但是发现 csdn 的版本把格式全部搞坏了,原文在这里 我2009年读了 “Coders at Work”, 这是作者对15 位顶级程序员的采访, 总共600页。 从采访的模式看&…

springboot 技术图谱_java后台(Springboot)开发知识图谱高频技术汇总-学习路线...

【原创】java后台(Springboot)开发知识图谱&&高频技术汇总1.引言:学习一个新的技术时,其实不在于跟着某个教程敲出了几行、几百行代码,这样你最多只能知其然而不知其所以然,进步缓慢且深度有限,最重要的是一开…

CSDN 原力 -- beta 测试中

更新 2022/8: 我们把原力等级和 “学习成就” 结合起来了。 请看: http://edu.csdn.net/me/softwareteacher 2022/7: 能用算法来判定一个 IT技术博客的质量么? 我们发布了博客质量分 API https://www.csdn.net/qc 大家可以去试一试。 2022/6&#xff1…

华为的涉外知识产权工程师_华为法务社招 | 岗位:高级知识产权工程师

//岗位一:高级知识产权工程师(网联车)//工作地点:上海岗位职责1、 负责智能车/电动车业务领域的专利包管理,为专利规划与分析,申请布局,授权应用等全流程提供专业服务;协助研发部门挖掘专利idea&#xff1b…

2021 部分团队的年终总结

博客主站: 这是 CSDN 的核心业务,持续投入,念念不忘,必有回响。 https://blog.csdn.net/weixin_42481955/article/details/121942860 社区:我们想让社区成为 IT 人的 ‘票圈’ 和 ‘公号’, 目前只是迈出…

gtx1660是什么级别的_GTX1660Ti到底属于什么系列?Nvidia一句话定性了

原标题:GTX1660Ti到底属于什么系列?Nvidia一句话定性了目前大家已经能够从不少渠道买到Nvidia最新的GTX 1660 Ti显卡了,娱乐大师将近20万的分数可以说确实挺不错,而基于图灵构架的它在玩游戏上面也丝毫不弱于GTX 1070,…

博客写作在App

测试在App 上写作博客。 今天和公司的小伙伴去山里总结工作讨论新年的计划。 1)抓住历史给开发者的机遇 2)聚焦,做出非常高质量的产品,体验和运营。做全行业第一。做最好的开发者内容和生态平台。 3)基础要打牢&#x…

C笔记 -- 一个为 IT人士打造的笔记工具

立即下载: https://plugin.csdn.net/chrome-index-help C笔记 讨论社区:https://bbs.csdn.net/forums/placard?category0&typeId23466 设想我们有这样的工具,你会使用么? 能帮助你学习么? 2022 年 9 月 28 日更…

2022年上半年部分团队的总结

CSDN 是中国 IT 人士学习,成长,成功的平台。 平台有很多小团队,不断地开发出很多小功能,运营活动,那么,半年过去了,大家做得怎么样呢? 我们看看今年上半年各团队的总结:…

参加 CSDN 一线客服工作的经历

在工位上得到的用户反馈 我加入 CSDN 后,先是远程工作,然后几经周折,终于来到 CSDN 北京总部的办公室,公司的同事为了让我尽快了解用户的心声,把我的工位安排在这个 《用户心声》 大屏幕的下方,我经常可以…

linux+mysql登录日志_Linux查看登录日志

lastlog打印系统账号最近一次的登录记录情况,解析的是/var/log/lastlog文件,它是一个data file类型的文件,文本模式打开无法正常显示。Username Port From Latestroot pts/0 171.83.37.215 Sat Jan 9 17:23:53 0800 2021bin **Never logged in**daemon **Never logged in**adm …

用户调查:给粉丝群发消息,红包,打赏的一些想法

CSDN 粉丝互动,红包,打赏的一些想法 2022/11/15 更新: 基于用户的投票和反馈,我们做了下面的更新: 1)会员每天和陌生人的发信息上限由 5 条升级为 10 条 2)会员增加一次粉丝群发的机会 3&#…

看球二三事 - 世界杯征文

征文活动链接: https://bbs.csdn.net/topics/609601920 在过期报纸上看 1982 年的世界杯,当时我们家里没有电视,晚上的时候听到马路对面的房子里传来惊呼声,也不知道为啥。 1983 年的春节前,家里要打扫房间&#xff…

vue隐藏浏览器_一分钟学会Vue的条件渲染和列表渲染

介绍之前一段时间由于工作很忙,没有时间继续学习Vue,今天算是继续对之前的学习进行补充了,今天要学习的便是Vue的条件渲染和列表渲染,我们将讨论if、if-else、if-else-if,show等。在列表渲染中,我们将讨论如…

mysql索引背后的数据结构_图解Mysql索引的数据结构!看不懂你来找我

听说微信搜索《Java鱼仔》会变更强哦!本文收录于JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦(一)关于索引索引是帮助Mysql更加高效获取数据的一种数据结构,索引的使用很简单,但是如果不能理解索引…

常见的字符函数与字符串函数介绍(1)

常见的字符函数与字符串函数介绍 前言 C语言中对字符与字符串的处理很是频繁,但是C语言中并没有字符串类型的变量,字符串通常存放在常量字符串或者字符数组中。字符串常量适用于那些对它不做任何修改的字符串函数。 函数功能简介与再实现 1、 strlen…

postman raw带文件_postman raw模拟各种http post请求

在url或者query里面传递参数这个最简单http://localhost:5000/queryhttp://localhost:5000/query/xxxhttp://localhost:5000/query/idxxx上传表单key-value数据1.使用自带的功能body设置header设置2.使用raw来模拟body设置header设置不变上传单个文件1.使用自带功能body设置hea…

找第一个只出现一次的字符_剑指offer 字符流中第一个只出现一次的字符

题目描述:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是g。当从该字符流中读出前六个字"google"时,第一个只出现一次的字符是l…

win10无法装载重装系统iso文件_win10镜像不能安装系统如何解决_win10镜像无法安装处理方法...

如今,大部分用户下载到的win10系统都是属于镜像文件,能够最大便利的让用户安装步骤简单化,可是最近有用户下载的win10系统中出现了镜像不能安装的问题,那么win10镜像不能安装系统如何解决呢?下面就来告诉大家win10镜像…

anaconda下载jupyter写python_如何安装Anaconda3和使用Jupyter

如何安装Anaconda3和使用Jupyter发布时间:2020-10-28 14:41:26来源:亿速云阅读:64作者:Leah这期内容当中小编将会给大家带来有关如何安装Anaconda3和使用Jupyter,文章内容丰富且以专业的角度为大家分析和叙述&#xff…