全链路压测:性能测试的流量录制和回放

本贴最后更新于 279 天前,其中的信息可能已经时移世异

前言

一般在软件发布之前,都会经过单元测试, 接口测试, 集成测试, 性能测试等。但是这些测试往往都是基于自己定义的测试数据集合,很可能会有漏网之鱼,那么在软件上线之后,在线上流量冲击下,会出现各种之前测试中并没有发现的问题。这是因为线上的流量数据比测试的数据更加多样性,并且随着用户数量的增加,线上流量的也越来越大,更多的隐藏问题也会暴露,比如并发处理不当导致的Crash。那么我们有什么方法能够在上线之前完成这些测试呢?就是借助流量回放工具。

GoReplay流量回放工具

GoReplay工具是go语言编写的一个http实时流量复制工具。功能强大,支持流量的放大、缩小、频率限制,还支持把请求记录到文件,方便回放和分析。

goplay工具不是代理,而是监听网络上的流量,不需要更改生产基础架构,而是在与服务相同的计算器上运行goplay守护程序。

0w3l03vr.bmp

1)安装部署

1- 安装golang依赖环境:因为这个工具是go语言开发的,所以需要安装go的依赖环境

Image.png

2- Goreplay下载安装:

3- 运行校验: ./gor version: 会看到gor的版本号信息

Image.png

2)流量的录制:

在链路的起点进行录制: 比如Nginx网关上进行录制:./gor -input-raw :8082 -output-file requests.gor

可以cat查看一下这个文件内容: 录制其实就是把http请求的信息保存下来了

Image.png

3)流量的回放

切换到另外一个复刻的项目服务器:也需要安装goreplay的依赖和工具

所有保存在requests.gor中的请求通过相同的时间顺序请求到指定的服务器。【另外一个台服务器需要复刻好用户或者生产的环境】

Image.png

生产环境的录制文件拉取下来,放到专门用于流量回放的服务器里

注意:不要直接在生产环境里回放流量,因为流量回放本质就是goreplay发起请求,你放在生产环境里直接回放影响生产环境的性能 ,因为goreplay发起请求需要占用资源。

而且,这个工具需要回放的环境跟录制的环境 保持一致,包括数据和整个链路。不然回放不成功。

4)Goreplay工具的其他一些用法:

1)捕获流量并实时打印到屏幕上:【不是输出到文件】:

Image.png

2)捕获流量并实时同步到另外的机器:

3)将捕获到的流量回放到多台服务器:

4)请求过滤:不想要捕获所有的流量,过滤你想要的流量进行捕获。【这个参数跟位置没有关系 前面后面都可以】

5)限速机制:可以在回放的时候限制每秒请求数

6)流量回放频率控制:可以进行性能测试加速,只能通过文件进行回放加速

7)循环使用文件进行回放: -input-file-loop ,重复使用数据进行压测

回帖
请输入回帖内容 ...