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

01 为何须要流量复制工具

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

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

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

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

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

02 流量复制工具比对

TCPCopy服务器

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

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

goreplaysession

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

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

tcpreplay

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

其余方案

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

二、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


本文分享自微信公众号 - 架构师之殇(ysistrue)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索