Websphere MQ 应用架构以及性能调优和测试
上一篇 / 下一篇 2012-06-26 23:35:20 / 个人分类:性能测试
/a MX/^.V pE0WebSphere MQ 做为一种消息中间件,它的应用领域主要在两大方面:51Testing软件测试网0j1Gz&M-b+B
h)C Jfq]TQ01、我们可以编写相应的处理逻辑,来完成不同应用的集成。甚至我们可以在WebShphere MQ的基础上实现分布式Websphere MQ数据交换网络,从而完成不同用户之间、不同部门之间的文件交换,并且具有断点续传、传输加密、在HTTP协议上传输以穿透防火墙等功能。
4|A^{'m6W&Gd#K051Testing软件测试网'Z$X`#Z4I.MJm2、WebSphere MQ 做为WebSphere Message Broker的底层,WebSphere MQ所能够达到的最大性能对整个WebSphere Message Broker所能够体现的性能至关重要。51Testing软件测试网!s"kT[t(|0_j6FR
51Testing软件测试网7J"k(G.j yzcP&yWebSphere MQ的性能是企业服务总线、以及总线上的应用所能够达到最大性能的关键,也是现在很多SOA应用所能够达到最大性能的关键。 对于这两大方面的应用,我们需要根据具体的应用架构来对WebSphere MQ进行性能优化。为了对WebSphere MQ进行性能优化唯一的方法就是做好性能测试,从而可以决定更好的架构和更好的参数值来得到更高的系统性能。
o&V&P }I0g ^ bC/E&T,|3a051Testing软件测试网by/R*p_&P.}2x&fWebsphere MQ数据交换网络:表示多个Websphere MQ队列管理器进行配置形成一个完整的数据交换环境。
#W1|4]*Co051Testing软件测试网 ~c4E1as$wlWebSphere MQ 客户端应用:表示与WebSphere MQ进行交互的应用程序。
!E.|0]OL2{@051Testing软件测试网[kN ZpMQ Client App: WebSphere MQ 客户端应用的英文简称。51Testing软件测试网\%Tzui
3`*IhE*V2@J.z0消息生产者:表示往Websphere MQ放入消息的WebSphere MQ 客户端应用。51Testing软件测试网&\Yd(_ xy;X
D*Y*mB#v~0消息消费者:表示从Websphere MQ 取出消息的WebSphere MQ 客户端应用。
Jb8R)L(xP dc08S&c7H*Xd.}1aFd+c0Within:表示WebSphere MQ 客户端应用与WebSphere MQ处于同一个操作系统环境中,采用IPC通讯方式。
-Wvk i X$W-{051Testing软件测试网Pw/\6x#NAcross::表示WebSphere MQ 客户端应用与WebSphere MQ处于同一个操作系统环境中,采用TCP/IP通讯方式。51Testing软件测试网6DF4\QUo
51Testing软件测试网K }8aP?r T/]*FIPC:进程间通讯,这里的IPC是指同一个操作系统环境中的多个进程采用类似于共享内存的方式来进行通讯。
{c#Kz#M'{-R$l0? la2}`K-r5EV:RM/k1Y0K2tx d,`H)^0WebSphere MQ应用架构基本上就是以下几个应用架构地扩展和组合。51Testing软件测试网4el? BJ!O3A@
7Hu_Hvy:wCY%D0图3.1 单个队列管理器应用架构
@FbBK)Do)\u051Testing软件测试网pt|P!}7`图3.1所表示Websphere MQ应用架构主要分成以下4种:
hB7`C `t0- 消息生产者、消息消费者、Websphere MQ分别处于不同的机器。
- 消息生产者、消息消费者、Websphere MQ处于同一机器。
- 消息生产者和Websphere MQ分别处于不同的机器,消息消费者和Websphere MQ处于同一的机器。
- 消息生产者和Websphere MQ处于同一机器,消息消费者和Websphere MQ处于不同的机器。
而在现实的应用场合中,我们需要对这种架构进行扩展,从而可以形成如下图所示的应用架构。
*_WF"QhI}~7v-z051Testing软件测试网)M:x4P5Z"Gd+["a图3.2 多队列管理器应用架构示例
H)VY0mcE K051Testing软件测试网/~q$K$qeD O5?^在实际用户场景中,WebSphere MQ 客户端应用与Websphere MQ的通讯方式基本上分成以下两种。
;w-Gj'W:u{6~ G0- 通过TCP/IP协议与WebSphere MQ交互 。
- ? 通过IPC方式与WebSphere MQ交互,但是IPC方式只有WebSphere MQ 客户端应用和WebSphere MQ处于同一台机器上才能够使用,并且IPC方式的性能远远高于TCP/IP方式的性能。因为IPC方式的高性能,我们在很多实际用户场景中都会修改相应地架构,形成一个新的架构(例子如下图所示)。
图3.3 改进的配置示例51Testing软件测试网HJ/^J~{
51Testing软件测试网:xziw%|#YK对于图3.3 改进的配置示例所示的架构,我们进行了这样的改变,即把图的上半部分所表示的架构改变成下半部分所表示的架构,这样的架构改变会带来一个好处就是部署在WAS上的JMS/MQ应用往WebSphere MQ放入消息或者取消息的效率将得到大大地提高,从而提高了WAS上的JMS/MQ应用的执行效率
BP \'t&_3qw ro0t.OQ.S {"~0无论Websphere MQ应用架构如何变化,要使整个系统达到一个很好的性能,如何进行性能测试和如何调整WebSphere MQ参数的方法都是一样的。为了更好地阐述相应的方法,我们将以图3.1 单个队列管理器应用架构所示的架构为例。51Testing软件测试网%Y li2i^ Zv
/S `9i.S8Kb Gc0I:g1S5U)v9P!eB0为了使Websphere MQ发挥最大的性能(假设我们已经对WebSphere MQ 客户端应用进行了Websphere MQ调用编码级别的性能优化考虑),我们需要考虑以下对Websphere MQ产生重大性能影响的几个方面。
6m'R"Q"u\ Zd\0- 消息大小会对WebSphere MQ的性能产生较大的影响;所以在现实的应用场合中建议用户采用的消息大小最好为:1K、2K、4K、8K、16K、32K。如果你的消息过大的话,请采用MQ提供的消息分组、消息分段机制来对大消息进行拆分。不要把过大的消息(如5M、10M的消息)不通过相应地消息分组或者消息分段机制进行拆分就直接到打入WebSphere MQ的队列中,这样将会导致WebSphere MQ提供的一些和性能密切相关的参数无法发挥出它所具有的作用,从而不能充份发挥WebSphere MQ的性能。
- 消息生产者、消息消费者、Websphere MQ处于同一机器。
- WebSphere MQ对消息的缓冲能力,WebSphere MQ提供了这样的一个功能,就是WebSphere MQ能够在内存中开辟一个缓冲区来缓冲队列中存储的数据。我们需要根据消息的大小、在高峰期的时候WebSphere MQ队列中会保存的消息的数目、机器的内存大小这几个因素来决定WebSphere MQ的缓冲区的大小。如果我们能够通过测试得出一个合适的值,将使系统大大地减少I/O;从而即使在没有高速存储设备的情况下,Websphere MQ也能够发挥出一个较好的性能。
- I/O分布地考虑,对于Websphere MQ来说在队列中保存的非持久化消息,如果Websphere MQ无法在内存中缓存的话,这些消息将会被写到磁盘存储中;持久化消息将被定期地从内存写到磁盘存储中(机制类似于数据库的CHECKPOINT机制)。WebSphere MQ具有相应的日志能力来保障持久化消息在异常情况下(如系统掉电、Websphere MQ异常终止)不会丢失。在现实的场合中,我们必须把Websphere MQ的日志存储路径单独的放到一个高速存储设备上,并且在条件允许的情况下把Webpshere MQ的队列存储路径(对应于队列管理器目录下的queue目录)也单独放到一个高速存储设备上。通过这些措施,将提高Websphere MQ的性能。
- Websphere MQ客户端应用与WebSphere MQ通讯方式地选定,我们需要在TCP/IP、IPC这两种通讯方式中选择一种。特别是在机器硬件条件允许的情况下,我们建议采用IPC方式通讯,这样将提高我们整个系统的处理效率。
现在让我们想像下我们的应用场景,在整个系统运行时,会存在多个消息生产者和消息消费者与Websphere MQ进行交互,并且这些消息生产者和消息消费者会操作不同的队列或者同一个队列。通过这样地分析我们可以得到以下的用例需要进行测试(假设消息大小为1K),并且我们需要根据现实的情况来决定消息生产者和消息消费者的数目、队列的数目以及决定是否需要把相应的用例进行组合来进行测试。51Testing软件测试网+PO z;[|@&Ndz
51Testing软件测试网`?3t#V*e^要测试的用例表格如下所示:
uAGy7dG+uFx051Testing软件测试网!Sx9JgEB;H0x图 4.1 性能测试用例51Testing软件测试网A:i?1mZ7C0G
#Gm7C$b1D0上述的表格我们确定了三大类用例:51Testing软件测试网'e,l|:?,ej
- One To Many:一个消息生产者和多个消息消费者,这个用例描述了这样的应用场合,一个消息生产者把一个消息同时打往多个队列(这个可以利用Websphere MQ的分发列表机制实现),以供分别监听不同队列的消息消费者进行消费,完成相应的业务逻辑。
- Many to Many(Multi Queue):多个消息生产者和多个消息消费者,消息生产者和消息消费者是一对一的关系,但是不同消息生产者或者消费者操作的队列是不同的。
- Many to Many: 多个消息生产者和多个消息消费者,消息生产者和消息消费者是一对一的关系,但是不同消息生产者或者消费者操作的队列是相同的。
3cA(sd/d0H~0我们可以把这三大类用例进行组合一起进行测试,从而可以模拟出真实的复杂环境。通过上面的测试用例表格,我们需要在Websphere MQ中建立20个队列(假设Websphere MQ安装在AIX环境上)。51Testing软件测试网1s7NJ3f e
有了测试用例,我们需要测试程序。我们如何形成测试程序来模拟真实的环境呢?我们可以利用MQ提供的ih03这个supportpac程序来进行模拟,根据测试结果来决定Websphere MQ的参数调整和架构的确定。这里所阐述的方法和步骤在实际的场景中可以完全采用。由于ih03提供的测试程序的限制无法进行长时间的压力测试,所以决定了我们这篇文章是在阐述一个可借鉴的性能测试方法而不是一个具体的步骤。
)A[iq:y}!}05 测试环境的准备51Testing软件测试网](x}2I7RG0O
51Testing软件测试网Mow P0c|2sQG2a+f'{我们准备2台机器,一台机器做为测试客户机(2CPU),一台机器做为测试服务器(4CPU)。测试服务器和客户机安装AIX操作系统、gcc编译器、ih03程序。客户机上的ih03程序通过TCP/IP的方式连接测试服务器上的Websphere MQ 队列管理器,测试服务器上的ih03程序通过IPC方式连接MQ队列管理器。在这里测试环境不采用高速存储设备,直接利用本机提供的磁盘。
6QE%i:t5U~,[]051Testing软件测试网]Ksv Jz$R,d图 5.1测试的架构
'R9C5Qz(\?2QZ051Testing软件测试网{i]l)]V p注:左边的是测试服务器,右边的是测试客户机。51Testing软件测试网 FhMQ7_D{O6A
51Testing软件测试网Ft:QI;V9a\#qa为了部署这样的架构我们需要做如下几个方面的工作:51Testing软件测试网)`~2@6X]`M"i3r
51Testing软件测试网^"RjK8U|{:KT1、在测试服务器上安装Websphere MQ V6.0 Server,并且打补丁打到V6.0.2.1。51Testing软件测试网3v Cif0kT2N
EMB!rX{z@02、在测试客户机上安装WebSphere MQ V6.0 Client,打补丁到V6.0.2.1
Atj$w m,R J4CJ03、在测试客户机上用gcc编译相应地源代码,源代码见:src.rar
4_ a})}#U$N+t}03.1.编辑相应地Makefile文件,文件内容见:Makefile.server
+J2S\8}'EX!B2y4G"r-R0@8Mj^N:I8]6ED03.2.建立server目录,调用make all将在server目录生成可执行文件。
E(v;`%_;[04、在测试服务器上用gcc编译相应地源代码,源代码见:src.rar51Testing软件测试网$L&gzt7r?
4.1.编辑相应地Makefile文件,文件内容见:Makefile.client
b H[T`Y051Testing软件测试网bqj-S!t"K }4.2.建立client目录,调用make all将在client目录生成可执行文件。