暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

怎么真实模拟生产环境?什么是流量复制?用什么工具?

姚毛毛的博客 2019-12-24
1292

01 为什么需要流量复制工具

在某些场景下(例如重构,发布某个新功能),我们需要将生产环境的请求回放到测试环境,然后将生产的响应和测试的响应结果做比对,以校验功能是否正常,有没有什么好的方法和工具?

对于一些有并发要求的业务,特别是对接外部流量时,产品上线前一定要做的就是压力测试,但是常规的压力测试并不能覆盖所有情况。

以loadruner、Jmeter、hyload、ab,、web bench、http_load为例,这些通过模拟请求的压测工具,只能发送特定的参数,对于一些参数异常导致的程序处理异常是无法考虑到的,所以就需要一款能复制真实流量,并且不影响线上业务的工具。

流量复制工具有很多,例如goreplay、tcpreplay、tcpcopy等,这些工具贴合真实场景,能模拟真实流量,并支持流量的放大或缩小,更容易测试出程序的瓶颈和潜在问题。

总结一下,流量复制工具的优势就是可以将线上流量拷贝到测试机器,实时的模拟线上环境,真实的模拟线上流量的变化规律,达到在程序不上线的情况下实时承担线上流量的效果

02 流量复制工具比对

TCPCopy

TCPCopy 是一种请求复制(复制基于 TCP 的 packets)工具 ,通过复制在线数据包,修改 TCP/IP 头部信息,发送给测试服务器,达到欺骗测试服务器的TCP 程序的目的,从而为欺骗上层应用打下坚实基础。

TCPCopy由网易技术部的王斌在王波的工作基础上中2010年开发,并于2011年9月开源。TCPCopy一般会与tcpdump共同使用。

goreplay

Goreplay 是用 Golang 写的一个 HTTP 实时流量复制工具。功能更强大,支持流量的放大、缩小,频率限制,还支持把请求记录到文件,方便回放和分析,也支持和 ElasticSearch 集成,将流量存入 ES 进行实时分析。

goreplay相比tcpcopy只能复制HTTP和HTTPS的流量。goreplay使用时编译很麻烦,一般直接使用编译好的版本。

tcpreplay

tcpreplay 是一种pcap包的重放工具,它可以将用ethreal、wireshark工具抓下来的包原样或经过任意修改后重放回去。它允许你对报文做任意的修改(主要是指对2层、3层、4层报文头),指定重放报文的速度等,这样tcpreplay就可以用来复现抓包的情景以定位bug,以极快的速度重放从而实现压力测试。

其他方案

1、使用nginx基于mirror模块的流量复制,在Nginx 1.13.4中开始引入。

2、TCPGO,使用C++仿照TCPCopy写的另一款流量复制工具。

03 工具地址

tcpcopy【C编写,基本已不在更新】: https://github.com/session-replay-tools/tcpcopy

goreplay【Go编写一直更新,截止当前最后一次提交2019年12月】: https://github.com/buger/goreplay

tcpreplay【C编写,一直更新,截止当前最后一次提交2019年11月】: https://github.com/appneta/tcpreplay

04 流量抓包工具参考

tcpdump

ethreal

wireshark

tcpflow

05 参考文章

流量复制导流工具研究 https://blog.csdn.net/wlmvp/article/details/85157659

tcpreplay https://ipcmen.com/tcpreplay

Linux流量复制工具 https://blog.csdn.net/u012806692/article/details/88973700

linux网络调试发包抓包工具 https://blog.csdn.net/hgz_gs/article/details/89848536#1.1%20sendip

TCP流量复制工具,另一个tcpcopy https://cloud.tencent.com/developer/article/1159394


文章转载自姚毛毛的博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论