FA8# 流量錄制回放功能設(shè)計點歸納
本文對流量錄制和回放常見的方案、用途以及設(shè)計原理做個歸納整理。
1.回歸測試覆蓋率
測試用例不足或者遺漏難以覆蓋所有場景,導(dǎo)致回歸測試費時費力,線上穩(wěn)定存在隱患,通過真實流量錄制在回歸測試時進(jìn)行覆蓋。
回歸特定接口和鏈路 回歸特定業(yè)務(wù)場景 全量回歸特定業(yè)務(wù)線
2.與全鏈路壓測閉環(huán)
解決全鏈路壓測的數(shù)據(jù)準(zhǔn)備問題,通過流量錄制和回放系統(tǒng)與壓測系統(tǒng)打通,形成從流量錄制到壓測閉環(huán)。
定向錄制某個鏈路接口線上流量 對錄制流量進(jìn)行壓測打標(biāo) 增壓發(fā)起全鏈路壓測

3.數(shù)據(jù)的其他用處
抽取線上流量測試環(huán)境調(diào)試復(fù)現(xiàn) 其他用到線上請求數(shù)據(jù)的地方
流量錄制的方案和采用技術(shù)各種各樣,下面梳理兩種常用的技術(shù)方案。
1.GoReplay
https://github.com/buger/goreplay
實現(xiàn)原理
依賴數(shù)據(jù)包捕獲函數(shù)庫(Packet Capture library)通過抓網(wǎng)絡(luò)流量包,實現(xiàn)流量錄制功能,go語言編寫。

優(yōu)點歸納
支持流量錄制 支持流量回放 支持流量過濾 支持插件機制 支持重寫(URL、參數(shù)、Header等) 支持錄制限流 抓包實現(xiàn)與服務(wù)語言無關(guān)
缺點歸納
只支持HTTP,其他協(xié)議需要二次開發(fā)
2.jvm-sandbox-repeater
https://github.com/alibaba/jvm-sandbox-repeater
實現(xiàn)原理
實現(xiàn)Java Instrumentation接口編寫Agent,通過jvm對外編程接口規(guī)范JVMTI,實現(xiàn)對jvm運行信息的獲取以及執(zhí)行程序的加載,java開發(fā)。

優(yōu)點歸納
流量錄制和回放 快速擴(kuò)展插件機制 已支持眾多插件支持http/dubbo/mybatis/java/redis等
缺點歸納
需要侵入運行服務(wù)的jvm 依賴虛擬機
下圖為基于上述兩種方案的設(shè)計簡圖,通過運行一個錄制代理ReplayAgent的方式實現(xiàn)。

功能點歸納
錄制代理ReplayAgent負(fù)責(zé)接收控制臺指令對GoReplay或sandbox-repeater管控
錄制代理上報錄制數(shù)據(jù)流量和監(jiān)控信息
控制臺對流量錄制管理 例如:數(shù)據(jù)完整性、錄制任務(wù)狀態(tài)和結(jié)果、錄制時間、錄制流量過濾
控制臺對流量回放管理 例如:回放結(jié)果狀態(tài)、時長設(shè)定、回放速度等
控制臺與壓測平臺、回歸測試平臺的通信
評論
圖片
表情
