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