前几天进行了监控系统性能测试的相关工作。现在总结一下,并写下感受。
第一次看到这个系统感觉很怪,他有两级服务器,一台是web 服务器,部署有java应用,一台所谓的二级服务器,也部署有java代码,同时两台机器也都部署有ms sqlserver。web服务器负责提供web访问支持,二级服务器定期收集设备上报的状态。两台服务器还要定期的同步数据,web服务器还要实现定期告警
这与我先前接触到的系统有很大不同,起码理解上都有问题。所以更要深入研究他们的需求了。首先了解需要加入性能测试的功能范围。
- 收集设备状态是个什么概念?即二级服务器定期收集所有数据库内有的atm的设备状态,处理,存储。当然不是主动收集,而是设备自动上报,时间间隔是5分钟。也就是说到5分钟定时到期的时候,设备会自动上报状态,当然是以约定好的报文的形式。那么操作很简单。创建连接、发送报文、关闭连接。当然,一台设备是不会给服务器产生任何压力的,毕竟报文size很小,毕竟时间有间隔,不是频繁操作。但是如果设备达到一定规模,比如5000台,比如10000台,这个时候就是比较可观的了。
- 告警怎么实现的?原来设备上报状态,二级服务器进行处理、存储,通过web服务器sqlserver的作业定时同步一个表,那么这个表包含什么呢?包含设备上报的状态。然后,web服务器上的告警定期检查状态,如果触发了告警,则push。
- 大规模数据操作。包括各种日结交易,各种导入交易。
事实证明,如果将范围分解清楚,做起事情来是会事半功倍的。攻克了这些理解难点,那么我大概有了这么一个测试计划。既然我们的目标是真实模拟实际情况,看现有server设备现有系统版本确认系统是否能够正常响应。
我需要模拟状态上报,另外还要加上很多web操作,还有日结操作。最终场景是,这次操作都存在的情况下,系统是否能够正常响应,不会出现堆积,丢失,无法响应的状况。
模拟状态上报。我采取了winsockt协议,其实好简单,就是一个简单creat sockt;send data;然后clost socket。难点到在于data.ws数据的组织。
脚本如下:
#include "lrs.h"
Action()
{
//定义了一个int型的变量rca,主要是为了调试脚本时确认soket连接是否建立成功。
/*
我分别加了3个transction,主要是为了确认如果大并发的情况下,是否会造出交通拥堵。事实证明这是非常有效的,因为我从我的测试监控平台可以看到,很明显的压力大服务器资源 不够的情况下,申请建立一个socket连接也是非常困难的。
*/
int rca;
lr_start_transaction("CreatSocket");
rca =lrs_create_socket("socket2", "TCP", "LocalHost=0", "RemoteHost=*.*.*.8:6030", LrsLastArg);
lr_end_transaction("CreatSocket", LR_AUTO);
if (rca==0)
lr_output_message("Socket is succesfully created!");
lr_start_transaction("SendMessage");
lrs_send("socket2", "buf0", LrsLastArg);
lr_end_transaction("SendMessage", LR_AUTO);
//关闭连接
lr_start_transaction("CloseSocket");
lrs_close_socket("socket2");
lr_end_transaction("CloseSocket", LR_AUTO);
//think_time是为了实现5分钟上报的定时。
lr_think_time(300);
return 0;
}
而我的data.ws则如下:
采用了两个参数化。一个TerminalNum来标志设备,多少列即多少台设备。一个是读卡器状态,是我用来控制每台报文insert的规模以及触发告警使用的。
;WSRData 2 1
send buf0 319
"0319020100<TerminalNum>000000<ReadCareStatus>0000000000000O0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
-1a