流量復(fù)制
把線上的真實(shí)流量引流到測(cè)試環(huán)境抖所,模擬線上用戶操作梨州,讓測(cè)試機(jī)和真實(shí)的用戶交互,讓測(cè)試環(huán)境在正式灰度前暴露問(wèn)題田轧,增加上線信心
流量復(fù)制的常見(jiàn)方案
一暴匠、基于應(yīng)用層的請(qǐng)求復(fù)制?
優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單
缺點(diǎn):
1. 請(qǐng)求復(fù)制從應(yīng)用層開始,要穿過(guò)整個(gè)協(xié)議棧傻粘,容易搶占應(yīng)用資源每窖,如連接資源
2.測(cè)試跟實(shí)際應(yīng)用耦合在一起帮掉,容易影響線上機(jī)器,也無(wú)法復(fù)制大量請(qǐng)求
3.?很難控制網(wǎng)絡(luò)延遲
二窒典、基于底層數(shù)據(jù)包的請(qǐng)求復(fù)制
? ?無(wú)需穿透整個(gè)協(xié)議棧蟆炊,可以從數(shù)據(jù)鏈路層或者網(wǎng)絡(luò)層做流量復(fù)制,不走tcp層瀑志,這樣對(duì)線上機(jī)器的影響就會(huì)少很多
流量復(fù)制的兩種類型:
1. 實(shí)時(shí)復(fù)制 涩搓,實(shí)時(shí)的把線上流量復(fù)制到測(cè)試機(jī)
2. 離線復(fù)制,先把流量復(fù)制下來(lái)劈猪,保存在PCAP抓包文件中昧甘,然后在測(cè)試機(jī)離線回放
使用場(chǎng)景:
壓力測(cè)試?
回歸測(cè)試
線上問(wèn)題重現(xiàn)
架構(gòu)及原理:
TCPCOPY包括三個(gè)部分:
1. tcpcopy :運(yùn)行在線上機(jī)器,捕獲線上請(qǐng)求
2. intercept: 運(yùn)行在輔助機(jī)器战得,負(fù)責(zé)向tcpcopy發(fā)送響應(yīng)信息充边。
3. 目標(biāo)機(jī)器:被測(cè)機(jī)器
tcpcopy默認(rèn)捕獲網(wǎng)絡(luò)層的包(也可以配置為捕獲數(shù)據(jù)鏈路層的包),然后做一些必要的處理常侦,將包發(fā)送給被測(cè)機(jī)器
tcpcopy拷貝一次流量訪問(wèn)的步驟如下:
① 一個(gè)客戶請(qǐng)求到達(dá)線上機(jī)器浇冰;
② 拷貝IP層(或者數(shù)據(jù)鏈路層)的包到tcpcopy進(jìn)程;
③ tcpcopy修改包的目的及源地址刮吧,發(fā)給目標(biāo)測(cè)試機(jī)湖饱;
④ 拷貝的包到達(dá)目標(biāo)測(cè)試機(jī);
⑤ 目標(biāo)測(cè)試機(jī)的應(yīng)用處理訪問(wèn)杀捻,并返回結(jié)果給輔助機(jī)井厌;
⑥ 返回結(jié)果在輔助機(jī)的數(shù)據(jù)鏈路層被截獲,drop響應(yīng)的body致讥,copy返回的ip header仅仆;
⑦ 輔助機(jī)將響應(yīng)header發(fā)送給線上機(jī)器的tcpcopy進(jìn)程。
使用方式:
一垢袱、 實(shí)時(shí)復(fù)制流量
1. 目標(biāo)機(jī)器配置路由 墓拜,將響應(yīng)包路由到輔助機(jī)
route add -net 1.1.1.0 netmask 255.255.255.0 gw 2.2.2.2
其中2.2.2.2 為輔助機(jī), 1.1.1.0 為客戶端地址
2. 輔助機(jī)捕獲目標(biāo)機(jī)器發(fā)來(lái)的響應(yīng)包 (和抓包命令類似)
./intercept -F <filter> -i <device,>
例子:./intercept -i eth0 -F 'tcp and src port 8080' -d
捕獲網(wǎng)卡 eth0 请契,端口8080 基于tcp的包
3. 線上機(jī)器捕獲包咳榜,并修改客戶端地址,并把包發(fā)送給目標(biāo)機(jī)器爽锥,等待輔助機(jī)發(fā)送響應(yīng)包
./tcpcopy -x localServerPort-targetServerIP:targetServerPort -s <intercept server,> [-c <ip range,>]
例子:
?./tcpcopy -x 80-3.3.3.3:8080 -s 2.2.2.2 -c 1.1.1.0? -d? ? ? ? #全流量復(fù)制
./tcpcopy -x 80-3.3.3.3:8080 -s 2.2.2.2 -c 1.1.1.0 -r 20 -d? #復(fù)制20%的流量
? ./tcpcopy -x 80-3.3.3.3:8080 -s 2.2.2.2 -c 1.1.1.0? -n 2? -d? #復(fù)制2倍流量
二涌韩、離線復(fù)制流量
使用tcpdump抓包
?tcpdump?-i eth0?-w test.pcap?tcp?and?port?80?-c 100
流量回放
./tcpcopy -x 80-3.3.3.3:8080 -s 2.2.2.2 -c 1.1.1.0 -i test.pcap
遇到的問(wèn)題:
編譯intercept程序時(shí)報(bào)錯(cuò) pcap.h can not found .需要安裝libpcap-dev包:
?apt-get install libpcap-dev
存在的問(wèn)題:
1.? 不支持加密協(xié)議https等 ,可以進(jìn)行二次開發(fā)氯夷,但是略復(fù)雜
2.? 可能會(huì)丟包:作者建議最好將三臺(tái)機(jī)器部署在同一個(gè)網(wǎng)段臣樱,或者使用代理,可以降低丟包率
參考:
https://github.com/session-replay-tools/tcpcopy
http://www.cnblogs.com/zhengyun_ustc/p/tcpcopy.html