CN102143075B - 实现负载均衡的方法和系统 - Google Patents

实现负载均衡的方法和系统 Download PDF

Info

Publication number
CN102143075B
CN102143075B CN201110075401XA CN201110075401A CN102143075B CN 102143075 B CN102143075 B CN 102143075B CN 201110075401X A CN201110075401X A CN 201110075401XA CN 201110075401 A CN201110075401 A CN 201110075401A CN 102143075 B CN102143075 B CN 102143075B
Authority
CN
China
Prior art keywords
server
request
client
load
overweight
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201110075401XA
Other languages
English (en)
Other versions
CN102143075A (zh
Inventor
杨树强
滕猛
王怀民
吴泉源
贾焰
周斌
韩伟红
陈志坤
赵辉
舒琦
金松昌
罗荣凌
王凯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN201110075401XA priority Critical patent/CN102143075B/zh
Publication of CN102143075A publication Critical patent/CN102143075A/zh
Application granted granted Critical
Publication of CN102143075B publication Critical patent/CN102143075B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本发明提供了一种实现负载均衡的方法和系统,所述方法包括:接收客户端发送的请求,所述请求包括上下文变量;判断所述上下文变量是否为真,如果是,则将所述请求发送至与所述客户端建立连接的服务器进行处理,否则判断与所述客户端建立连接的服务器负载是否过重,如果是,则释放客户端与所述服务器的连接,选择负载较轻的服务器,并建立客户端与所选服务器的连接,否则将所述请求发送至与所述客户端建立连接的服务器进行处理通过本发明实施例,避免了客户端发送的请求为上下文相关的请求时,由于切换服务器连接而出现的错误,同时保障了服务器的负载均衡,提高了负载均衡的可靠性。

Description

实现负载均衡的方法和系统
技术领域
本发明涉及信息技术领域,更具体的说是涉及一种实现负载均衡的方法和系统。
背景技术
目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的设备根本无法承担,因此负载均衡机制应运而生。
负载均衡是指在网络环境中,将负载均衡地分派到多台计算机、网络连接器、处理器、硬件设备或其它资源上,以便获得更高的资源利用率,提高系统的吞吐率,降低响应时间,从而避免负载过重。
现有的实现负载均衡的方法中,客户端有待处理的业务请求时,发送相应的业务请求由相应服务器进行处理,每次进行请求处理时,客户端都会选择一个负载较轻的服务器并与之建立网络连接,一次连接只完成一个请求,当执行下次请求时,则需要切换连接,从而达到负载均衡的目的,使得服务器负载不至于过重。
但是,当客户端发送的请求为上下文相关的请求时,服务器会记录该请求执行后的状态,以便后续的请求能够在前面已经完成的请求的基础上继续执行,即是说,执行后续发送的请求时需要依赖于前面发送的请求的执行状态,但是采用现有的这种实现负载均衡的方法,在进行连接切换时,切换后的服务器不能获取切换前已经执行的请求的执行状态,就会导致后续的执行错误。
发明内容
有鉴于此,本发明提供一种实现负载均衡的方法和系统,解决了现有技术中进行连接切换时,切换后的服务器不能获取切换前已经执行的请求的执行状态,而导致后续的执行错误的技术问题。
为实现上述目的,本发明提供如下技术方案:
一种实现负载均衡的方法,预先为客户端的请求设置上下文变量,所述方法包括:
A:接收客户端发送的请求,所述请求包括上下文变量;
B:判断所述上下文变量是否为真,如果是,则进入步骤E,否则进入步骤C;
C:判断与所述客户端建立连接的服务器负载是否过重,如果是,则释放客户端与所述服务器的连接,进入步骤D,否则进入步骤E;
D:选择负载较轻的服务器,并建立客户端与所选服务器的连接,返回步骤C:
E:将所述请求发送至与所述客户端建立连接的服务器进行处理。
优选地,所述上下文变量的值预先设置为非真,当客户端发送的请求为上下文相关的请求序列的第一个请求时,所述上下文变量设置为真,当客户端发送的请求为上下相关的请求序列的最后一个请求时,所述上下文变量设置为非真。
优选地,所述接收客户端发送的请求之前,还包括:
将已启动的服务器记录在注册表中;
监测所述注册表中的服务器的状态并记录在注册表中,所述状态包括服务器的服务状态以及负载状态;
依据注册表中的所有服务器的负载计算平均负载。
优选地,所述判断所述服务器负载是否过重包括:
判断所述服务器负载是否大于系统第一预设值且所述服务器负载相对于所述平均负载的百分比是否大于系统第二预设值。
优选地,所述监测服务器中已启动的服务对象的状态并记录在注册表,包括:
周期性监测已启动的服务器的状态并记录在注册表中;
当监测到服务器不可用时,在注册表中标记其不可用或删除所述服务器的记录。
优选地,所述方法还包括:
当接收到服务器返回的处理请求失败信息时,释放客户端与所述服务器的连接,返回步骤D。
优选地,所述当服务器没有负载过重时,将所述请求发送至所述服务器进行处理之后还包括:
当还有客户端发送的请求时,重复执行步骤A~步骤E直至处理完所有请求。
一种实现负载均衡的系统,所述系统包括客户端管理模块、负载均衡模块和服务器管理模块,其中:
所述客户端管理模块,用于接收客户端发送的请求,将所述请求发送给服务器管理模块:接收到服务器管理模块反馈的与客户端建立连接的服务器负载过重信息时,释放客户端与所述服务器的连接并启动负载均衡模块,建立客户端与所述负载均衡模块所选服务器的连接;
负载均衡模块,用于选择负载较轻的服务器并所述服务器的标识信息反馈给客户端管理模块;
服务器管理模块,用于接收客户端管理模块发送的请求,判断所述上下文变量是否为真,如果是,则将所述请求发送至与所述客户端连接的服务器进行处理,否则判断与所述客户端连接的服务器负载是否过重;当所述服务器负载过重时,则将负载过重信息反馈给客户端管理模块,当所述服务器负载没有过重时,将所述请求发送至所述服务器进行处理。
优选地,所述负载均衡模块还用于将已启动的服务器以及所述服务器的服务状态和负载状态记录在注册表,所述注册表为所述负载均衡模块中的内存单元;则,
所述服务器管理模块还用于监测所述记录的服务器的服务状态和负载状态并反馈给负载均衡模块。
优选地,所述负载均衡模块还用于根据记录的所有服务器的负载计算平均负载,则,
所述服务器管理模块判断服务器是否过重,具体为:判断与所述客户端连接的服务器负载是否大于系统第一预设值且所述服务器负载相对于所述平均负载的百分比是否大于系统第二预设值,如果是,则将负载过重信息反馈给客户端管理模块,如果否,则指示所述服务器执行所述请求。
优选地,所述服务器管理模块还用于接收服务器处理请求失败信息,并将所述信息反馈给客户端管理模块;则,
所述客户端管理模块还用于接收到处理请求失败信息时,释放客户端与所述服务器的连接并重新启动负载均衡模块。
经由上述的技术方案可知,与现有技术相比,本发明提供了一种实现负载均衡的方法和系统,通过在客户端请求中预先设置上下文变量,根据上下文变量的值,判断得出客户端发送的请求是否为上下文相关的请求,如果是,则直接由与该客户端建立连接的服务器进行请求处理,否则,判断与客户端连接的服务器负载是否过重,当过重时,则重新选择负载较轻的服务器与之建立连接,直至选择出与客户端建立连接的服务器负载没有过重。采用本发明避免了客户端发送的请求为上下文相关的请求时,由于切换服务器连接而出现的错误,同时避免了在服务器负载过重的情况下仍继续处理客户端的请求,保障了服务器的负载均衡,提高了负载均衡的可靠性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明一种实现负载均衡的方法实施例1的流程图;
图2为本发明一种实现负载均衡的方法实施例2的流程图;
图3为本发明一种实现负载均衡的系统具体实施例的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种实现负载均衡的方法和系统,通过在客户端请求中预先设置上下文变量,根据上下文变量的值,判断得出客户端发送的请求是否为上下文相关的请求,如果是,则直接由与该客户端建立连接的服务器进行请求处理,否则,判断与客户端连接的服务器负载是否过重,当过重时,则重新选择负载较轻的服务器与之建立连接。采用本发明避免了客户端的发送的请求为上下文相关的请求时,由于切换服务器连接而出现的错误,同时避免了在服务器负载过重的情况下仍继续处理客户端的请求,保障了服务器的负载均衡,提高了负载均衡的可靠性。
参见图1,示出了本发明一种实现负载均衡的方法实施例1的流程图,可以包括以下步骤:
步骤101:接收客户端发送的请求,所述请求包括上下文变量。
在分布式应用系统中,客户端与服务器之间的交互需要基于两者之间的网络连接,然后客户端发送相应的请求,服务器接收所述请求并进行处理。
客户端发送的请求可能是上下文相关的请求,即是说,执行后续发送的请求时需要依赖于前面发送的请求的执行状态。因此,对于客户端的请求,预先定义一个上下文相关变量,上下文变量的值预先设置为非真,并为所有上下文相关的请求设置一个上下文相关的请求序列,即设置一组请求的有序集合,表示为R=<r1、r2、...、rn>,n>=1,如果对于任意的i,i>1,i<=n,ri的执行依赖于ri-1的执行状态,则称R为上下文相关的请求序列,并称R中的每一个请求为有状态请求。
当客户端发送的请求为上下文相关的请求序列的第一个请求时,将所述上下文变量设置为真,当客户端发送的请求为上下相关的请求序列的最后一个请求时,将所述上下文变量设置为非真。其具体的实现过程可以是为上下文相关的请求序列定义一段执行程序,举例如下:
对于一个上下文相关的请求序列R=<r1、r2、...、rn>。参考事务管理的一般方法,用Rbegin定义一个上下文相关的请求序列的开始,用Rend定义一个上下文相关的请求序列的结束,则客户端执行上下文相关的请求序列R的程序结构如下:
Figure BDA0000052436840000061
在客户端引入上下文变量rContext,预先初始化rContext的值为false,当客户端执行该上下文请求序列R时,Rbegin开始一个上下文相关的请求序列,Rbegin的效果是将rContext置为true,Rend结束一个上下文相关的请求序列,Rend的效果是将rContext置为false。
需要说明的,不能嵌套定义上下文相关的请求序列,即不能在上下文相关的请求序列中定义上下文相关的请求序列,比如,下面的程序结构是错误的:
Figure BDA0000052436840000062
其中,Rbegin和Rend必须配对使用。
还需要说明的是,不是每一个请求都必须在一个上下文相关的请求序列中,对于无状态的请求,即不是上下文相关的请求,上下文变量仍为false。
客户端发送的请求即包含该上下文变量。
步骤102:判断所述上下文变量是否为真,如果是,则进入步骤106,如果否,则进入步骤103。
通过所述上下文变量的值,即可得知,客户端发送的请求是否为上下文相关的请求,当上下文变量为真时,说明客户端发送的请求为上下相关的,当上下文变量为假时,说明客户端发送的请求不是上下相关的。
与客户端建立连接的服务器在处理一次请求后并不断开该连接,接收到客户端的请求时,会先判断该客户端是否与相应服务器建立连接,当建立连接时,则判断客户端请求是否为上下文相关的请求,以决定是否继续由该服务器进行请求处理,如果没有连接,则进入步骤105继续执行。
步骤103:判断与所述客户端建立连接的服务器负载是否过重,如果是,则进入步骤104,否则进入步骤106。
为了保障服务器的负载均衡,当客户端发送的请求不是上下文相关的请求时,需要判断与该客户端建立连接的服务器的负载是否过重。
服务器在开始启动运行时,系统即记录下已启动的服务器,保存在注册表中,注册表是系统中的内存单元。记录下已启动的服务器,即可对该服务器进行监测,监测服务器的状态并记录在注册表中,所述状态包括服务器的服务状态,即是否正在处理请求或已经退出,以及负载状态。所记录服务器的负载状态可以是通过监测服务器的流量、任务量等指标来获得。
系统根据记录的各服务器的负载情况,即可计算出所有服务器的平均负载。
其中,判断与客户端连接的服务器负载是否过重,判断的具体的标准可以为:判断该服务器的负载是否大于系统的第一预设值,如果大于系统的第一预设值,则可进入步骤104,如果小于系统的第一预设值,则可进入步骤106。
判断的具体标准,另一个优选的方案可以是:判断该服务器的负载相对于平均负载的百分比是否大于系统的第二预设值,如果是,则进入步骤104,如果否,则进入步骤106。
判断的具体标准,另一个优选的方案还可以是:判断该服务器负载是否大于系统第一预设值且所述服务器负载相对于平均负载的百分比是否大于系统第二预设值,如果是,则进入步骤104,如果否,则进入步骤106。
其中,第一预设值和第二预设值是根据实际应用情况具体设置的。
例如,在快速傅里叶变换的应用中,快速傅立叶变换是计算密集型应用,在该应用中,cpu作为关键资源被多个并发执行的快速傅立叶变换任务共享,且限制一个服务器上并发执行的任务的个数不能大于cpu个数的4倍,在单cpu的服务器上,一个服务器的并发执行的任务个数最大为4。服务器的负载可以用服务器上正在执行的并发任务数表示,此时,第一预设值为1,第二预设值为100%。此应用中的第一预设值为1,表示如果该服务器上的并发执行任务数不多于2个,即使出现负载不均衡,也不会影响该服务器上各任务的执行,因此不需要切换其它服务器来执行该任务,只有当该服务器的并发执行任务数大于2时,才需要考虑切换服务器。第二预设值为100%,表示如果该服务器上的负载比平均负载大,则至少存在一个服务器,其并发执行的任务比该服务器上并发执行的任务少1,因此,新的任务应该切换到并发任务数小的服务器上执行。
又如,在订票服务的应用中,订票业务为典型的在线事务处理服务,其单个业务的计算量并不大,且响应时间也很快,订票业务主要面临的是大规模订票业务的并发执行问题,如果业务的并发度不高,则多个业务在一个服务器上执行对用户而言没有明显的影响,但当并发度超过一定限度以后,服务器的性能将急剧下降。目前普通的个人计算机中的服务器基本能够有效支持100个业务的并发执行,因此,订票系统会限制业务的并发度,当业务个数大于该并发度时,超过的业务将进入等待队列,等待其它业务执行完,再执行。在该应用中,服务器的负载可以用服务器上的业务数(正在执行和处于等待状态的业务数)表示,对于普通的服务器,第一预设值为100,表示如果服务器上的并发业务数没有超过100,则不需要重新分配服务器,第二预设值可以设置为105%,表示如果该服务器上的业务数比各个服务器上的平均业务数多,就需要将新的业务调度到负载较轻的服务器上执行。
需要说明的是,以上所列举的实例只是实际场景中的两个具体应用,并不是作为对第一预设值以及第二预设值的具体限定,本领域技术人员可以了解的是,第一预设值和第二预设值根据不同的应用情况而不同,在此不再一一赘述。
步骤104:释放客户端与所述服务器的连接。
在服务器负载过重的情况下,该服务器不执行客户端的请求,则释放客户端与所述服务器的网络连接,继续执行后续步骤。
步骤105:选择负载较轻的服务器,并建立客户端与所选择服务器的连接,返回步骤103。
由步骤103中所述可知,系统会对服务器的状态进行监测并记录,根据记录的负载情况,即可选出负载最轻的一个服务器,根据该服务器的标识信息建立客户端与所述服务器的网络连接,由于是由服务器中相应的服务对象进行请求处理,其具体可以是根据服务器中用于处理相应请求的服务对象的对象标识符,该对象标识符可惟一标识一个服务对象。建立客户端与所述服务器中的服务对象的网路连接。
需要说明的是,在本实施例中,当客户端没有与服务器的连接关系时,由系统选择出负载较轻的服务器与该客户端建立连接,而作为客户端无需知道是与哪个具体服务器建立的连接。
步骤106:将所述请求发送至与所述客户端建立连接的服务器进行处理。
当所述上下文变量为真,即客户端发送的请求为上下文相关的请求时,或者,当上下文变量为非真时且经判断与客户端建立连接的服务器负载没有过重时,则将所述请求发送至与所述客户端建立连接的服务器进行处理。
在本实施例中,当判断出上下文变量为真,即客户端发送的请求为上下文相关的请求时,则直接由与客户端之前建立连接的服务器进行请求处理,即便该服务器负载已经过重,从而保证了处理上下文的请求的正确性,避免切换服务器导致处理出现错误。
如果客户端还有其他待处理的请求,则重复执行步骤101~步骤106的所述操作,直至处理完所有的请求。
需要说明的是,如果服务器处理请求失败,则接收服务器返回的处理失败信息,则返回步骤104继续执行。
在本发明实施例中,通过在客户端请求中预先设置上下文变量,根据上下文变量的值,判断得出客户端发送的请求是否为上下文相关的请求,如果是,则直接由与该客户端建立连接的服务器进行请求处理,否则,判断与客户端连接的服务器负载是否过重,当过重时,则重新选择负载较轻的服务器与之建立连接,直至选择出与客户端建立连接的服务器负载没有过重。采用本发明避免了客户端的发送的请求为上下文相关的请求时,由于切换服务器连接而出现的错误,同时保障了服务器的负载均衡。
参见图2,示出了本发明一种实现负载均衡的方法具体实施例2的流程图,可以包括以下步骤:
步骤201:将已启动的服务器记录在注册表中,监测并记录所述注册表中的服务器的状态。
服务器开始启动运行时,系统即记录下已启动的服务器,保存在注册表中,注册表是系统中的内存单元,并监测注册表中已记录的服务器的状态,包括服务器的服务状态以及负载状态,并将状态记录在注册表中。
其中,对服务器的监测是一直执行的,优选地,可以周期性进行状态服务器的状态监测,具体周期可以根据实际情况而设定,当监测到服务器不可用,或者已经退出,则从注册表中删除该服务对象,服务器可用且运行正常,则记录下该服务器的负载,如果服务器的服务状态不确定,则标记其为不可用。
步骤202:依据注册表中的所有服务器的负载计算平均负载。
根据记录的服务器的负载情况,计算平均负载。
步骤203:接收客户端发送的请求,所述请求包括上下文变量。
其中,预先为客户端的请求设置上下文变量,,上下文变量的值预先设置为非真,对于客户端的上下文相关的请求,设置一个上下文相关的请求序列,具体可参见实施例1所述。
当客户端发送的请求为上下文相关的请求序列的第一个请求时,将所述上下文变量设置为真,当客户端发送的请求为上下相关的请求序列的最后一个请求时,将所述上下文变量设置为非真。
步骤204:判断所述上下文变量是否为真,如果是,则进入步骤208,如果否,则进入步骤205。
通过所述上下文变量的值,即可得知,客户端发送的请求是否为上下文相关的请求,当上下文变量为真时,说明客户端发送的请求为上下相关的,当上下文变量为假时,说明客户端发送的请求不是上下相关的。
其中,与客户端建立连接的服务器在处理一次请求后并不断开该连接,接收到客户端的请求时,会先判断该客户端是否与相应服务器建立连接,当建立连接时,则判断客户端端请求是否为上下文相关的请求,以决定是否继续由该服务器进行请求处理,如果没有连接,则进入步骤207继续执行。
步骤205:判断所述服务器负载是否大于系统第一预设值且所述服务器负载相对于所述平均负载的百分比是否大于系统第二预设值,如果是,则进入步骤206,如果否,则进入步骤208。
其中,系统第一预设值以及系统第二预设值是根据实际应用情况预先设置的,具体可参见实施例1所述。
当服务器的负载大于系统第一预设值且服务器的负载相对于平均负载的百分比大于系统第二预设值时,则认为该服务器负载过重,否则,认为服务器负载没有过重。
步骤206:释放客户端与所述服务器的连接。
在服务器负载过重的情况下,该服务器不执行客户端的请求,则释放客户端与所述服务器的网络连接,继续执行后续步骤。
步骤207:选择负载较轻的服务器,并建立客户端与所选择服务器的连接,返回步骤205。
步骤208:将所述请求发送至所述服务器,并接收所述服务器处理请求后返回的结果。
步骤209:依据返回的结果判断服务器是否处理成功,如果是,则进入步骤210,如果否,返回步骤206。
服务器进行请求处理,当处理失败,则将处理请求失败信息返回给系统,当接收到该处理请求失败信息时,则重新选择服务器,以保证请求执行成功。
步骤210:当还有客户端发送的请求时,返回步骤204。
执行完一个请求后,会判断是否还有其他待处理的请求,当客户端还有其他待处理的请求,则继续接收所述客户端发送的请求,返回步骤204,直至处理完所有请求,结束整个流程。如果没有其他请求时,直接结束流程。
在本发明实施例中,将已启动的服务器进行监测并记录服务器的状态,接收到客户端的请求时,根据客户端预先设置的上下文相关变量的值,判断得出客户端发送的请求是否为上下文相关的请求,如果是,则直接由与该客户端建立连接的服务器进行请求处理,否则,判断与客户端连接的服务器负载是否过重,当过重时,根据记录的负载情况,重新选择出负载较轻的服务器与之建立连接,并重新判断该服务器的负载,直至选择出与客户端建立连接的服务器负载没有过重。既避免了客户端的发送的请求为上下文相关的请求时,由于切换服务器连接而出现的错误,同时避免了在服务器负载过重的情况下仍继续处理客户端的请求,保障了服务器的负载均衡,且服务器在处理请求失败后,则重新选择其他服务器,保证了请求执行的成功率。
参见图3,示出了本发明一种实现负载均衡的系统具体实施例的结构图,所述系统包括:客户端管理模301、负载均衡模302和服务器管理模块303。
所述客户端管理模块301:用于接收客户端发送的请求,将所述请求发送给服务器管理模块:接收到服务器管理模块反馈的与客户端建立连接的服务器负载过重信息时,释放客户端与所述服务器的连接并启动负载均衡模块,建立客户端与所述负载均衡模块所选服务器的连接。
所述负载均衡模块302:用于选择负载较轻的服务器并所述服务器的标识信息反馈给客户端管理模块。
所述服务器管理模块303,用于接收客户端管理模块301发送的请求,判断所述上下文变量是否为真,如果是,则将所述请求发送至与所述客户端连接的服务器进行处理,否则判断与所述客户端连接的服务器负载是否过重;当所述服务器负载过重时,则将负载过重信息反馈给客户端管理模块301,当所述服务器负载没有过重时,将所述请求发送至所述服务器进行处理。
对于客户端的上下文相关的请求序列,预先定义一个上下文相关变量,上下文变量的值预先设置为非真,当客户端发送的请求为上下文相关的请求序列的第一个请求时,将所述上下文变量设置为真,当客户端发送的请求为上下相关的请求序列的最后一个请求时,将所述上下文变量设置为非真。
与客户端建立连接的服务器在处理一次请求后并不断开该连接,客户端管理模块301接收到客户端的请求时,其还可以判断该客户端是否与相应服务器建立连接,如果是,启动负载均衡模块303判断客户端端请求是否为上下文相关的请求,以决定是否继续由该服务器进行请求处理,否则启动负载均衡模块302,建立客户端与负载模块302选择出的服务器的连接。
本发明所提供的负载均衡系统中,所述的客户端管理模块301可与客户端处于一个进程中,负责管理客户端与服务器之间的连接,管理客户端发送的请求消息;所述的服务器管理模块303可与服务器方处于一个进程中,负责监测服务器的负载情况,在服务器负载过重时,指示服务器拒绝执行所述请求;所述的负载均衡模块302,可以是一个独立的进程或者设备,在接收到客户端管理模块301请求分配服务器的信息时,选择负载较轻的服务器反馈给客户端管理模块301,以便于客户端管理模块301建立客户端与所选择服务器的连接。
其中,所述的负载均衡模块302还用于将已启动的服务器以及所述服务器的服务状态和负载状态记录在注册表中,依据记录的服务器的负载情况计算平均负载,注册表为负载均衡模块302中的内存单元,则,
所述服务器管理模块303还用于监测所述注册表中的服务器的服务状态和负载状态并反馈给负载均衡模块302。
其中,所述服务器管理模块303判断服务器负载是否过重,其具体可以是:判断所述客户端连接的服务器负载是否大于系统第一预设值,如果是,则确认负载过重,将负载过重信息反馈给客户端管理模块301,如果否,则将所述请求发送给该服务器进行处理。或者,
判断与所述客户端连接的服务器负载相对于所述平均负载的百分比是否大于系统第二预设值,如果是,则确认负载过重,将负载过重信息反馈给客户端管理模块301,如果否,则将所述请求发送给该服务器进行处理。或者,
判断与所述客户端连接的服务器负载是否大于系统第一预设值且所述服务器负载相对于所述平均负载的百分比是否大于系统第二预设值,如果是,则确认负载过重,将负载过重信息反馈给客户端管理模块301,如果否,则将所述请求发送给该服务器进行处理。
其中,所述服务器管理模块303还用于接收服务器处理请求失败信息,并将所述信息反馈给客户端管理模块301,则,
所述客户端管理模块还用于接收到处理请求失败信息时,释放客户端与所述服务器的连接并重新启动负载均衡模块302。
基于本发明的实现负载均衡的系统,实现负载均衡的方法可描述如下:
服务器管理模块监测到服务器启动时,将启动的服务器信息反馈给负载均衡模块,由负载均衡模块记录在注册表中,并向服务器管理模块发送负载监测请求,指示服务器管理模块对注册表中记录的服务器进行状态监测,服务器管理模块在将监测结果反馈给负载均衡模块,由负载均衡模块记录在注册表并依据所有服务器的负载计算出平均负载。
客户端管理模块接收到客户请求时,首先判断该客户端是否已与相应的服务器建立连接,如果没有,则指示负载均衡模块选择一个负载较轻的服务器,以便于建立客户端与所选服务器的连接;如果已经建立连接,向服务器管理模块发送所述请求,服务器管理模块接收到该请求后,首先判断该请求携带的上下文变量是否为真,如果是,则将所述请求发送至与客户端建立连接的服务器进行处理,否则判断处理该请求的服务器的负载是否过重,如果过重,则将过重信息反馈给客户端管理模块,客户端管理模块指示客户端释放与所述服务器的连接,重新指示负载均衡模块选择一个负载较轻的服务器;如果没有过重,则将所述请求发送至服务器,以便于服务器处理所述请求。
服务器管理模块将服务器的处理结果反馈给客户端管理模块,如果请求处理成功,则将结果返回给客户端,如果失败,则客户端管理模块释放客户端与该服务器的连接,重新指示负载均衡模块选择一个负载较轻的服务器。
在本发明实施例中,通过在客户端请求中预先设置上下文变量,根据上下文变量的值,判断得出客户端发送的请求是否为上下文相关的请求,如果是,则直接由与该客户端建立连接的服务器进行请求处理,否则,判断与客户端连接的服务器负载是否过重,当过重时,则重新选择负载较轻的服务器与之建立连接,直至选择出与客户端建立连接的服务器负载没有过重。采用本发明在保障了服务器的负载均衡的情况下,避免了客户端的发送的请求为上下文相关的请求时,由于切换服务器连接而出现的错误。
以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (9)

1.一种实现负载均衡的方法,其特征在于,预先为客户端的请求设置上下文变量,所述方法包括:
A:接收客户端发送的请求,所述请求包括上下文相关的请求,并预先为所述上下文相关的请求设置一个上下文变量,所述上下文相关的请求在执行后续发送的请求时依赖于前面发送的请求的执行状态;
B:判断所述上下文变量是否为真,如果是,则进入步骤E,否则进入步骤C;
C:判断与所述客户端建立连接的服务器负载是否过重,如果是,则释放客户端与所述服务器的连接,进入步骤D,否则进入步骤E,
其中,所述判断与所述客户端建立连接的服务器负载是否过重包括:
判断所述服务器负载是否大于系统第一预设值且所述服务器负载相对于所述平均负载的百分比是否大于系统第二预设值;
D:选择负载较轻的服务器,并建立客户端与所选服务器的连接,返回步骤C:
E:将所述请求发送至与所述客户端建立连接的服务器进行处理。
2.根据权利要求1所述的方法,其特征在于,所述上下文变量的值预先设置为非真,当客户端发送的请求为上下文相关的请求序列的第一个请求时,所述上下文变量设置为真,当客户端发送的请求为上下相关的请求序列的最后一个请求时,所述上下文变量设置为非真。
3.根据权利要求1所述的方法,其特征在于,所述接收客户端发送的请求之前,还包括:
将已启动的服务器记录在注册表中;
监测所述注册表中的服务器的状态并记录在注册表中,所述状态包括服务器的服务状态以及负载状态;
依据注册表中的所有服务器的负载计算平均负载。
4.根据权利要求3所述的方法,其特征在于,监测所述注册表中的服务器的状态并记录在注册表中,包括:
周期性监测已启动的服务器的状态并记录在注册表中;
当监测到服务器不可用时,在注册表中标记其不可用或删除所述服务器的记录。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当接收到服务器返回的处理请求失败信息时,释放客户端与所述服务器的连接,返回步骤D。
6.根据权利要求1所述的方法,其特征在于,所述当服务器没有负载过重时,将所述请求发送至所述服务器进行处理之后还包括:
当还有客户端发送的请求时,重复执行步骤A~步骤E直至处理完所有请求。
7.一种实现负载均衡的系统,其特征在于,所述系统包括客户端管理模块、负载均衡模块和服务器管理模块,其中:
所述客户端管理模块,用于接收客户端发送的请求,将所述请求发送给服务器管理模块:接收到服务器管理模块反馈的与客户端建立连接的服务器负载过重信息时,释放客户端与所述服务器的连接并启动负载均衡模块,建立客户端与所述负载均衡模块所选服务器的连接;
负载均衡模块,用于选择负载较轻的服务器并所述服务器的标识信息反馈给客户端管理模块;
服务器管理模块,用于接收客户端管理模块发送的请求,判断所述上下文变量是否为真,如果是,则将所述请求发送至与所述客户端连接的服务器进行处理,否则判断与所述客户端连接的服务器负载是否过重;当所述服务器负载过重时,则将负载过重信息反馈给客户端管理模块,当所述服务器负载没有过重时,将所述请求发送至所述服务器进行处理;
其中,所述负载均衡模块还用于根据记录的所有服务器的负载计算平均负载,则,
所述服务器管理模块判断服务器是否过重,具体为:判断与所述客户端连接的服务器负载是否大于系统第一预设值且所述服务器负载相对于所述平均负载的百分比是否大于系统第二预设值,如果是,则将负载过重信息反馈给客户端管理模块,如果否,则指示所述服务器执行所述请求。
8.根据权利要求7所述的系统,其特征在于,所述负载均衡模块还用于将已启动的服务器以及所述服务器的服务状态和负载状态记录在注册表,所述注册表为所述负载均衡模块中的内存单元;则,
所述服务器管理模块还用于监测所述记录的服务器的服务状态和负载状态并反馈给负载均衡模块。
9.根据权利要求7所述的系统,其特征在于,所述服务器管理模块还用于接收服务器处理请求失败信息,并将所述信息反馈给客户端管理模块;则,
所述客户端管理模块还用于接收到处理请求失败信息时,释放客户端与所述服务器的连接并重新启动负载均衡模块。
CN201110075401XA 2011-03-28 2011-03-28 实现负载均衡的方法和系统 Expired - Fee Related CN102143075B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110075401XA CN102143075B (zh) 2011-03-28 2011-03-28 实现负载均衡的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110075401XA CN102143075B (zh) 2011-03-28 2011-03-28 实现负载均衡的方法和系统

Publications (2)

Publication Number Publication Date
CN102143075A CN102143075A (zh) 2011-08-03
CN102143075B true CN102143075B (zh) 2013-08-07

Family

ID=44410310

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110075401XA Expired - Fee Related CN102143075B (zh) 2011-03-28 2011-03-28 实现负载均衡的方法和系统

Country Status (1)

Country Link
CN (1) CN102143075B (zh)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7675854B2 (en) 2006-02-21 2010-03-09 A10 Networks, Inc. System and method for an adaptive TCP SYN cookie with time validation
US9960967B2 (en) 2009-10-21 2018-05-01 A10 Networks, Inc. Determining an application delivery server based on geo-location information
US9215275B2 (en) 2010-09-30 2015-12-15 A10 Networks, Inc. System and method to balance servers based on server load status
US9609052B2 (en) 2010-12-02 2017-03-28 A10 Networks, Inc. Distributing application traffic to servers based on dynamic service response time
US8897154B2 (en) * 2011-10-24 2014-11-25 A10 Networks, Inc. Combining stateless and stateful server load balancing
US9094364B2 (en) 2011-12-23 2015-07-28 A10 Networks, Inc. Methods to manage services over a service gateway
US10044582B2 (en) 2012-01-28 2018-08-07 A10 Networks, Inc. Generating secure name records
US9705800B2 (en) 2012-09-25 2017-07-11 A10 Networks, Inc. Load distribution in data networks
US9843484B2 (en) 2012-09-25 2017-12-12 A10 Networks, Inc. Graceful scaling in software driven networks
US10021174B2 (en) 2012-09-25 2018-07-10 A10 Networks, Inc. Distributing service sessions
US10002141B2 (en) 2012-09-25 2018-06-19 A10 Networks, Inc. Distributed database in software driven networks
CN103118076B (zh) * 2013-01-11 2015-05-13 烽火通信科技股份有限公司 升级服务器集群系统及其负载均衡方法
US9531846B2 (en) 2013-01-23 2016-12-27 A10 Networks, Inc. Reducing buffer usage for TCP proxy session based on delayed acknowledgement
US9900252B2 (en) 2013-03-08 2018-02-20 A10 Networks, Inc. Application delivery controller and global server load balancer
US9992107B2 (en) 2013-03-15 2018-06-05 A10 Networks, Inc. Processing data packets using a policy based network path
US10038693B2 (en) 2013-05-03 2018-07-31 A10 Networks, Inc. Facilitating secure network traffic by an application delivery controller
US9942152B2 (en) 2014-03-25 2018-04-10 A10 Networks, Inc. Forwarding data packets using a service-based forwarding policy
US9942162B2 (en) 2014-03-31 2018-04-10 A10 Networks, Inc. Active application response delay time
US9906422B2 (en) 2014-05-16 2018-02-27 A10 Networks, Inc. Distributed system to determine a server's health
US9986061B2 (en) 2014-06-03 2018-05-29 A10 Networks, Inc. Programming a data network device using user defined scripts
US9992229B2 (en) 2014-06-03 2018-06-05 A10 Networks, Inc. Programming a data network device using user defined scripts with licenses
US10129122B2 (en) 2014-06-03 2018-11-13 A10 Networks, Inc. User defined objects for network devices
US10581976B2 (en) 2015-08-12 2020-03-03 A10 Networks, Inc. Transmission control of protocol state exchange for dynamic stateful service insertion
US10243791B2 (en) 2015-08-13 2019-03-26 A10 Networks, Inc. Automated adjustment of subscriber policies
CN105554049B (zh) * 2015-08-14 2018-12-25 广州爱九游信息技术有限公司 分布式业务量控制方法和装置
CN115277351A (zh) * 2022-07-27 2022-11-01 天翼云科技有限公司 一种分布式管理系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101001184A (zh) * 2006-01-09 2007-07-18 华为技术有限公司 一种接入分组数据网络的方法
CN101207550A (zh) * 2007-03-16 2008-06-25 中国科学技术大学 负载均衡系统及多种业务实现负载均衡的方法
CN101453404A (zh) * 2007-11-30 2009-06-10 华为技术有限公司 一种实现负载均衡的方法及装置
CN101582850A (zh) * 2009-06-19 2009-11-18 优万科技(北京)有限公司 一种实现负载均衡的方法和系统
CN101834877A (zh) * 2010-06-03 2010-09-15 华中科技大学 基于分布式sip构架的动态负载均衡的方法及系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101001184A (zh) * 2006-01-09 2007-07-18 华为技术有限公司 一种接入分组数据网络的方法
CN101207550A (zh) * 2007-03-16 2008-06-25 中国科学技术大学 负载均衡系统及多种业务实现负载均衡的方法
CN101453404A (zh) * 2007-11-30 2009-06-10 华为技术有限公司 一种实现负载均衡的方法及装置
CN101582850A (zh) * 2009-06-19 2009-11-18 优万科技(北京)有限公司 一种实现负载均衡的方法和系统
CN101834877A (zh) * 2010-06-03 2010-09-15 华中科技大学 基于分布式sip构架的动态负载均衡的方法及系统

Also Published As

Publication number Publication date
CN102143075A (zh) 2011-08-03

Similar Documents

Publication Publication Date Title
CN102143075B (zh) 实现负载均衡的方法和系统
CN102123179A (zh) 应用于分布式应用系统的负载均衡方法和系统
US6195682B1 (en) Concurrent server and method of operation having client-server affinity using exchanged client and server keys
JP5512215B2 (ja) ジョブ処理システム及びその方法、そのプログラム
CN103562890B (zh) 在发布/订阅消息系统中管理消息订阅的方法和系统
US7694178B2 (en) Method, apparatus and computer program product for transaction recovery
CA2533737A1 (en) Fast application notification in a clustered computing system
JPH10503306A (ja) 顧客−サーバアーキテクチャを有するコンピュータシステム
CN103038788A (zh) 提供多个网络资源
CN110289999B (zh) 一种数据处理方法、系统及装置
CN108055311B (zh) Http异步请求方法、装置、服务器、终端和存储介质
CN104685852A (zh) 用于使用请求的小批处理的系统和方法
CN109785042A (zh) 分布式部署的异常处理方法、服务器、存储介质及装置
CN106528288A (zh) 一种资源管理方法、装置和系统
CN111090511A (zh) 任务处理方法、装置及计算机可读存储介质
CN110474917A (zh) 消息中间件上、下线方法、装置、设备及可读存储介质
CN111427670A (zh) 任务调度方法和系统
CN103257899B (zh) 计算机系统
US7219345B2 (en) System and method for terminating processes in a distributed computing system
KR101402367B1 (ko) 전화 호출 관리 방법 및 호출 관리 시스템
CN110750339A (zh) 一种线程调度方法、装置及电子设备
EP1816565B1 (en) Computer system and information processing method
CN110036623B (zh) 按需生成联络中心
US10984011B1 (en) Distributing non-transactional workload across multiple database servers
EP1867081B1 (en) Distributed redundancy capacity licensing in a telecommunication network element

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130807

Termination date: 20150328

EXPY Termination of patent right or utility model