1.在线引流生成后台
日常的大部分测试工作都是在测试环境中,通过模拟用户的行为来验证系统,包括功能和性能。在此过程中,您可能会遇到以下问题:
在线引流解决方案的出现为上述问题提供了很好的解决方案。线上引流的本质是通过将真实的线上流量复制到线下环境来解决测试环境模拟不足的问题。真实的或未充分涵盖的问题。
2.在线引流常用解决方案
目前很多公司对在线引流方案进行了很多实践探索,常见的引流方法有以下四种(不限):
引流实现方式的优缺点
Nginx 层流量复制
安装lua-nginx-,,-more-nginx-模块,通过lua脚本将请求复制到测试环境。
安装部署也比较简单。
需要开发lua脚本,占用了一些资源。
引流 基于业务代码层
将业务代码的调用封装到请求对象中,异步写入缓存。引流工具通过读取缓存中的请求向测试环境发起请求。
良好的可扩展性和高度的定制化。
需要开发流量复制工具,工作量大,对工作本身的性能要求比较高。
基于访问日志的回放
在线系统记录访问日志,引流工具通过解析日志向测试环境发起请求。
离线模式,对在线影响较小。
需要开发日志解析工具,解析开销会很大。
引流 基于 TCP/IP 层
目前开源工具有
安装部署比较简单。
安装部署比较简单。
以上几种引流方法各有优缺点免费引流工具,有些需要自己开发工具来支持。今天给大家介绍一款引流工具,简单好用免费引流工具,学习成本低。
3.推荐一个引流工具:
Gor,又名 Gor,是一个开源的 HTTP 实时流量复制工具,用 . 它只需要在LB或入口服务器上执行一个进程,就可以将生产环境的流量复制到任何地方,例如环境和Dev环境。常用于压力测试和在线问题复现。
注意:它是用Gor实现的,并且是开源的,这意味着它可以很容易地集成到自己的架构中,可以用于压力测试平台、实时流量分析、应用层防火墙等。
4. 工作流程
以下是官方此前公布的工作流程图。简单来说就是捕获在线流量,并将捕获的数据发布到指定的测试服务器。
最新官网更新了更高规格的图文说明,如下图:
上面的流程图已经很详细了,就不过多解释了。
注意:Gor 不是代理,不需要在关键路径上放置第三方工具。相反,Gor 只是默默地分析您的应用程序的流量,而不影响程序本身。
5.常用支持功能 6.下载安装
顾名思义,它是基于go语言实现的,目标服务器上必须安装go环境。安装参考可以看:准备好go语言环境后直接提供编译版,非常方便。可以直接解压。您可以参考以下步骤:
#下载包
wget https://github.com/buger/goreplay/releases/download/v1.0.0/gor_1.0.0_x64.tar.gz
#解压
tar xvf gor_1.0.0_x64.tar.gz
也可以到官网下载地址:下载最新的Gor二进制文件(支持,Linux x64和Mac OS提供预编译的二进制文件),也可以自己编译。
获取 gor 版本:
https://github.com/buger/goreplay/releases
源地址:
https://github.com/buger/goreplay
官方文档:
https://github.com/buger/gor/wiki
7.常用命令用法
输入参数:
输出参数:
其他参数:
8. 常见的实践场景
1.实时复制流量引流(--input-raw拦截端口与--http输出),例如将本机80端口的HTTP流量实时复制到:8080。
gor --input-raw :80 --output-http "http://target_server:8080"
2.控制台输出,通过本地8080端口获取请求流量,然后打印到控制台。
gor --input-raw :8080 --output-stdout
上面的命令会监控8080端口上的所有流量,并通过终端输出。可以通过浏览器或者curl访问8080端口,然后在终端查看gor输出的所有http请求。
3、先录制后回放,将抓到的流量保存到文件中,再发布到其他机器。有时很难实时同步流量,所以提供了这种先存后放的模式:
第一步是通过---文件保存流量:
gor --input-raw :8080 --output-file=requests.gor
上述命令将8080端口的流量保存到.gor文件中(必须是.gor后缀,其他后缀经测试发布时有问题)。
第二步,回放保存的流量:
gor --input-file requests.gor --output-http="http://localhost:8081"
上述命令会以相同的时间顺序将.gor中保存的所有请求释放到服务器[:8081](:8081
4.过滤指定的请求方法,如果目标服务器使用与在线机器相同的库,则只需要引流Get方法的请求。
gor --input-raw :80 --http-allow-method GET --output-http "http://target_server:8080"
5.请求过滤,当需要抓取指定路径的请求流量时,可以使用这种机制,比如只同步/api路径下的请求
gor --input-raw :8080 --output-http staging.com --http-allow-url /api
只收集请求头中符合 api-1.0x 的请求
https://github.com/buger/goreplay/releases0
6.限速机制,由于生产服务器配置一般比测试服务器配置高很多,直接将生产服务器的所有流量同步到测试服务器是不可行的。提供了两种策略:
一个。限制每秒请求数
https://github.com/buger/goreplay/releases1
湾。根据 or URL 参数限制某些请求,为指定的 or URL 请求设置限制百分比。
https://github.com/buger/goreplay/releases2
7.流量压力,当需要衡量在线服务的整体性能时,在线请求可以扩大N倍,请求可以扩大引流1倍,也可以减少。调整“|”后面 的百分比。
https://github.com/buger/goreplay/releases3
8.只复制某个URL请求,--http-allow-url参数,-http-allow-url参数可以使用正则表达式(--http-url-在gor 0.16已经过期,使用--http-allow-网址代替)。
https://github.com/buger/goreplay/releases4
9、多目标服务器引流的流量复制,有点类似于nginx。
gor --input-raw :80 --output-http "http://target_server:8080" --output-http "http://target_server2:8080"
10. 将流量转发到多个端点,默认情况下它将向所有输出发送相同的流量。
https://github.com/buger/goreplay/releases6
11. 将相同的流量发送到多个站点,并平均分配所有流量。
https://github.com/buger/goreplay/releases7