Google

Thursday, September 23, 2004

Using MSSQ or not ?

“BEA好像不建议用MSSQ,因为很多Service共用一个Queue,而Queue空间是操作系统分配的规定大小空间,不会动态分配。多个Service多个请求时,MSSQ的Queue很容易满。这样请求被拒绝的几率就大。”
关于这个,我有不同的看法。首先我接触的BEA工程师没有建议不用。而且这个确实可以提高性能,我们现在主要的server都起了几份(2-12之间是推荐的)。而且从理论上讲也是有可以理解的。没有MSSQ时,每个server一个队列,用户接收请求和返回结果。客户端和server一对一,这时你可以将一个server启多份但不是MSSQ,因为每个server都有自己的队列,用tmadmin->pq看一下,更糟的是所有的请求几乎都是发给多个同名server中的一个,其它都闲着,就没有起多份的意义了。用了MSSQ(顺便可以加一个返回队列,是很有必要的,用于将请求和返回分开)之后,多个server共用一个请求队列(在pq里可以看到,你可以自己命名),都从这个队列取请求去处理,就像在食堂有几个师傅在卖饭,但是只有一条队,比一个师傅一条队还是要快些的。psr的时候你会看到每个server处理的数目是比较平均的,我有一次做了40,000笔交易,起10个,几乎都是4000 个。在一个server处理的时候,其它空闲的server可以继续接受请求。队列满的快是客户端的量大,并发快,不是server的关系,当然 server处理快就不会堵塞。这一点和oracle的MTS的原理惊人的相似,oracle说这种模式相比专用服务器模式可以增加客户端数目。