概述
最近项目需要对接口平台重构,但是接口来源只有一个,所以考虑了流量复制这个方式,看能不能将生产环境的流量复制到测试环境来测试。下面是先介绍下gor相关概念,然后介绍下用gor测试的其中一个实验。
01
GoReplay
GoReplay,原名叫gor,是一款go语言实现的简单安全的HTTP 实时流量复制的开源工具,用于捕获和回放实时HTTP流量到测试环境中,以便不断地用真实数据测试应用系统,可以用于增强对代码部署、配置更改和基础设施更改的信心。完美解决了 HTTP 层实时流量复制和压力测试的问题。
架构如下图所示:
从架构图可以看到,只需要http入口服务器上执行一个进程,就可以把生产环境的流量复制到任何地方,比如 Staging 环境、Dev 环境。
通过查看官网可以看到,开源版本的GoReplay只支持http,如果需要支持Thrift、protoBuffers等协议,需要购买GoReplay pro版本。
02GoReplay 的功能
GoReplay支持流量的放大和缩小、频率限制,这样不需要搭建和生产环境一致的服务器集群也可以正确测试。GoReplay 还支持根据正则表达式过滤流量,这意味着可以单独测试某个 API 服务。还可以修改 HTTP 请求头,比如替换 User-Agent, 或者增加某些 HTTP Header 。
GoReplay还可以把请求记录到文件,以备回放和分析。GoReplay 支持和 ElasticSearch 集成,将流量存入 ES 进行实时分析。
03
GoReplay实验测试
1、 实验环境
线上服务器 --> 172.26.150.134
测试服务器 --> 172.26.150.153
2、安装部署
在线上服务器上安装:
wget https://github.com/buger/goreplay/releases/download/v0.16.1/gor_0.16.1_x64.tar.gz tar xzf gor_0.16.1_x64.tar.gz
解压后即为一个名叫goreplay的二进制可执行文件。
3、离线模式
在134上执行如下命令
./goreplay -input-raw :80 -output-file requests.gor
同样也在另外一台机器上,向线上服务器发起请求
这时候查看生成的requests.gor文件:
可以看到,生成的 requests_0.gor文件即为http请求报文。
当中线上服务器执行命令时
./goreplay -input-file=requests_0.gor -output-http="http://172.26.150.153:7030"
可以看到这153服务器上的应用可以接受到请求。
4、在线模式
在134上执行如下命令
./goreplay -input-raw :80 -output-http="http://172.26.150.153:7030"
这时发送请求 curl http://172.26.150.134/ams/login
可以看到134和153上同时都收到的请求
Linux环境的话实现问题不大,不过接口平台是部署在win server上,好像gor是没有win版本的,所以这个方案还是不太可行。
后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~
本文暂时没有评论,来添加一个吧(●'◡'●)