1.github地址
https://github.com/buger/goreplay
2.簡單介紹
GoReplay 是一個開源的網絡監控工具,可以記錄用戶的實時流量并將其用于鏡像、負載測試、監控和詳細分析。
3.出現背景
隨著應用程序的增長,測試它所需的工作量也會呈指數級增長。GoReplay為用戶提供了重用現有流量進行測試的簡單想法,這使得它非常強大。最先進的技術(混雜模式+BPF過濾)允許用戶分析和記錄用戶的應用程序流量,而不會影響它。這消除了將第三方組件置于關鍵路徑中帶來的風險。
GoReplay增強了用戶對代碼部署、配置和基礎設施更改的信心。
4.安裝
# 獲取最新版本號
LATEST_VERSION=$(curl -s https://api.github.com/repos/buger/goreplay/releases/latest | grep 'tag_name' | cut -d '"' -f 4)# 下載對應架構的二進制文件
wget https://github.com/buger/goreplay/releases/download/${LATEST_VERSION}/gor_${LATEST_VERSION}_x64.tar.gz# 解壓下載的文件
tar -xzf gor_${LATEST_VERSION}_x64.tar.gz# 將可執行文件移動到系統路徑
sudo mv gor /usr/local/bin/# 驗證安裝
gor --version
驗證安裝結果:
5.原理
GoReplay 提供了一種獨特的鏡像方法。GoReplay 不是代理,而是在后臺偵聽網絡接口上的流量,無需更改生產基礎設施,只需在與服務相同的計算機上運行GoReplay守護程序即可。 大概流程為:
(1)GoReplay首先通過一個名為 listener?server的組件來捕獲網絡流量。這個組件能夠監聽指定的網絡接口,并實時捕獲經過該接口的 HTTP 請求和響應。
(2)捕獲到的流量可以被發送到replay server,也可以被保存到文件中,或者發送到?Kafka?等消息隊列中。
(3)在回放階段,replay server 會從保存的文件中讀取之前捕獲的流量,并將其重新發送到配置的目標地址。這樣,就可以模擬原始的請求和響應,對系統進行壓力測試或功能驗證。
一句話小結:Goreplay 的工作原理是通過監聽網絡接口捕獲流量,然后根據用戶的配置選擇將流量保存、轉發或回放,以此來滿足不同的測試和分析需求。
這種設計使得 GoReplay 成為一個非常靈活且功能豐富的工具,適用于多種測試場景。具體來說,GoReplay 通常被應用于以下方面:
- 性能測試:通過回放真實的用戶請求來模擬高負載情況,測試服務器的性能極限。
- 故障排查:記錄出現問題時的流量,以便開發人員可以詳細分析并定位問題。
- 功能或接口測試:確保應用程序在特定的網絡請求下能夠正確執行預期的操作。
- 安全測試:檢查應用程序在處理網絡請求時是否存在安全漏洞。