淺談壓測之一Tcpcopy流量導入

      很長時間不更新博客了。最近做一些壓力測試(流量實時導入與離線回放)、內網源(含全部centos、EPEL)、自制RPM包等事情了。個人有點淺顯的理解,如各位看官對以上感興趣,留言告訴我,後面會選擇性更新出來,相信對各位都是比較有用的。

      本文用較短篇幅介紹Tcpcopy的流量導入,後續會再更新一篇離線模式使用。

      一個完善的網站、系統,上線前必須經過完備的壓力測試,這是基本的質量保證。在測試過程中,我們使用過 AB、Loadrunner效果都不理想,無法精確還原用戶請求。後來我們使用了網易開源的Tcpcopy,還原了真實流量,以及離線流量按需回放等功能,對新業務的上線起了至關重要的作用。

簡介:

Tcpcopy是一種請求複製(所有基於tcp的packets)工具,可以把在線流量導入到測試系統中去。

曾經應用於網易的廣告投放系統,urs系統,nginx hmux協議等系統,避免了上線帶來的很多問題。

現在此工具已經廣泛應用於各大互聯網公司。tcpcopy鼻祖王波同學(@wbo65),是他在這方面進行了最初探索。(2009年設計並代碼實現,僅僅300多行代碼就支撐了網易廣告投放系統的最初開發,上線零失誤,解決上線前數百個問題),當然這個最簡單的版本應用範圍非常有限,王斌(@wangbin579)在2010年末在這個架構上面進行了深度改造,擴展到1000多行代碼)。最新版本1.0.0。

功能:

1)分佈式壓力測試工具,利用在線數據,可以測試系統能夠承受的壓力大小(遠比ab壓力測

試工具真實地多),也可以提前發現一些bug

2)普通上線測試,可以發現新系統是否穩定,提前發現上線過程中會出現的諸多問題,讓開

發者有信心上線

3)流量放大功能,可以利用多種手段構造無限在線壓力,滿足中小網站壓力測試要求

架構:

1.0.0版本架構如下圖,

wKioL1WlL6rRw-VCAABcYqMR8BE618.gif

上述架構,也即最新架構,是爲了極限測試的目的而設計的,把intercept的工作從測試服務器(test server)中offload出來,放到另外一臺獨立的輔助服務器(assistant server,原則上一定要用同網段的一臺閒置的服務器來充當輔助服務器)上面進行截獲響應包,而且把原先從IP層捕獲響應數據包的工作轉移到從數據鏈路層抓響應包,這些改變大大降低了對測試機器的各種干擾(除了路由設置,其它已經沒有影響了),而且大大擴大了捕獲響應包的能力。當然這種測試也更加真實。

部署:

此環境準備三臺機器,假設我們需要導入Apache的80口流量,Apache安裝過程省略。如對上圖理解有困難,我畫了一張簡明草圖方便你理解

wKioL1WlM8-RbOd8AAHpjg_2rcY043.jpg

一、正式節點  1.1.1.1 安裝httpd tcpcopy

二、測試節點  1.1.1.2 安裝httpd 

三、輔助節點  1.1.1.3 安裝intercept

安裝tcpcopy
cd /tmp
wget https://github.com/session-replay-tools/tcpcopy/archive/1.0.0.tar.gz
tar -zxvf 1.0.0.tar.gz
./configure --prefix=/usr/local/tcpcopy
make
make install 
vi /etc/profile.d/tcpcopy.sh
#加入下面一行
export PATH=$PATH:/usr/local/tcpcopy/sbin
source /etc/profile.d/tcpcopy.sh


安裝intercept
yum install libpcap-devel 
cd /tmp
wget https://github.com/session-replay-tools/intercept/archive/1.0.0.tar.gz
tar -zxvf 1.0.0.tar.gz
./configure --prefix=/usr/local/intercept
make
make install 
vi /etc/profile.d/intercept.sh
#加入下面一行
export PATH=$PATH:/usr/local/intercept/sbin
source /etc/profile.d/intercept.sh


#正式環境中運行,將外部訪客的IP轉換爲192.168.10.0/24,方便測試機設置路由
tcpcopy -x 80-1.1.1.2:80 -s 1.1.1.3 -c 192.168.10.x &
#測試環境中添加路由
route add -net 192.168.10.0 netmask 255.255.255.0 gw 1.1.1.3
#輔助環境中運行,攔截80請求並丟棄
intercept -i eth0 -F 'tcp and src port 80' -d

效果:

用瀏覽器訪問真實節點時,查看測試節點access_log是否滾動。

wKiom1WlMrSCJcb6AAWuawxYkWk276.jpg

總結:

再次感謝Tcpcopy的開源作者(@wangbin579)的無私奉獻。如有問題可留言回覆,希望能幫到你。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章