很長時間不更新博客了。最近做一些壓力測試(流量實時導入與離線回放)、內網源(含全部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版本架構如下圖,
上述架構,也即最新架構,是爲了極限測試的目的而設計的,把intercept的工作從測試服務器(test server)中offload出來,放到另外一臺獨立的輔助服務器(assistant server,原則上一定要用同網段的一臺閒置的服務器來充當輔助服務器)上面進行截獲響應包,而且把原先從IP層捕獲響應數據包的工作轉移到從數據鏈路層抓響應包,這些改變大大降低了對測試機器的各種干擾(除了路由設置,其它已經沒有影響了),而且大大擴大了捕獲響應包的能力。當然這種測試也更加真實。
部署:
此環境準備三臺機器,假設我們需要導入Apache的80口流量,Apache安裝過程省略。如對上圖理解有困難,我畫了一張簡明草圖方便你理解
一、正式節點 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是否滾動。
總結:
再次感謝Tcpcopy的開源作者(@wangbin579)的無私奉獻。如有問題可留言回覆,希望能幫到你。