推荐一款简单易用线上引流测试工具:GoReplay

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 推荐一款简单易用线上引流测试工具:GoReplay

一. 引流测试产生背景


日常大部分的测试工作都是在测试环境下,通过模拟用户的行为来对系统进行验证,包括功能以及性能。在这个过程中,你可能会遇到以下问题:

  • 用户访问行为比较复杂,模拟很难和用户行为一致,模拟不够真实;
  • 线下模拟场景有限,会出现业务覆盖不全的情况。


引流测试的出现就是为了解决以上问题,它的本质是:通过把线上的真实流量复制到线下环境,解决测试环境模拟不够真实,或覆盖不够全面的问题。


二. 引流测试常见方案


目前不少公司对引流测试进行了实践探索,常见的有以下4种引流方式(不限):

引流方式 实现方式 优点 缺点
Nginx层流量复制 安装lua-nginx-module、ngxdevelkit、headers-more-nginx-module模块,通过lua脚本实现把请求复制给测试环境。 安装和部署还较为简单。 需要开发lua脚本,且对资源有一定占用。
基于业务代码层的引流 将业务代码的调用封装成请求对象,异步的写入缓存中。引流工具通过读缓存中的请求,向测试环境发起请求。 扩展性好,可定制化高。 需要开发流量复制工具,工作量较大,且对工作本身的性能要求较高。
基于访问日志回放 线上系统记录访问日志,引流工具通过解析日志,向测试环境发起请求。 离线方式,对线上影响小。 需要开发日志解析工具,且解析的开销会较大。
基于TCP/IP层的引流 目前已开源的工具有TcpCopy 安装、部署使用都较为简单。 仅适合无状态的业务,且对业务请求需要进行过滤。

上述的几种引流方式各有利弊,有的是需要自己开发相应的工具来支持。而今天给大家介绍的是另外一款简单易用,学习成本低的引流工具Gor。


三. 推荐一款引流工具:Gor


Gor,又称为GoReplay是采用Golang 编写的一个开源的 HTTP 实时流量复制工具。它只需要在 LB 或者 Varnish 入口服务器上执行一个进程,就可以把生产环境的流量复制到任何地方,比如 Staging 环境、Dev 环境。常用于压测及线上问题复现。


注:Golang 是采用Gor 实现且开源的,意味着可以方便的集成到自己的架构中,可以用在压力测试平台、实时流量分析、应用层防火墙等方面。


四. Gor工作流程


微信图片_20220523193812.png


监听服务器捕获http流量并将其发送到重放服务器或保存到文件,重播服务器将流量转发给给定的地址。


注:Gor不是代理人,不需要将第三方工具放到关键路径上。相反,Gor只是默默地分析你的应用程序的流量,并不影响本身程序。



五. Gor支持的常用功能

1、Gor 支持流量的放大和缩小、频率限制,这样不需要搭建和生产环境一致的服务器集群也可以正确测试。

2、Gor 还支持根据正则表达式过滤流量,这意味着可以单独测试某个 API 服务。

3、Gor还可以修改 HTTP 请求头,比如替换 User-Agent, 或者增加某些 HTTP Header 。

4、Gor 还可以把请求记录到文件,以备回放和分析。Gor 支持和 ElasticSearch 集成,将流量存入 ES 进行实时分析。


六. Gor 下载安装

官网下载地址:https://github.com/buger/goreplay/releases 下载最新的Gor二进制文件(支持Windows,Linux x64和Mac OS提供预编译的二进制文件),或者可以自行编译。


获取gor版本:https://github.com/buger/goreplay/releases

源码地址:https://github.com/buger/goreplay

官方使用文档:https://github.com/buger/gor/wiki


微信图片_20220523193842.png


七. Gor 常用命令用法

可用输入:

  • --input-raw - 用于捕获HTTP流量,您应该指定IP地址或接口和应用程序端口。有关捕获和重放流量的更多信息。
  • --input-file- 接受之前使用的文件--output-file。更多关于保存和从文件重播
  • --input-tcp - 如果您决定将来自多个转发器Gor实例的流量转发给它,则由Gor聚合实例使用。阅读关于使用Aggregator-forwarder设置

可用输出:

  • --output-http - 重放HTTP流量到给定的端点,接受基础URL。阅读[关于它的更多信息](重播HTTP流量)
  • --output-file - 记录传入的流量到文件。更多关于保存和从文件重播
  • --output-tcp- 将传入数据转发给另一个Gor实例,并与其一起使用--input-tcp。阅读关于Aggregator-forwarder设置的更多信息。
  • --output-stdout - 用于调试,输出所有数据到stdout。


更多参数,可查阅官网文档。


八. Gor 常用实践场景

1、流量实时复制引流(--input-raw 拦截端口配合--output-http输出),例如将本机80端口的HTTP流量实时复制到targer_server:8080


gor --input-raw :80 --output-http "http://target_server:8080"


2、如果目标服务器使用的库与线上机器一样,且只需要引流Get方法的请求。


gor --input-raw :80  --http-allow-method GET --output-http "http://target_server:8080"


3、当需要对线上服务进行整体性能压测时,可将线上请求扩大N倍,进行引流,将请求扩大1倍,也可缩小,调整"|"后面的百分比即可。


gor --input-raw :80  --http-allow-method GET --output-http "http://target_server:8080|200%"


4、只复制某个URL请求,--http-allow-url参数,-http-allow-url参数可用正则表达式(--output-http-url-regexp在gor 0.16已经过期,使用--http-allow-url代替)。


gor --input-raw :8080 --http-allow-method GET --output-http "http://target_server:8080" --http-allow-url mall.*hotword


5、多目标服务器的流量复制引流,有点类似nginx的mirror。


gor --input-raw :80 --output-http "http://target_server:8080" --output-http "http://target_server2:8080"


6、将流量转发到多个端点,默认情况下,它会将相同的流量发送到所有输出。


gor --input-tcp :28020 --output-http "http://staging.com"  --output-http "http://dev.com"


7、将相同的流量发送到多个站点,并且平分所有流量。


gor --input-raw :80 --output-http "http://staging.com"  --output-http "http://dev.com" --split-output true


8、HTTP超时,默认情况下,http请求和响应的超时时间为5秒。你可以像这样覆盖它:


gor --input-tcp replay.local:28020 --output-http http://staging.com --output-http-timeout 30s


9、基本身份验证,如果您的开发或登台环境受基本身份验证保护,那么可以在重放期间注入这些凭据:


gor --input-raw :80 --output-http "http://user:pass@staging.com"


10、性能压力测试

可以将流量复制到文件,然后再对他们进行回放。回放的时候,流量会维持原始的时间间隔。如果你使用了百分比来进行速率限制,那么回放的速率会相应的增加或减少。有了这种速率限制,gor就可以用来进行压力测试。


gor --input-file "requests.gor|200%" --output-http "staging.com"

目前,input-file仅在使用基于百分比的限制器时才支持此功能。与默认限制器不同input-file,它不会降低请求速度,而会减慢速度或加速请求发射。


11 、录制与回放


./gor --input-raw :8000 --output-file=requests.gor

执行录制命令后,将会创建新文件并不断向其写入所有捕获的请求。


12、流量回放,重播来自文件的请求。


./gor --input-file requests.gor --output-http="http://localhost:8001"

您应该看到所有记录到http://localhost:8001的请求,并且它们将以相同的顺序重播,并且与录制的时间完全相同。


gor的用法也远不止上述提到的这些,更多的应用测试场景,还请读者自行挖掘。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3月前
|
机器学习/深度学习 存储 测试技术
从0到1:如何规划一套流量回放自动化测试方案
本文介绍了流量回放自动化测试的完整方法,从企业战略到交付的四个关键环节:Discovery(深度挖掘)、Define(定义目标)、Design(详细设计)和Delivery(交付与反馈)。通过这些步骤,帮助企业优化系统性能和稳定性,确保产品的高质量。
79 4
|
3月前
|
存储 消息中间件 运维
架构升级的救星!流量回放自动化测试的必备指南
大家好,我是小米,一名29岁的技术宅。今天分享一个物联网领域的实用技能——流量回放自动化测试。系统重构后,测试工作量巨大,本文介绍如何通过日志收集和数据回放进行自动化测试,包括离线、实时和并行回放模式,帮助快速定位Bug,提升测试效率和系统稳定性。欢迎关注我的微信公众号“软件求生”,获取更多技术干货!
77 3
|
缓存 负载均衡 监控
聊聊深入挖掘业务需求,可0-1设计高可用、高并发、高伸缩的分布式项目架构,环境搭建、自动化部署、服务器环境线上排查、性能评估
聊聊深入挖掘业务需求,可0-1设计高可用、高并发、高伸缩的分布式项目架构,环境搭建、自动化部署、服务器环境线上排查、性能评估
114 0
|
缓存 网络协议 测试技术
推荐一款技术人必备:线上引流神器GoReplay
推荐一款技术人必备:线上引流神器GoReplay
3392 0
推荐一款技术人必备:线上引流神器GoReplay
|
消息中间件 监控 Cloud Native
阿里云发布性能测试 PTS 2.0:低成本、高效率、多场景压测,业务稳定性保障利器
618 来临,高峰时段的品牌直播间要同时容纳几百万人线上发弹幕、抢货、抢红包,如此大的用户体量、高频交互以及脉冲流量场景,对于后端服务器来说都是不小的挑战。 为了确保线上稳定性以及优质的交互体验,通过性能测试 PTS(Performance Testing Service)进行压测成为很多平台和品牌商的首选。
阿里云发布性能测试 PTS 2.0:低成本、高效率、多场景压测,业务稳定性保障利器
|
存储 Java 测试技术
技术分享 | 接口自动化测试,如何实现多套环境的自动化测试?
在敏捷迭代的项目中,通常会将后台服务部署到多套测试环境。那么在进行接口自动化测试时,则需要将服务器的域名进行配置。使用一套接口测试脚本,通过切换域名地址配置,实现多套环境的自动化测试。
|
安全 测试技术 数据库
接口测试平台173:并发功能继续
接口测试平台173:并发功能继续
接口测试平台173:并发功能继续
|
弹性计算 运维 负载均衡
如何做好性能压测:压测环境的设计和搭建
如何做好性能压测:压测环境的设计和搭建
|
弹性计算 运维 负载均衡
如何做好性能压测(一):压测环境的设计和搭建
如何做好性能压测(一):压测环境的设计和搭建
|
弹性计算 负载均衡 监控
如何做好性能压测:压测环境的设计和搭建
性能压测,是保障服务可用性和稳定性过程中,不可或缺的一环。我们将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论体系,并提供有例可依的实战。 01 性能环境要考虑的要素 系统逻辑架构,即组成系统的组件、应用之间的结构、交互关系的抽象。最简单最基本的就是这三层架构。 三层逻辑结构图 - 客户层:用户请