• 針對性地進行系統調優,重復進行壓力測試,確定性能是否得到提高。
• 重復以上 3-7 步,逐步提高系統的性能。
魯制腳本的工具虛擬用戶產生器 Vugen 實際上是一套開發調試工具。 Conductor 是一個框架程序和監控程序,它負責將 Vugen 開發的腳本以多進程 / 多線程的方式在 Player 機器上運行。為了產生更大的壓力, Conductor 必需支持集群功能,理論上 Conductor 可以和任意多臺 Player 機器互連,以便產生足夠大的負載壓力。 Conductor 同時實現無代理方式的監控功能,可以監控各種主流的軟件,并且提供對不支持的軟件進行監控的二次開發的手段。 Analysis 實際上是一個數據分析工具,用于事后的數據分析,它可以安裝在任何 Windows 平臺的機器上。下面我們論述每個部件的技術要點。
• 虛擬用戶產生器 Vugen
虛擬用戶產生器通過錄制客戶端和后臺服務器之間的通訊包,分析其中的協議,自動產生腳本。用戶在自動產生的腳本的基礎上進行修改,從而快速開發出一個邏輯功能和客戶端軟件完全一樣的壓力腳本程序。
錄制的技術主要是通過 proxy 的方式來實現的,如下圖所示:Vugen 根據對捕獲的數據的分析,將其還原成對應協議的 API 組成的腳本。由于 Proxy 源程序的獲得非常容易, Vugen 的主要的技術要點是 如何根據捕獲的數據包來反解析成對應的網絡協議 。通常捕獲的數據包為 TCP 數據流,我們可以很容易的生成 socket 層次的腳本,類似如下示例:
int main( int argc, char** argv)
{
char buf[BUF_MAX_LEN];
int socket = 0;
socket = connect(“IP=192.168.52.65”, “Port=3200”, TCP);
getbuffer(buf, “trace.dat”, 1, SEND);
send(socket, buf);
receive(socket, buf);
getbuffer(buf, “trace.dat”, 3, SEND);
send(socket, buf);
receive(socket, buf);
……
close(socket);
}
其中 trace.dat 包含著錄制時捕獲的數據包,按照 “ 發 - 收 - 發 - 收 - 發 - 收 ” 的順序排放。
毫無疑問,這樣的腳本按照記錄的收發過程來回放,但是它的最大的缺點是處于太底層。要分析和修改 socket API 的腳本以及數據包的具體內容將是一個繁重而且煩人的工作,進行關聯的工作的難度也將大大提高??蛻舳顺绦蛲抢酶邔拥膽脜f議 API 編寫的,客戶端軟件的編寫者也不一定對 socket-API 組成腳本進行修改。因此, Vugen 應該盡可能地產生更高層網絡協議的腳本 ,方便用戶的閱讀和修改工作。
以 Tuxedo 應用為例,對于 Tuxedo 應用,一次典型的 Tuxedo 業務調用的序列為:
tpinit(….) // 和后臺建立連接
tpcall(….) // 向后臺發起交易請求
tpterm(…) // 斷開和后臺的連接
這三次 api 調用將產生 TCP 層的 7 次收發動作, Vugen 必需根據這 7 次的收發,還原產生 Tuxedo-API 的調用序列。
由于對于不同的應用層協議,只能分別開發,因此, Vugen 支持的網絡協議的多少是衡量性能測試工具的主要指標之一。
當然, socket 方式是一切應用層協議的基礎, socket 腳本是一種通用的方式。對于 Vugen 不支持的應用層協議只能通過 socket 層次來錄制。因此 Vugen 能生成 socket-API 腳本是其最基本的功能。
VuGen 產生的腳本應該應該是跨平臺的,因此它應該提供 C/Java 兩種語言的方式,支持各種平臺的 C/Java 編譯器。腳本可以在 Windows/Unix/Linux 上運行, Player 運行的機器既可以是 Windows 平臺,也可以是 Linux, FreeBSD, Solaris, AIX 和 HP-UX 等平臺,這樣會方便用戶選擇機器作為 Player 。這一點非常重要。
由于 Vugen 支持的每種應用層協議必需單獨開發,在設計 VuGen 的軟件體系架構時,應該采用插件的方式來設計網絡協議的解析器。這部分的設計借鑒了 Apache 的 module 設計思想,可以讓任何對開發協議解析器感興趣的開發者在一個統一的框架下開發。
VuGen 的體系結構如下圖所示:
Vugen 的體系結構分為三部分:
• 第一部分為底層 proxy 錄制器 , 負責捕獲客戶端和服務器之間通訊的數據包,這樣的軟件在開放源碼的世界里面隨處可見,而且非常成熟。 我們只要移植過來就可以使用。
原文轉自:http://www.uml.org.cn/Test/200503183.htm