流量复制_快速体验之《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…

CSDN 统一标签设计 征求反馈

2021/4/21 更新: 这个设计文档签入了 repo:https://codechina.csdn.net/csdn/csdn-tags 如果你想增删改标签,请去提PR。 CSDN 在长期发展中,各个业务发展出各有特色的标签定义和用户体验,这个博客的目的是想把这些…

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

//岗位一:高级知识产权工程师(网联车)//工作地点:上海岗位职责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…

mysql 检查_检查MySQL的健康状况

MySQL提供了大量的变量、参数以用于性能及健康状态检查。现在让我们一起看看那些比较重要的变量、参数。1MySQL是否可用?这当然是首先要做的,如果你的MySQL服务都没在跑了,其它监控从何谈起?我们可以使用如下几条命令来查看当前My…

技能树发布的新闻稿

技能树发布的新闻稿 (这是2021年7月构思的产品) 按照 “working backwards” 和 以终为始 的思路,先写一个新闻稿,和关于这个产品的问答。 描述我们的产品最终能产生什么效果和影响,再回过头来推动设计和技术工作&…

mysql slave同步_Slave_SQL_Running: No mysql同步故障解决方法

Slave_SQL_Running: No mysql同步故障解决今天检查数据库发现一台MySQL Slave未和主机同步,查看Slave状态:mysql> show slave status\GSlave_IO_Running: YesSlave_SQL_Running: NoLast_Errno: 1062....Seconds_Behind_Master:NULL原因:1.…

php mysql 反斜杠_MySQL中如何插入反斜杠,反斜杠被吃掉,反斜杠转义(转)

问题描述:mysql中带有反斜杠的内容入库后,发现反斜杠无故失踪了(俗话说被吃掉了)例:插入insert into tb(url) values(absc\eeee); 结果数据库里的内容是:absceeee(反斜杠没了呢)这么详细了相信大家都搞清楚问题了吧,下…

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

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

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

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

mysql 安全删除_mysql的binlog安全删除的一种方法

指定过期天数(expire_logs_days) ---适用于单机版mysql!该参数为全局可动态调整参数,默认值为0,即关闭,取值范围0-99。1.3.1 参数的查看:mysql> show variables like expire_logs_days;-------------------------| …

参加 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&#…

mysql的DbUtils_Dbutils操作mysql

大家好!我使用CommonDBUtils操作mysql数据库!可以执行select语句,但是不能执行insert语句一下是出错代码[colorred]java.sql.SQLException: Feature not implemented Query: insert into Computer_Ignorance_Article(CIA_Title,CIA_Link,CIA_…

看球二三事 - 世界杯征文

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