• 针对性地进行系统调优,重复进行压力测试,确定性能是否得到提高。
• 重复以上 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 的脚本以及数据包的具体内容将是一个繁重而且烦人的工作,进行关联的工作的难度也将大大提高。客户端程序往往是利用更高层的应用协议 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