利用tcpcopy引流做模擬在線測(cè)試(轉(zhuǎn))

一、工具介紹

Tcpcopy是一個(gè)分布式在線壓力測(cè)試工具,可以將線上流量拷貝到測(cè)試機(jī)器,實(shí)時(shí)的模擬線上環(huán)境,達(dá)到在程序不上線的情況下實(shí)時(shí)承擔(dān)線上流量的效果,盡早發(fā)現(xiàn)bug,增加上線信心。

與傳統(tǒng)的壓力測(cè)試工具(如:abench)相比,tcpcopy的最大優(yōu)勢(shì)在于其實(shí)時(shí)及真實(shí)性,除了少量的丟包,完全拷貝線上流量到測(cè)試機(jī)器,真實(shí)的模擬線上流量的變化規(guī)律。

二、Tcpcopy的原理

1.流程

現(xiàn)在以nginx作為前端說(shuō)明tcpcopy的原理:

上圖中左邊是線上前端機(jī),右邊是測(cè)試前端機(jī)。線上前端機(jī)開(kāi)啟tcpcopy客戶端(tcpcopy進(jìn)程),測(cè)試前端機(jī)開(kāi)啟tcpcopy服務(wù)端(interception進(jìn)程),且兩臺(tái)機(jī)器上都啟動(dòng)了nginx服務(wù)。

Tcpcopy拷貝一次流量訪問(wèn)的步驟如下:

① 一個(gè)訪問(wèn)到達(dá)線上前端機(jī);

② socket包在ip層被拷貝了一份傳給tcpcopy進(jìn)程;

③ tcpcopy修改包的目的及源地址,發(fā)給測(cè)試前端機(jī);

④ 拷貝的包到達(dá)測(cè)試前端機(jī);

⑤ 測(cè)試前端機(jī)的nginx處理訪問(wèn),并返回結(jié)果;

⑥ 返回結(jié)果在ip層被截獲、丟棄,由intercpetion拷貝返回結(jié)果的ip header返回;

⑦ ip header被發(fā)送給線上前端機(jī)的tcpcopy進(jìn)程。

2.代碼分析

1) 首先,在鏈路層或者IP層,在把包交到上一層之前,系統(tǒng)會(huì)檢查有沒(méi)進(jìn)程創(chuàng)建了socket(AF_PACKET,SOCK_DGRAM,…) 或socket(AF_INET,SOCK_RAW,…)等類型的套接字(即原始套接字sock_raw),如果有,這個(gè)包就會(huì)被復(fù)制一份并發(fā)送到這個(gè) socket的緩沖區(qū)。tcpcopy就是通過(guò)這種方式來(lái)復(fù)制訪問(wèn)流量的。上述的兩種抓包方式,前者工作在數(shù)據(jù)鏈路層,后者工作在IP層。在 tcpcopy中不同版本所使用的抓包函數(shù)不同,在0.3版本中是:

int sock = socket(AF_PACKET,SOCK_RAW,htons(ETH_P_IP));

而在0.4版本中,用的是:

int sock = socket(AF_INET,SOCK_RAW,IPPROTO_TCP);

以上兩個(gè)函數(shù)分別工作在鏈路層和IP層,前者會(huì)把進(jìn)來(lái)和出去的包都抓取到,后者只 抓取到進(jìn)來(lái)的包。

2) Tcpcopy在發(fā)送拷貝的數(shù)據(jù)包的時(shí)候,使用了如下socket:

sock = socket(AF_INET, SOCK_RAW,IPPROTO_RAW);

并對(duì)這個(gè)socket設(shè)置了IP_HDRINCL:

setsockopt(sock, IPPROTO_IP, IP_HDRINCL, &n, sizeof(n));

因此網(wǎng)絡(luò)層不會(huì)再增加ip header. 發(fā)送之前更改了包的目的ip和端口:

tcp_header->dest = remote_port;

ip_header->daddr = remote_ip;

最后調(diào)用sendto函數(shù)發(fā)送包到測(cè)試前端機(jī):

send_len = sendto(sock,(char *)ip_header,tot_len,0,

(struct sockaddr *)&toaddr,sizeof(toaddr));

3) 在測(cè)試前端機(jī)上加載了ip_queue模塊,并設(shè)置iptables規(guī)則:

iptables -I OUTPUT -p tcp –sport 80 -j QUEUE

復(fù)制的訪問(wèn)流量到達(dá)測(cè)試前端機(jī)上的nginx,nginx處理并返回結(jié)果,這個(gè)結(jié)果包在IP層會(huì)被前面所設(shè)置的iptables規(guī)則匹配發(fā)往目標(biāo)(target)QUEUE。而QUEUE是由ip_queue模塊實(shí)現(xiàn)。下一步這個(gè)匹配包就會(huì)被內(nèi)核經(jīng)過(guò)netlink socket發(fā)往用戶空間的程序(在這是tcpcopy的服務(wù)端interception進(jìn)程)。

netlink socket是內(nèi)核與用戶進(jìn)程之間的一種通信機(jī)制,是網(wǎng)絡(luò)應(yīng)用程序與內(nèi)核通信的最常用的接口,可以用來(lái)配置網(wǎng)絡(luò)的各個(gè)方面(比如包的過(guò)濾)。

interception用如下方式創(chuàng)建netlink socket:

int sock = socket(AF_NETLINK,SOCK_RAW,NETLINK_FIREWALL);

NETLINK_FIREWALL協(xié)議有三種消息類型:IPQM_MODE,IPQM_PACKET,IPQM_VERDICT.

內(nèi)核通過(guò)一個(gè)IPQM_PACKET消息將剛才截獲的返回結(jié)果包發(fā)送到interception,interception給內(nèi)核發(fā)送一個(gè) IPQM_VERDICT消息告訴內(nèi)核對(duì)這個(gè)包的裁決結(jié)果(DROP,ACCEPT,etc.)。tcpcopy通過(guò)這樣的辦法將測(cè)試前端機(jī)上nginx 返回的結(jié)果截獲丟棄,并由interception返回一個(gè)ip header.相應(yīng)代碼實(shí)現(xiàn)如下:

拷貝結(jié)果包的ip header,發(fā)送:

interception向內(nèi)核發(fā)送IPQM_VERDICT消息報(bào)告裁決結(jié)果:

內(nèi)核接收到這個(gè)包后將packet_id這個(gè)包drop或accept。在后文中可以看到從0.4版本開(kāi)始的tcpcopy利用這個(gè)特點(diǎn)保留了一個(gè)允許訪問(wèn)的ip列表,因?yàn)槟J(rèn)情況下訪問(wèn)測(cè)試前端機(jī)上nginx服務(wù)所得到的結(jié)果會(huì)在ip層被drop掉,造成在80端口上無(wú)法訪問(wèn)nginx。有了這個(gè)允許ip列表,即使是刷了iptables規(guī)則、起了interception進(jìn)程,在某些機(jī)器上也是可以正常訪問(wèn)測(cè)試前端機(jī)上的nginx服務(wù)的。

三、操作方法

下載地址:http://tcpcopy.googlecode.com/files/tcpcopy-0.3.3.tar.gz,下載tcpcopy源碼包后解壓,執(zhí)行常規(guī)的./configure;make;make install三部曲即可。

假如有兩臺(tái)機(jī)器:

機(jī)器A:線上前端機(jī),ip:61.135.xxx.1;

機(jī)器B:測(cè)試前端機(jī),ip:61.135.xxx.2;

兩臺(tái)機(jī)器上都起了nginx服務(wù),操作者在兩臺(tái)機(jī)器上都需有sudo權(quán)限。

操作步驟:

1. 在B依次執(zhí)行,

1) 加載ip_queue模塊,modprobe ip_queue;

2) 配置iptables規(guī)則,sudo iptables -t filter -I OUTPUT -p tcp –sport 80 -j QUEUE;

3) 啟動(dòng)tcpcopy服務(wù)端,sudo ./interception & ;

2. 在A上執(zhí)行,

啟動(dòng)tcpcopy客戶端,sudo ./tcpcopy 61.135.xxx.1 80 61.135.xxx.2 80 &;

如果在A上看到“I am booted”,則表示操作成功,tcpcopy已經(jīng)開(kāi)始工作,可以查看一下機(jī)器B上nginx的日志確認(rèn)。

四、高級(jí)用法

1. 級(jí)聯(lián)

設(shè)有線上前端機(jī)一臺(tái)命名A,測(cè)試前端機(jī)若干B,C,D,……利用tcpcopy可以將A上的訪問(wèn)流量拷貝到B,B拷貝到C,C拷貝到D,……這樣就將一份流量放大了多倍,可以用來(lái)測(cè)試引擎的極限承受能力。

2. 同一tcpcopy實(shí)例內(nèi)多重復(fù)制

從0.4版開(kāi)始,tcpcopy支持在同一個(gè)客戶端實(shí)例復(fù)制多份請(qǐng)求到同一個(gè)服務(wù)端,啟動(dòng)的方式如下(比如要復(fù)制2份,使用-n這個(gè)選項(xiàng)來(lái)控制要復(fù)制的份數(shù)),

sudo ./tcpcopy 61.135.xxx.1 80 61.135.xxx.2 80;

sudo ./tcpcopy 61.135.xxx.1 80 61.135.xxx.2 80 -n 1;

sudo ./tcpcopy 61.135.xxx.1 80 61.135.xxx.2 80 -n 2;

3. 服務(wù)端允許訪問(wèn)ip列表

由于配置了iptables規(guī)則,使用tcp協(xié)議且源端口號(hào)為80的包都會(huì)被匹配放到目標(biāo)QUEUE去,進(jìn)而被drop掉,因此這個(gè)時(shí)候測(cè)試前端機(jī)上的nginx服務(wù)是不可訪問(wèn)的。從0.4版本開(kāi)始,可以指定一個(gè)允許訪問(wèn)ip列表,在列表中的機(jī)器上是可以訪問(wèn)測(cè)試前端機(jī)上的nginx服務(wù)的。假如要添加61.135.xxx.3,61.135.xxx.4到允許ip列表,啟動(dòng)interception時(shí)使用如下方式:

sudo ./interception 61.135.xxx.3:61.135.xxx.4;

五、tcpcopy在一淘的應(yīng)用

一淘引擎在今年2月份時(shí)有一次重大的更新,在上線之前,利用tcpcopy把所有前端機(jī)的流量拷貝到新的demo前端機(jī)上,進(jìn)行在線模擬實(shí)驗(yàn)。引流示例如下圖:

所有線上前端機(jī)都開(kāi)啟tcpcopy客戶端,由于一直報(bào)”Message too long”(這是由于packets長(zhǎng)度超過(guò)1500造成,每分鐘差不多有50個(gè))刷屏,所以將stderror重定向,

sudo ./tcpcopy ipA 80 ipB 80 2>/dev/null &

在測(cè)試前端機(jī)上開(kāi)啟tcpcopy服務(wù)端程序interception,并設(shè)置iptables規(guī)則。

壓了大約有一個(gè)星期,期間觀察qps,load等各項(xiàng)指標(biāo)是否正常。新引擎單個(gè)集群一天的平均qps大約是110,峰值大約240。實(shí)驗(yàn)結(jié)果顯示的包丟失率大約是(1822213-1797242)/1822213=1.37%. 后來(lái)進(jìn)一步將多個(gè)線上前端機(jī)的流量引到一個(gè)測(cè)試前端,測(cè)試新引擎的單集群極限服務(wù)能力,qps能達(dá)到1000以上, latency大約40ms,達(dá)到了上線要求。

Tcpcopy客戶端和服務(wù)端本身占用的資源較少,不影響在線服務(wù)。

13991 root 20 0 160m 77m 888 R 7.7 0.3 71:26.24 tcpcopy

7723 root 15 0 42592 38m 324 S 5.8 0.2 12:14.83 interception

%cpu分別占7.7%和5.8%,物理內(nèi)存占用分別是77m和38m.

由于幾乎完全模擬了線上環(huán)境,我們對(duì)于新引擎上線更有信心,最終上線圓滿成功,實(shí)現(xiàn)平穩(wěn)過(guò)渡?,F(xiàn)在利用tcpcopy拷貝線上流量作模擬壓測(cè)已成為我們?nèi)粘i_(kāi)發(fā)上線流程中的一項(xiàng)內(nèi)容。

六、tcpcopy架構(gòu)漫談

基于server的請(qǐng)求回放領(lǐng)域,一般分為離線回放和在線實(shí)時(shí)復(fù)制兩大領(lǐng)域,一般研究者都是從離線回放的角度在苦苦研究,而在實(shí)時(shí)復(fù)制領(lǐng)域,研究非常少,至少?gòu)膕igcomm評(píng)審人的評(píng)審意見(jiàn)來(lái)看,沒(méi)有看到相關(guān)內(nèi)容。

請(qǐng)求實(shí)時(shí)復(fù)制,據(jù)我所知,一般可以分為兩類:

1)基于應(yīng)用層的請(qǐng)求復(fù)制

2)基于底層數(shù)據(jù)包的請(qǐng)求復(fù)制

傳統(tǒng)的做法一般從應(yīng)用層面進(jìn)行復(fù)制,比如基于服務(wù)器的請(qǐng)求復(fù)制,這種復(fù)制的好處就是實(shí)現(xiàn)起來(lái)相對(duì)簡(jiǎn)單,但也存在著若干缺點(diǎn):

1)請(qǐng)求復(fù)制從應(yīng)用層出發(fā),穿透整個(gè)協(xié)議棧,這樣就容易擠占應(yīng)用的資源,比如寶貴的連接資源

2)測(cè)試跟實(shí)際應(yīng)用耦合在一起,容易導(dǎo)致對(duì)在線系統(tǒng)的影響,比如有些基于服務(wù)器的復(fù)制,會(huì)導(dǎo)致用戶請(qǐng)求的處理時(shí)間取決于最慢的請(qǐng)求處理時(shí)間(max(真正的請(qǐng)求處理時(shí)間,被復(fù)制的請(qǐng)求請(qǐng)求處理時(shí)間))

3)很難支撐壓力大的請(qǐng)求復(fù)制(據(jù)若干用戶反映,這種類型的請(qǐng)求復(fù)制,曾經(jīng)嚴(yán)重影響在線系統(tǒng))

4)很難控制網(wǎng)絡(luò)延遲

基于底層數(shù)據(jù)包的請(qǐng)求復(fù)制,可以做到無(wú)需穿透整個(gè)協(xié)議棧,路程最短的,可以從數(shù)據(jù)鏈路層抓請(qǐng)求包,從數(shù)據(jù)鏈路層發(fā)包,路程一般的,可以在IP層抓請(qǐng)求包,從IP層發(fā)出去,不管怎么走,只要不走TCP,對(duì)在線的影響就會(huì)小得多。

因此從數(shù)據(jù)包的角度去做基于server的請(qǐng)求復(fù)制,方向是對(duì)的,而且潛力非常巨大,很可惜,tcpreplay的作者做了一點(diǎn)這方面的探索(flowreplay),就放棄了。這方面的研究至少我沒(méi)有看到過(guò)(一般都去研究整個(gè)網(wǎng)絡(luò)了,sigcomm評(píng)審人也沒(méi)有提出類似的研究方案)。

進(jìn)入正題,tcpcopy是如何進(jìn)行架構(gòu)演化的呢?

tcpcopy架構(gòu)已歷經(jīng)三代,基本原理都一樣,本質(zhì)是利用在線數(shù)據(jù)包信息,模擬tcp客戶端協(xié)議棧,欺騙測(cè)試服務(wù)器的上層應(yīng)用服務(wù)。由于tcp交互是相互的,一般情況下需要知道測(cè)試服務(wù)器的響應(yīng)數(shù)據(jù)包信息,才能利用在線請(qǐng)求數(shù)據(jù)包,構(gòu)造出適合測(cè)試服務(wù)器的請(qǐng)求數(shù)據(jù)包,因此只要基于數(shù)據(jù)包的方式,無(wú)論怎么實(shí)現(xiàn)(除非是tcp協(xié)議改的面目全非),都需要返回響應(yīng)包的相關(guān)信息。

三種架構(gòu)的差別就在于在什么地方截獲響應(yīng)包

我們先看看tcpcopy最初的架構(gòu):

從上圖可以看出,tcpcopy是從數(shù)據(jù)鏈路層(pcap接口)抓請(qǐng)求數(shù)據(jù)包,發(fā)包是從IP層發(fā)出去,測(cè)試服務(wù)器的TCP協(xié)議棧沒(méi)有類似ip queue或者nfqueue的干擾,響應(yīng)包會(huì)直接返回給在線機(jī)器(通過(guò)設(shè)置路由),tcpcopy可以在數(shù)據(jù)鏈路層捕獲到這些響應(yīng)包,這些響應(yīng)包會(huì)到達(dá)IP層,一般最終被丟棄掉(除非是客戶端IP地址就是這臺(tái)在線機(jī)器的IP地址,會(huì)通過(guò)IP層,但會(huì)被TCP reset掉)。

這種架構(gòu)一般只能工作在同一網(wǎng)段,而且對(duì)于外網(wǎng)應(yīng)用,一般只能復(fù)制單臺(tái)在線流量給測(cè)試服務(wù)器,無(wú)法對(duì)網(wǎng)易廣告投放系統(tǒng)進(jìn)行深度問(wèn)題發(fā)現(xiàn)和潛能挖掘。

第一種架構(gòu)總結(jié)如下:

好處:

1)簡(jiǎn)單,粗暴

2)適合冒煙測(cè)試

3)測(cè)試結(jié)果比較真實(shí)

不好的地方:

1)相對(duì)而言,會(huì)更加影響在線,因?yàn)轫憫?yīng)包信息全部回給在線機(jī)器了(當(dāng)然這種還是比應(yīng)用層面的請(qǐng)求復(fù)制,影響更小)

2)同一網(wǎng)段限制

3)對(duì)于外網(wǎng)應(yīng)用,無(wú)法充分利用或者很難充分利用多臺(tái)在線流量,從而無(wú)法為壓力測(cè)試提供技術(shù)支持

4)內(nèi)網(wǎng)應(yīng)用嚴(yán)重受限制,因請(qǐng)求的客戶端IP地址不能是被復(fù)制的在線機(jī)器的IP地址

第二種架構(gòu),也就是目前開(kāi)源的架構(gòu),大致架構(gòu)如下:

從上面圖中我們可以看出,tcpcopy默認(rèn)從IP層抓包,從IP層發(fā)包,與第一種架構(gòu)不同的是,我們?cè)跍y(cè)試服務(wù)器進(jìn)行響應(yīng)包的截獲,并通過(guò)intercept程序返回響應(yīng)包的必要信息給tcpcopy。這種架構(gòu)為分布式壓力測(cè)試提供了可能性,相比第一種架構(gòu),大大推動(dòng)了tcpcopy的進(jìn)化。

我們先從響應(yīng)包的截獲來(lái)分析,理論上,可以在測(cè)試服務(wù)器的IP層或者數(shù)據(jù)鏈路層進(jìn)行截獲響應(yīng)包,我們具體分析如下:

1)在數(shù)據(jù)鏈路層抓,正常情況下,其響應(yīng)數(shù)據(jù)包會(huì)返回給真正發(fā)起請(qǐng)求的客戶端,這會(huì)或多或少影響到客戶端的TCP(頻繁地reset)模塊,而且在壓力大的時(shí)候,會(huì)給交換機(jī)、路由器甚至整個(gè)網(wǎng)絡(luò),帶來(lái)不必要的干擾。

2)在測(cè)試服務(wù)器的IP抓響應(yīng)包,正好有netlink技術(shù)來(lái)解決上面的問(wèn)題,netlink是一種用戶態(tài)進(jìn)程與內(nèi)核進(jìn)行交互的技術(shù),具體地我們可以利用內(nèi)核模塊ip queue(內(nèi)核3.5以下版本)或者nfqueue(內(nèi)核3.5或者以上版本)來(lái)達(dá)到捕獲響應(yīng)包的目的。

我們采用了第二種方式,也即上圖中的IP層來(lái)截獲響應(yīng)包,當(dāng)響應(yīng)包傳遞給intercept后,我們就能copy到響應(yīng)包信息的必要信息(一般為TCP/IP頭部信息),傳遞給tcpcopy,我們還可以通過(guò)verdict告訴內(nèi)核,該如何處理這些響應(yīng)包,如果沒(méi)有設(shè)置白名單的話,就會(huì)在IP層丟棄掉這些響應(yīng)包,這時(shí)候你是無(wú)法利用tcpudmp來(lái)抓到這些響應(yīng)包的(tcpdump工作在數(shù)據(jù)鏈路層)。

這種設(shè)計(jì)的好處就是可以支持復(fù)制多臺(tái)在線流量到一臺(tái)測(cè)試服務(wù)器中去,我們?cè)趇ntercept保留路由信息,知道響應(yīng)包的相關(guān)信息該如何返回給哪一個(gè)tcpcopy實(shí)例。然而這種架構(gòu),intercept會(huì)不同程度地占用測(cè)試服務(wù)器的資源,而且ip queue或者nfqueue,并不一定能夠高效工作,因而給測(cè)試,特別是高壓測(cè)試和短連接壓力測(cè)試,帶來(lái)了很大麻煩。

這種架構(gòu)總結(jié)如下:

好處:

1)支持復(fù)制多臺(tái)在線流量

2)影響在線機(jī)器更小,因?yàn)橐话阒恍枰祷豑CP/IP頭部信息

不好的地方:

1)較第一種更為復(fù)雜

2)性能極限往往在ip queue或者nfqueue

3)intercept擴(kuò)展性不好,受制于ip queue和nfqueue無(wú)法支持多進(jìn)程進(jìn)行響應(yīng)包的捕獲操作

4)intercept影響測(cè)試服務(wù)器的最終測(cè)試結(jié)果,特別是壓力大的時(shí)候

5)無(wú)法對(duì)測(cè)試服務(wù)器進(jìn)行完整測(cè)試(沒(méi)有覆蓋到數(shù)據(jù)鏈路層的出口)

6)運(yùn)維不方便

第三種架構(gòu),如下圖:

上述架構(gòu),也即最新架構(gòu),是為了極限測(cè)試的目的而設(shè)計(jì)的,把intercept的工作從測(cè)試服務(wù)器(test server)中offload出來(lái),放到另外一臺(tái)獨(dú)立的輔助服務(wù)器(assistant server,原則上一定要用同網(wǎng)段的一臺(tái)閑置的服務(wù)器來(lái)充當(dāng)輔助服務(wù)器)上面進(jìn)行截獲響應(yīng)包,而且把原先從IP層捕獲響應(yīng)數(shù)據(jù)包的工作轉(zhuǎn)移到從數(shù)據(jù)鏈路層抓響應(yīng)包,這些改變大大降低了對(duì)測(cè)試機(jī)器的各種干擾(除了路由設(shè)置,其它已經(jīng)沒(méi)有影響了),而且大大擴(kuò)大了捕獲響應(yīng)包的能力。當(dāng)然這種測(cè)試也更加真實(shí)。

具體如下:

在運(yùn)行上層服務(wù)的測(cè)試服務(wù)器test server上面設(shè)置路由信息,把待測(cè)試應(yīng)用的需要被捕獲的響應(yīng)數(shù)據(jù)包信息路由到輔助服務(wù)器assistant server 上面,在assistant server上面,我們?cè)跀?shù)據(jù)鏈路層截獲到響應(yīng)包,從中抽取出有用的信息,再返回給相應(yīng)的tcpcopy。

為了高效使用,這種架構(gòu)推薦使用pcap進(jìn)行抓包,這樣就可以在內(nèi)核態(tài)進(jìn)行過(guò)濾,否則只能在用戶態(tài)進(jìn)行包的過(guò)濾,而且在intercept端或者tcpcopy端設(shè)置filter(通過(guò)-F參數(shù),類似tcpdump的filter),達(dá)到多個(gè)實(shí)例來(lái)共同完成抓包的工作,這樣可擴(kuò)展性就更強(qiáng),適合于超級(jí)高并發(fā)的場(chǎng)合。

這種架構(gòu)需要的機(jī)器資源也更多,而且也變得更加難使用,需要了解tcp知識(shí),route知識(shí)和pcap filter知識(shí)(類似于tcpdump過(guò)濾條件),因此推薦有條件的并且熟悉上述知識(shí)的人使用最新的架構(gòu)。

需要注意的是,在某些場(chǎng)景,pcap抓包丟包率會(huì)遠(yuǎn)高于raw socket抓包,因此最好利用pf_ring來(lái)輔助或者采用raw socket來(lái)抓包

總結(jié)如下:

好處:

1)更加真實(shí)

2)可擴(kuò)展性更強(qiáng)

3)適合高并發(fā)場(chǎng)合

4)無(wú)ip queue或者nfqueue的各種限制

5)對(duì)測(cè)試服務(wù)器幾乎沒(méi)有任何性能干擾的影響

6)在運(yùn)行服務(wù)的測(cè)試服務(wù)器,運(yùn)維更加方便

7)不會(huì)隨運(yùn)行服務(wù)的服務(wù)器崩潰而崩潰

不好的地方:

1)操作難度更大

2)需要的機(jī)器數(shù)量更多

3)需要的知識(shí)也更多

4)assistant server(運(yùn)行intercept的機(jī)器)原則上必須要和測(cè)試服務(wù)器(test server)在同一個(gè)網(wǎng)段

上面三種架構(gòu)均具有價(jià)值,目前開(kāi)源出來(lái)的僅僅包括第二種架構(gòu)和第三種架構(gòu),tcpcopy默認(rèn)采用第二種架構(gòu),有條件的可以采用第三種架構(gòu)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容