怎麼真實模擬生產環境?什麼是流量複製?用什麼工具?

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

相關文章
相關標籤/搜索