通过配置MSSQ服务器组提高性能 ---TUXEDO性能调优的基本方法 (1)

 在ATMI环境中(TUXEDO-CORBA服务器环境不支持MSSQ机制)可以通过配置MSSQ(多服务器单队列)机制来达到队列级负载均衡的目的。同一组MSSQ服务器在同一时间将共用一个请求队列,当消息出队时,将被送到第一个空闲的服务器去处理。

如果服务器A属于某个MSSQ的一部分,那么必须为它配置响应队列,即设置REPLYQ=Y,这样当A调用了B服务时,B对A的响应将被回送到发出原始请求的服务器A,而不是MSSQ服务器组中的其它服务器。

MSSQ机制可以配置成动态形式,这样TUXEDO系统会根据负载状况动态地产生和消除MSSQ中的服务器。在下列情况下,可以考虑配置MSSQ:

应该配置MSSQ

不应该配置MSSQ

服务器数量在2到12个之间 如果有多个服务器,折衷的办法是使用多个MSSQ
请求缓冲区不是很大,没有大到将一个队列占满的情况 一个请求缓冲区可能会占满整个服务器队列空间
所有的服务器都提供一组相同的服务 每个服务都提供不同的服务

需要配置多个服务器进程才能满足客户机对服务器的实时性的要求。

每个MSSQ的服务器数量一般不要超过10个,如果超过10个,建议配置多个MSSQ。

 

在下面两种情况下,使用MSSQ将达到调优的效果:

A.银行业务中,多个TELLER执行相同的服务来为客户提供服务,下一个空闲的TELLER将为下一个等候的客户服务。在这种情况下,每个TELLER必须能够执行所有的客户服务。同一个MSSQ中的服务器必须在任何时候都提供相同的服务。MSSQ的优点在于,它在队列级提供了第二种形式有的负载均衡。

B.在超市收款业务中,不同的CASHIERS接收不同形式的客户支付(如信用卡,现金等),在这种情况下,不推荐使用MSSQ。

例如:

 simpserv SRVGRP=GROUP1 SRVID=10 MIN=3 MAX=5
          RQADDR=simpserv REPLYQ=Y

这个配置将启动3个simpserv进程,SVRID依次为10,11,12。它们共享同一个请求队列simpserv。在MSSQ配置中,建议设置MIN=MAX=N,这样在TUXEDO系统启动时,将一次性启动N个服务器,这就使得TUXEDO不必对MSSQ服务器的数量作动态管理。N的设置要根据数据库服务器目前的压力情况来决定,而不是越大越好。

为了测试simpserv对请求的受理情况,在TOUPPER服务代码中加入一条延时语句sleep(1),启动25个并发用户,分别执行12个TOUPPER服务请求,使用tmadmin/psr命令打印MSSQ服务器组,得如下结果:

> psr -q simpserv

Prog Name Queue Name  Grp Name ID RqDone Load Done Current Service
---------------------------------- ---------- --------------------------
simpserv.exe simpserv GROUP1   10    101     5050    ( IDLE )
simpserv.exe  simpserv GROUP1  11    99      4950    ( IDLE )
simpserv.exe  simpserv GROUP1  12    100     5000    ( IDLE )

由此可以看出,200个请求被平均分配给MSSQ中的三个服务器。根据测试结果可以看出,服务器受理300个请求的最长时间近似于101秒,如果不配置MSSQ模式,服务器受理300个请求的最长时间近似于300秒。

 tuxedo