流量錄制回放功能設計點歸納
引言
本文對流量錄制和回放常見的方案、用途以及設計原理做個歸納整理。
一、解決的問題
1.回歸測試覆蓋率
測試用例不足或者遺漏難以覆蓋所有場景,導致回歸測試費時費力,線上穩定存在隱患,通過真實流量錄制在回歸測試時進行覆蓋。
- 回歸特定接口和鏈路
- 回歸特定業務場景
- 全量回歸特定業務線
2.與全鏈路壓測閉環
解決全鏈路壓測的數據準備問題,通過流量錄制和回放系統與壓測系統打通,形成從流量錄制到壓測閉環。
- 定向錄制某個鏈路接口線上流量
- 對錄制流量進行壓測打標
- 增壓發起全鏈路壓測
3.數據的其他用處
- 抽取線上流量測試環境調試復現
- 其他用到線上請求數據的地方
二、常用方案
流量錄制的方案和采用技術各種各樣,下面梳理兩種常用的技術方案。
1.GoReplay
- https://github.com/buger/goreplay
實現原理
依賴數據包捕獲函數庫(Packet Capture library)通過抓網絡流量包,實現流量錄制功能,go語言編寫。
優點歸納
- 支持流量錄制
- 支持流量回放
- 支持流量過濾
- 支持插件機制
- 支持重寫(URL、參數、Header等)
- 支持錄制限流
- 抓包實現與服務語言無關
缺點歸納
- 只支持HTTP,其他協議需要二次開發
2.jvm-sandbox-repeater
https://github.com/alibaba/jvm-sandbox-repeater
實現原理
實現Java Instrumentation接口編寫Agent,通過jvm對外編程接口規范JVMTI,實現對jvm運行信息的獲取以及執行程序的加載,java開發。
優點歸納
- 流量錄制和回放
- 快速擴展插件機制
- 已支持眾多插件支持http/dubbo/mybatis/java/redis等
缺點歸納
- 需要侵入運行服務的jvm
- 依賴虛擬機
三、實現架構圖
下圖為基于上述兩種方案的設計簡圖,通過運行一個錄制代理ReplayAgent的方式實現。
功能點歸納
- 錄制代理ReplayAgent負責接收控制臺指令對GoReplay或sandbox-repeater管控
- 錄制代理上報錄制數據流量和監控信息
- 控制臺對流量錄制管理 例如:數據完整性、錄制任務狀態和結果、錄制時間、錄制流量過濾
- 控制臺對流量回放管理 例如:回放結果狀態、時長設定、回放速度等
- 控制臺與壓測平臺、回歸測試平臺的通信
本文轉載自微信公眾號「瓜農老梁」,可以通過以下二維碼關注。轉載本文請聯系瓜農老梁公眾號。