流量回放浅实践

简介: 实际案例

对于流量回放这个词,很多同学并不陌生,但绝大多数公司因种种原因并没有进行实践,最现实的原因是由于做全链路的流量回放有大量的写操作,必然要涉及到系统改造,数据加工脱敏等,技术难度和风险相对较高,并非每一家公司都如阿里巴巴一样具备大流量的应用场景,在系统改造不彻底的情况下,存在投入产出失衡的现象,这不仅是技术的问题,也需要文化的支持,从个人角度而言我们依然可以进行一些模拟,这次我总结了以goreplay工具的轻量级流量回放使用方法。

     

首先简单描述下goreplay工作流:

   

image.png

我们什么情况下可以用gorepaly去验证呢?

1.在预发布环境需要真实流量做功能的回归与验证;

2.验证网络带宽流量阈值

3.真实线上流量对比验证


如何去验证?

提供源码下载包,注意 :使用goreplay均在root权限或者使用sudo执行;

https://pan.baidu.com/s/1cfBnfbLaQntak4SMD8YPKw  密码:jcfl


1.下载完解压缩

tar xvf gor_1.0-RC2_x64.tar.gz

2.捕捉流量并通过终端输出

sudo ./goreplay --input-raw :8003 --output-stdout

上述命令将监控8003端口上所有的流量,并通过终端stdout输出。你可以通过浏览器或者curl访问8003端口,然后在终端查看gor输出所有的http请求。

3.捕捉流量并实时同步到另一台机器

sudo ./goreplay --input-raw :8003 --output-http="http://example:8005"

上述命令将8003端口的流量实时同步访问http://example:8005服务器,你在访问第一台服务器时,将看到流量以相同的顺序请求到第二台.

4.将捕捉流量保存到文件中,然后释放到其它机器,建议实战的时候使用该模式

有时候实时同步流量是很难做到的, 所以Goreplay提供了这种先保存后释放的模式:


第一步, 通过--output-file保存流量:

sudo ./goreplay --input-raw :8003 --output-file=requests.gor

上述命令将8003端口的流量,保存到requests.gor文件中(必须是.gor后缀,其它后缀经测释放时有问题)。

我们打开录制完成的gor文件发现,它保存了我们所有的请求内容(如下图):


image.png


第二步,如上图保存的流量,我们可以原来的方式执行释放:

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

上述命令将释放所有保存在requests.gor中的请求通过相同的时间顺序释放到服务器http://localhost:8005


附上常用的参数解释:

--input-raw   #用来捕捉http流量,需要指定ip地址和端口

--input-file   #接收通过--output-file保存流量的文件

--input-tcp #将多个 Goreplay 实例获取的流量聚集到一个 Goreplay 实例

--output-stdout  #终端输出

--output-tcp #将获取的流量转移至另外的 Goreplay 实例

--output-http  #流量释放的对象server,需要指定ip地址和端口 --output-file   #录制流量时指定的存储文件


Goreplay的限速加速机制和请求过滤

无论是限速或者加速都具有现实意义,也是流量回放的亮点之一:


1.限速机制:

由于生产服务器配置一般远高于测试服务器配置,所以直接将生产服务器全部流量同步到测试服务器是不可行的,goreplay提供了两种策略:

限制每秒的请求数

sudo ./goreplay  --input-tcp :888 --output-http "http://staging.com|20"# (每秒请求数限制20个以内)

sudo ./goreplay  --input-raw :80 --output-tcp "replay.local:888|20%"  # (每秒请求数限制20%以内)

基于Header或Url的参数限制一些请求,为指定的header或者url的请求设定限制的百分比。

sudo ./goreplay  --input-raw :80 --output-tcp "replay.local:888|20%" --http-header-limiter "X-API-KEY: 20%"

sudo ./goreplay  --input-raw :80 --output-tcp "replay.local:888|20%" --http-param-limiter "api_key: 20%"


2.可以限制一些流量,我们就可以进行流量翻倍,也就是我刚刚提到的流量加速:

./gor --input-file '696_0.gor|1000%' --input-file-loop --output-http 'http://www.xxx.com' --output-http-workers 10 --stats --output-http-stats

1000%等于翻了10倍,workers代表消费的进程数,流量翻倍建议梯度缓慢增加,防止造成应用直接宕机的情况;

3.请求过滤:

当你需要捕捉指定路径的请求流量时,可以使用该机制, 如只同步/api路径下的请求

sudo ./goreplay --input-raw :8080 --output-http staging.com --http-allow-url /api

这样的方法可以对单请求进行压测,也是非常实用

另外还有其它一些参数用法:

--http-disallow-url    #不允许正则匹配的Url

--http-allow-header #允许的 Header 头

--http-disallow-header #不允许的 Header 头

--http-allow-method #允许的请求方法,传入值为GET, POST, OPTION


执行结果查看:

./gor --input-file '696_0.gor|1000%' --input-file-loop --output-http 'http://www.cctester.com' --output-http-workers 10 --stats --output-http-stats

执行结果的查看,在很多文档中,并没有对执行结果有详尽的阐述,但结果的查看对性能测试具有最直接的意义,性能测试人员一般会从客户端工直接获取结果,不过相对成熟的互联网公司一般不会局限于此,我们有更多的服务端工具进行统计,很多公司会自己去研发,也有付费的工具如听云等,goreplay提供的结果相对简单(如下图),最后一列为取样数,倒数第二列为取样/时间,可以理解为我们常见的qps;

image.png

目录
相关文章
|
移动开发 算法 JavaScript
平滑切换——PPT动画的全新玩法(原理篇)/04/O365智能系列(一)
平滑切换——PPT动画的全新玩法(原理篇)/04/O365智能系列(一)
2633 1
平滑切换——PPT动画的全新玩法(原理篇)/04/O365智能系列(一)
|
29天前
|
数据采集 机器人 计算机视觉
一手训练,多手应用:国防科大提出灵巧手抓取策略迁移新方案
【10月更文挑战第24天】国防科技大学研究人员提出了一种新颖的机器人抓取方法,通过学习统一的策略模型,实现不同灵巧夹具之间的策略迁移。该方法分为两个阶段:与夹具无关的策略模型预测关键点位移,与夹具相关的适配模型将位移转换为关节调整。实验结果显示,该方法在抓取成功率、稳定性和速度方面显著优于基线方法。论文地址:https://arxiv.org/abs/2404.09150
30 1
|
2月前
|
存储 消息中间件 运维
架构升级的救星!流量回放自动化测试的必备指南
大家好,我是小米,一名29岁的技术宅。今天分享一个物联网领域的实用技能——流量回放自动化测试。系统重构后,测试工作量巨大,本文介绍如何通过日志收集和数据回放进行自动化测试,包括离线、实时和并行回放模式,帮助快速定位Bug,提升测试效率和系统稳定性。欢迎关注我的微信公众号“软件求生”,获取更多技术干货!
49 3
|
6月前
|
Unix Linux Go
流量回放工具之 Goreplay 安装及初级使用
【6月更文挑战第2天】流量回放工具之 Goreplay 安装及初级使用
632 3
|
运维 Kubernetes Cloud Native
直播预告丨如何用 KubeSkoop 对 K8s 集群进行网络问题诊断
直播预告丨如何用 KubeSkoop 对 K8s 集群进行网络问题诊断
|
存储 缓存 固态存储
亿级流量架构,服务器如何扩容?写得太好了
亿级流量架构,服务器如何扩容?写得太好了
219 0
亿级流量架构,服务器如何扩容?写得太好了
|
存储 算法 安全
亿级流量架构,服务器如何扩容?写得太好了(2)
亿级流量架构,服务器如何扩容?写得太好了(2)
175 0
亿级流量架构,服务器如何扩容?写得太好了(2)
|
测试技术 视频直播 双11
干货分享:细说双 11 直播背后的压测保障技术
阿里云 PTS 站在双 11 巨人的肩膀上,是阿里全链路压测的延伸。PTS 通过伸缩弹性,轻松发起用户百万级别的流量,免去机器、人力成本;PTS 对流量的控制,能够实时脉冲,精准控制; 是应对视频直播快速攀升的流量脉冲的优秀方案。
2591 6
干货分享:细说双 11 直播背后的压测保障技术
|
存储 缓存 JavaScript
亿级流量架构服务降级,写得太好了!
什么是服务降级 如果看过我前面对服务限流的分析,理解服务降级就很容易了,对于一个景区,平时随便进出,但是一到春节或者十一国庆这种情况客流量激增,那么景区会限制同时进去的人数,这叫限流,那么什么是服务降级呢?
215 0
亿级流量架构服务降级,写得太好了!
|
数据采集 存储 Dubbo
亿级流量架构怎么做资源隔离?写得太好了!
常见的资源,例如磁盘、网络、CPU等等,都会存在竞争的问题,在构建分布式架构时,可以将原本连接在一起的组件、模块、资源拆分开来,以便达到最大的利用效率或性能。资源隔离之后,当某一部分组件出现故障时,可以隔离故障,方便定位的同时,阻止传播,避免出现滚雪球以及雪崩效应。
亿级流量架构怎么做资源隔离?写得太好了!