【转】对于进行处理的Tuxedo负载均衡介绍
???????? 最近公司的项目沪杭沪宁的高铁项目中所有的售票服务器的集群在tuxedo三个节点中。在10月下旬的一个下午,沪杭和沪宁的高铁售票非常的缓慢,一张票需要2分钟,针对这种情况,向领导报告之后,不久领导回复,tuxedo服务的由于配置的问题,致使一种一台服务超负荷使用,致使请求缓慢。为了尽快回复快速售票,只有关闭其中的一个服务节点,让各线重新启动服务并修改配置。真是一个悲剧一个!据说其中一个服务关掉之后仍然需要一个小时的时间所有的线程中的所有的请求队列才最终全部销毁。
?
?
??????? 今天有时间,开始查找关于tuxedo的负载均衡的文档学习。
?
?
???? 我们说了很多负载均衡的问题,我们都是针对网络方面进行解说的。其实,在服务器的应用线程方面也可以进行负载均衡的优化。在这里我们对事务处理的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,系统自动赋值?