1. 程式人生 > >TCPcopy模擬壓測

TCPcopy模擬壓測

參考:https://www.cnblogs.com/zhengyun_ustc/p/tcpcopy.html  真刀真槍壓測:基於TCPCopy的模擬壓測方案  

一、為什麼要做模擬測試

線下的傳統壓力測試,難以模擬真實流量,尤其難以模擬正常流量混雜著各色異常流量。所以,線下壓得好好的系統,上線後可能某天突然雪崩,說好能支撐 5 倍流量的系統重構,也許流量一翻倍就徹底掛了。

但辦法總比問題多。

(1)系統重構或重要變更上線前,可以拷貝線上真實流量,實時模擬線上流量,甚至可以放大真實流量,進行壓力測試,以評估系統承載能力。

(2)反過來也可以這樣,如果線上跑著跑著發現有效能瓶頸,但線下環境難以復現,還不如把真實流量拷貝到線下重放,畢竟線下環境便於上各種排查手段,重放幾遍都行,直到找到問題

二、如何實時拷貝線上真實流量呢?

TCPCopy。TCPCopy 是一種請求複製(複製基於 TCP 的 packets)工具 ,通過複製線上資料包,修改 TCP/IP 頭部資訊,傳送給測試伺服器,達到欺騙測試伺服器的TCP 程式的目的,從而為欺騙上層應用打下堅實基礎

三、TCPCopy是如何工作的

TCPCopy是用來做TCP重放的,常用的場景是把線上流量複製到測試環境,用來排查線下不容易重現的問題,或者對測試環境做壓力測試。

王斌講過,基於 Server 的請求回放領域,一般分為離線回放和線上實時複製兩種。

其中請求實時複製,一般可以分為兩類:

1)基於應用層的請求複製 ,

2)基於底層資料包的請求複製。

如果從應用層面進行復制,比如基於伺服器的請求複製,實現起來相對簡單,但也存在著若干缺點:

1)請求複製從應用層出發,穿透整個協議棧,這樣就容易擠佔應用的資源,比如寶貴的連線資源 ,

2)測試跟實際應用耦合在一起,容易影響線上系統,

3)也因此很難支撐壓力大的請求複製,

4)很難控制網路延遲。

基於底層資料包的請求複製,可以做到無需穿透整個協議棧,路程最短的,可以從資料鏈路層抓請求包,從資料鏈路層發包,路程一般的,可以在IP層抓請求包,從IP層發出去,不管怎麼走,只要不走TCP,對線上的影響就會小得多。這也就是 TCPCopy 的基本思路。

image