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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。