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

启动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 结果的界面

重启 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上面的结果

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

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

  1. HTTP流量复制引流工具(web压测及线上问题复现利器)--Gor(GoReplay)

    一.有什么用 将机器http请求复制转发到指定的机器上去. 通常可能会通过ab等压测工具来对单一http接口进行压测.但如果是需要http服务整体压测,使用ab来压测工作量大且不方便,通过线上流量复制 ...

  2. TCPCopy 线上流量复制工具

    TCPCopy是一种重放TCP流的工具,使用真实环境来测试互联网服务器上的应用程序. 一.描述: 虽然真实的实时流量对于Internet服务器应用程序的测试很重要,但是由于生产环境中的情况很负责,测试 ...

  3. 微服务引擎的线上流量治理最佳实践

    简介:本实践将重点介绍如何快速集成主流开源微服务框架,实现业务零改造,解决开源框架在生产落地过程中的痛点,例如无损上下线.标签路由等,并通过托管微服务开源组件(API网关.注册中心.配置中心等)的服务 ...

  4. 使用tcpcopy导入线上流量进行功能和压力测试

    使用tcpcopy导入线上流量进行功能和压力测试 JAN 8TH, 2014 假设我们要上线一个两年内不会宕机的先进架构.在上线前,免不了单元测试,功能测试,还有使用ab,webbench等等进行压力 ...

  5. 线上流量对比应用实践

    一.流量比对提出背景 我们在进行代码重构以及需求迭代时,在上线之前需要进行一轮.二轮以及回归测试,如果业务场景比较复杂,那么就会存在以下几个方面的问题: (1)测试的周期就会相应的拉的比较长: (2) ...

  6. java线上流量复制工具_tcpcopy复制线上流量

    TCPCopy七大功能 1)分布式压力测试工具,利用在线数据,可以测试系统能够承受的压力大小(远比ab压力测试工具真实地多),也可以提前发现一些bug 2)普通上线测试,可以发现新系统是否稳定,提前发 ...

  7. 线上流量越发昂贵,如何通过裂变营销实现业务增长?

    简介: 公域流量流量越来越聚集于头部的媒体同时投放的费用越来越高.如:在游戏电商或金融行业,在广告投放拉新方面成本达到了100元左右.除了头部媒体的流量以外,在中长尾的流量上,这部分虽然成本低,但转化 ...

  8. gperftools安装使用_记一次使用gperftools优化线上程序

    gperftools的实战使用经验 项目自上线之后一直有玩家反应战斗的时候会有不太流畅的情况出现,尤其是人数多,生成战斗对象多的情况下,经过对程序的监控并没有发现什么异常,主机资源的使用上也没发现什么 ...

  9. 线上流量突增百万高可用保障方案

    一:事前预防 1.预估系统瓶颈 1.1 梳理核心接口 按调用量梳理Top100 PM按业务重要等级梳理下端可能起量的接口 输出终版的接口文档 1.2 评估核心接口最高的TPS 测试环境模拟生产环境数据 ...

最新文章

  1. 硬投票分类器(VotingClassifier)构建实战
  2. OSError: [WinError 126] 找不到指定的模块/Could not find 'cudart64_90.dll'.
  3. 金鑫是著名高校计算机,金鑫 个人简历
  4. (69)番外 —— 编写一个简易的反调试引擎
  5. 【干货下载】聚美优品、中商惠民、倍全,如何让数据驱动“新零售”落地?...
  6. JVM_03 运行时数据区[ 堆 ]
  7. 处理时间_5_计算时间列所在年的周序号
  8. JavaScript获取select下拉框中的第一个值
  9. matlab meshgrid函数_从零开始的matlab学习笔记——(28)立体图切面与三视图
  10. centos web服务器---sysctl.conf调优参数
  11. Linux运维六:用户管理及用户权限设置
  12. python 工资管理软件_Python:企业微信指量发工资条工具 -消息发送模块
  13. 备用计算机机房管理制度,计算机机房管理规定
  14. 软文写作技巧与营销的相互作用
  15. 微信支付必须是服务器,微信付款码不需要联网的原理是什么?怎么生成?
  16. 傻子都能看懂的 财务报表入门
  17. 医院排队叫号系统(JAVA版)
  18. 261期计算机开机号,福彩3D2017第261期彩吧3D开机号147
  19. Java数组中插入元素
  20. flutter/dart通过ffi调用rust代码

热门文章

  1. Python Django项目部署 Linux 服务器
  2. iOS开发-多层嵌套block中如何使用__weak和__strong
  3. WCF系列(一)BasicHttpBinding 和 WsHttpBinding 的不同点
  4. pppcloud云主机内LINUX用户安全管理2
  5. 使用ant自动生成签名的apk
  6. Effective C++ 第二版 1)const和inline 2)iostream
  7. 正则判断字符串是否为数字
  8. linux的系统移植——【PC-开发板】的环境搭建
  9. 计算机视觉——图像预处理及边缘检测
  10. java工程师的一生_百看不厌之一张图诠释程序员的一生