文章对Tuxedo的负载均衡进行了讲述,分为但京城和多进程两方面进行了说明。我们可以清楚地了解到相关的知识体系和运作方式。
AD:
我们说了很多负载均衡的问题,我们都是针对网络方面进行解说的。其实,在服务器的应用线程方面也可以进行负载均衡的优化。在这里我们对事务处理的Tuxedo的负载均衡问题进行一个解说。现在就让我们一起从文中来了解具体的内容吧。
Tuxedo中间件通过将客户端请求进行排队的方式,实现将客户请求以均衡的方式交给服务器进行处理,从而达到减轻应用服务器资源负担的目的。我们可以通过合理设置服务进程个数和请求队列个数来达到提高大并发量应用的性能的目的。在最简单的情况下,只有一个服务进程(可能包含一个或多个服务)来处理客户端对其中服务的请求,所有的请求首先放入这个服务进程的队列里面,然后服务进程逐个取出处理。复杂一些,如果一个服务进程不能满足业务系统对性能的要求,tuxedo可以启动服务进程的多个实例,来提高服务进程对请求的处理速度,此时tuxedo配置请求队列的方式就会影响到大并发请求应用的性能,下面我们以simpserv这个简单应用为例,对tuxedo的负载均衡方式加以探讨。
一、单进程单队列
单server单队列方式下UBBconfig的配置如下:
simpserv SRVGRP=GROUP1 SRVID=1
这时tuxedo在boot时只启动一个服务进程提供服务,所有的请求首先放入这个服务进程的队列里面,然后服务进程逐个取出处理。单个服务进程不能满足要求的情况下,就要考虑多进程的方式。
二、多进程多队列
多进程多队列方式tuxedo直接启动服务进程的多个实例,每个server都有自己的请求队列。UBBconfig中*SERVERS段描述部分有几个参数控制着进程和队列的启停方式。其中,MIN代表最少启动的进程个数,其缺省值为1。 MAX代表启动的进程最大个数,其缺省等于MIN,如果设置了MAX值且大于MIN,则代表tuxedo可以在服务进程忙时自动启动最多到MAX个进程实例。单进程单队列的模式中,由于没有指定MIN和MAX参数,因此MAX和MIN二参数取了缺省值1,即单服务进程实例方式。
多进程多队列的UUBconfig配置举例如下:
Simpserv SRVGRP=GROUP1 SRVID=1 MIN = 3 MAX = 5
CLOPT="-A -r -v -p 3,10:6,5"
如果没有指定请求队列名称,每个simpserv进程都会生成一个请求队列,第二列就是该进程对应的队列名,队列名称的缺省值为GRPNO.SRVID,既“."前面是GRPNO,后面是SRVID,可以看出每个simpserv进程有自己的请求队列。CLOPT中的-p参数控制tuxedo根据系统负载情况可以自动启动或停止一些simpserv进程,本例表示,队列等待请求大于6个且时间超过 5秒服务进程自动增加,队列等待请求小于3个且时间超过20秒时,服务服务进程自动减少,但实存的进程个数限制在 MIN和MAX之间。相关的另一个参数就是UUBconfig中*RESOURCES段的LDBAL,表示是否启动负载均衡机制,默认是“N"(不启动),你可以通过设置成“Y"来启动。这里需要注意的是,为“N"的时候并不表示多个服务进程不能分担负载。主要的差别是为“Y"时,TUXEDO在接收到请求时会按照它的负载均衡的算法来找到合适的服务进程来处理,而设置成“N"时,总是由第一个可用的进程来处理。通过这种方法可以让多个进程来处理大量并发的请求,就达到了改善性能的目的。SRVID取值介于SRVID和SRVID+MAX-1,系统自动赋值。