通过配置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秒。