实现负载均衡的方法和系统的制作方法

文档序号:7622414阅读:103来源:国知局
专利名称:实现负载均衡的方法和系统的制作方法
技术领域
本发明涉及信息技术领域,更具体的说是涉及一种实现负载均衡的方法和系统。
背景技术
目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增 长,其处理能力和计算强度也相应地增大,使得单一的设备根本无法承担,因此负载均衡机 制应运而生。负载均衡是指在网络环境中,将负载均衡地分派到多台计算机、网络连接器、处理 器、硬件设备或其它资源上,以便获得更高的资源利用率,提高系统的吞吐率,降低响应时 间,从而避免负载过重。现有的实现负载均衡的方法中,客户端有待处理的业务请求时,发送相应的业务 请求由相应服务器进行处理,每次进行请求处理时,客户端都会选择一个负载较轻的服务 器并与之建立网络连接,一次连接只完成一个请求,当执行下次请求时,则需要切换连接, 从而达到负载均衡的目的,使得服务器负载不至于过重。但是,当客户端发送的请求为上下文相关的请求时,服务器会记录该请求执行后 的状态,以便后续的请求能够在前面已经完成的请求的基础上继续执行,即是说,执行后续 发送的请求时需要依赖于前面发送的请求的执行状态,但是采用现有的这种实现负载均衡 的方法,在进行连接切换时,切换后的服务器不能获取切换前已经执行的请求的执行状态, 就会导致后续的执行错误。

发明内容
有鉴于此,本发明提供一种实现负载均衡的方法和系统,解决了现有技术中进行 连接切换时,切换后的服务器不能获取切换前已经执行的请求的执行状态,而导致后续的 执行错误的技术问题。为实现上述目的,本发明提供如下技术方案一种实现负载均衡的方法,预先为客户端的请求设置上下文变量,所述方法包 括A 接收客户端发送的请求,所述请求包括上下文变量;B 判断所述上下文变量是否为真,如果是,则进入步骤E,否则进入步骤C ;C:判断与所述客户端建立连接的服务器负载是否过重,如果是,则释放客户端与 所述服务器的连接,进入步骤D,否则进入步骤E ;D 选择负载较轻的服务器,并建立客户端与所选服务器的连接,返回步骤C:E 将所述请求发送至与所述客户端建立连接的服务器进行处理。优选地,所述上下文变量的值预先设置为非真,当客户端发送的请求为上下文相 关的请求序列的第一个请求时,所述上下文变量设置为真,当客户端发送的请求为上下相 关的请求序列的最后一个请求时,所述上下文变量设置为非真。
优选地,所述接收客户端发送的请求之前,还包括将已启动的服务器记录在注册表中;监测所述注册表中的服务器的状态并记录在注册表中,所述状态包括服务器的服 务状态以及负载状态;依据注册表中的所有服务器的负载计算平均负载。优选地,所述判断所述服务器负载是否过重包括判断所述服务器负载是否大于系统第一预设值且所述服务器负载相对于所述平 均负载的百分比是否大于系统第二预设值。优选地,所述监测服务器中已启动的服务对象的状态并记录在注册表,包括周期性监测已启动的服务器的状态并记录在注册表中;当监测到服务器不可用时,在注册表中标记其不可用或删除所述服务器的记录。优选地,所述方法还包括当接收到服务器返回的处理请求失败信息时,释放客户端与所述服务器的连接, 返回步骤D。优选地,所述当服务器没有负载过重时,将所述请求发送至所述服务器进行处理 之后还包括当还有客户端发送的请求时,重复执行步骤A 步骤E直至处理完所有请求。一种实现负载均衡的系统,所述系统包括客户端管理模块、负载均衡模块和服务 器管理模块,其中所述客户端管理模块,用于接收客户端发送的请求,将所述请求发送给服务器管 理模块接收到服务器管理模块反馈的与客户端建立连接的服务器负载过重信息时,释放 客户端与所述服务器的连接并启动负载均衡模块,建立客户端与所述负载均衡模块所选服 务器的连接;负载均衡模块,用于选择负载较轻的服务器并所述服务器的标识信息反馈给客户 端管理模块;服务器管理模块,用于接收客户端管理模块发送的请求,判断所述上下文变量是 否为真,如果是,则将所述请求发送至与所述客户端连接的服务器进行处理,否则判断与所 述客户端连接的服务器负载是否过重;当所述服务器负载过重时,则将负载过重信息反馈 给客户端管理模块,当所述服务器负载没有过重时,将所述请求发送至所述服务器进行处理。优选地,所述负载均衡模块还用于将已启动的服务器以及所述服务器的服务状态 和负载状态记录在注册表,所述注册表为所述负载均衡模块中的内存单元;则,所述服务器管理模块还用于监测所述记录的服务器的服务状态和负载状态并反 馈给负载均衡模块。优选地,所述负载均衡模块还用于根据记录的所有服务器的负载计算平均负载, 则,所述服务器管理模块判断服务器是否过重,具体为判断与所述客户端连接的服 务器负载是否大于系统第一预设值且所述服务器负载相对于所述平均负载的百分比是否 大于系统第二预设值,如果是,则将负载过重信息反馈给客户端管理模块,如果否,则指示所述服务器执行所述请求。优选地,所述服务器管理模块还用于接收服务器处理请求失败信息,并将所述信 息反馈给客户端管理模块;则,所述客户端管理模块还用于接收到处理请求失败信息时,释放客户端与所述服务 器的连接并重新启动负载均衡模块。经由上述的技术方案可知,与现有技术相比,本发明提供了一种实现负载均衡的 方法和系统,通过在客户端请求中预先设置上下文变量,根据上下文变量的值,判断得出客 户端发送的请求是否为上下文相关的请求,如果是,则直接由与该客户端建立连接的服务 器进行请求处理,否则,判断与客户端连接的服务器负载是否过重,当过重时,则重新选择 负载较轻的服务器与之建立连接,直至选择出与客户端建立连接的服务器负载没有过重。 采用本发明避免了客户端发送的请求为上下文相关的请求时,由于切换服务器连接而出现 的错误,同时避免了在服务器负载过重的情况下仍继续处理客户端的请求,保障了服务器 的负载均衡,提高了负载均衡的可靠性。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据 提供的附图获得其他的附图。图1为本发明一种实现负载均衡的方法实施例1的流程图;图2为本发明一种实现负载均衡的方法实施例2的流程图;图3为本发明一种实现负载均衡的系统具体实施例的结构图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。本发明实施例公开了一种实现负载均衡的方法和系统,通过在客户端请求中预先 设置上下文变量,根据上下文变量的值,判断得出客户端发送的请求是否为上下文相关的 请求,如果是,则直接由与该客户端建立连接的服务器进行请求处理,否则,判断与客户端 连接的服务器负载是否过重,当过重时,则重新选择负载较轻的服务器与之建立连接。采用 本发明避免了客户端的发送的请求为上下文相关的请求时,由于切换服务器连接而出现的 错误,同时避免了在服务器负载过重的情况下仍继续处理客户端的请求,保障了服务器的 负载均衡,提高了负载均衡的可靠性。参见图1,示出了本发明一种实现负载均衡的方法实施例1的流程图,可以包括以 下步骤步骤101 接收客户端发送的请求,所述请求包括上下文变量。在分布式应用系统中,客户端与服务器之间的交互需要基于两者之间的网络连接,然后客户端发送相应的请求,服务器接收所述请求并进行处理。客户端发送的请求可能是上下文相关的请求,即是说,执行后续发送的请求时需 要依赖于前面发送的请求的执行状态。因此,对于客户端的请求,预先定义一个上下文相关 变量,上下文变量的值预先设置为非真,并为所有上下文相关的请求设置一个上下文相关
的请求序列,即设置一组请求的有序集合,表示为R =〈巧、r2.....rn>, η >= 1,如果对于
任意的i,i > l,i <= η,r,的执行依赖于IV1的执行状态,则称R为上下文相关的请求序 列,并称R中的每一个请求为有状态请求。当客户端发送的请求为上下文相关的请求序列的第一个请求时,将所述上下文变 量设置为真,当客户端发送的请求为上下相关的请求序列的最后一个请求时,将所述上下 文变量设置为非真。其具体的实现过程可以是为上下文相关的请求序列定义一段执行程 序,举例如下对于一个上下文相关的请求序列R = <Γι,Γ2.....rn>。参考事务管理的一般方法,
用Rbegin定义一个上下文相关的请求序列的开始,用Rend定义一个上下文相关的请求序
列的结束,则客户端执行上下文相关的请求序列R的程序结构如下
Rbegin ri
Γ2
Γη
Rend在客户端引入上下文变量rContext,预先初始化rContext的值为false,当客户 端执行该上下文请求序列R时,Rbegin开始一个上下文相关的请求序列,Rbegin的效果是 将rContext置为true,Rend结束一个上下文相关的请求序列,Rend的效果是将rContext 置为false。需要说明的,不能嵌套定义上下文相关的请求序列,即不能在上下文相关的请求 序列中定义上下文相关的请求序列,比如,下面的程序结构是错误的Rbegin ri
Rbegin rn rl2 Rend
Γη
Rend其中,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。基于本发明的实现负载均衡的系统,实现负载均衡的方法可描述如下服务器管理模块监测到服务器启动时,将启动的服务器信息反馈给负载均衡模 块,由负载均衡模块记录在注册表中,并向服务器管理模块发送负载监测请求,指示服务器 管理模块对注册表中记录的服务器进行状态监测,服务器管理模块在将监测结果反馈给负 载均衡模块,由负载均衡模块记录在注册表并依据所有服务器的负载计算出平均负载。客户端管理模块接收到客户请求时,首先判断该客户端是否已与相应的服务器建 立连接,如果没有,则指示负载均衡模块选择一个负载较轻的服务器,以便于建立客户端与 所选服务器的连接;如果已经建立连接,向服务器管理模块发送所述请求,服务器管理模块 接收到该请求后,首先判断该请求携带的上下文变量是否为真,如果是,则将所述请求发送 至与客户端建立连接的服务器进行处理,否则判断处理该请求的服务器的负载是否过重, 如果过重,则将过重信息反馈给客户端管理模块,客户端管理模块指示客户端释放与所述 服务器的连接,重新指示负载均衡模块选择一个负载较轻的服务器;如果没有过重,则将所 述请求发送至服务器,以便于服务器处理所述请求。服务器管理模块将服务器的处理结果反馈给客户端管理模块,如果请求处理成 功,则将结果返回给客户端,如果失败,则客户端管理模块释放客户端与该服务器的连接, 重新指示负载均衡模块选择一个负载较轻的服务器。在本发明实施例中,通过在客户端请求中预先设置上下文变量,根据上下文变量 的值,判断得出客户端发送的请求是否为上下文相关的请求,如果是,则直接由与该客户端 建立连接的服务器进行请求处理,否则,判断与客户端连接的服务器负载是否过重,当过重 时,则重新选择负载较轻的服务器与之建立连接,直至选择出与客户端建立连接的服务器 负载没有过重。采用本发明在保障了服务器的负载均衡的情况下,避免了客户端的发送的 请求为上下文相关的请求时,由于切换服务器连接而出现的错误。以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可 以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单 元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其 中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性 劳动的情况下,即可以理解并实施。本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他 实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置 而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将 一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作 之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体 意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括 那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或
者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,
并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。 对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的 一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明 将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一 致的最宽的范围。
权利要求
1.一种实现负载均衡的方法,其特征在于,预先为客户端的请求设置上下文变量,所述 方法包括A 接收客户端发送的请求,所述请求包括上下文变量; B 判断所述上下文变量是否为真,如果是,则进入步骤E,否则进入步骤C ; C 判断与所述客户端建立连接的服务器负载是否过重,如果是,则释放客户端与所述 服务器的连接,进入步骤D,否则进入步骤E ;D 选择负载较轻的服务器,并建立客户端与所选服务器的连接,返回步骤C E 将所述请求发送至与所述客户端建立连接的服务器进行处理。
2.根据权利要求1所述的方法,其特征在于,所述上下文变量的值预先设置为非真,当 客户端发送的请求为上下文相关的请求序列的第一个请求时,所述上下文变量设置为真, 当客户端发送的请求为上下相关的请求序列的最后一个请求时,所述上下文变量设置为非 直ο
3.根据权利要求ι所述的方法,其特征在于,所述接收客户端发送的请求之前,还包括将已启动的服务器记录在注册表中;监测所述注册表中的服务器的状态并记录在注册表中,所述状态包括服务器的服务状 态以及负载状态;依据注册表中的所有服务器的负载计算平均负载。
4.根据权利要求3所述的方法,其特征在于,所述判断所述服务器负载是否过重包括 判断所述服务器负载是否大于系统第一预设值且所述服务器负载相对于所述平均负载的百分比是否大于系统第二预设值。
5.根据权利要求3所述的方法,其特征在于,所述监测服务器中已启动的服务对象的 状态并记录在注册表,包括周期性监测已启动的服务器的状态并记录在注册表中;当监测到服务器不可用时,在注册表中标记其不可用或删除所述服务器的记录。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括当接收到服务器返回的处理请求失败信息时,释放客户端与所述服务器的连接,返回 步骤D。
7.根据权利要求1所述的方法,其特征在于,所述当服务器没有负载过重时,将所述请 求发送至所述服务器进行处理之后还包括当还有客户端发送的请求时,重复执行步骤A 步骤E直至处理完所有请求。
8.一种实现负载均衡的系统,其特征在于,所述系统包括客户端管理模块、负载均衡模 块和服务器管理模块,其中所述客户端管理模块,用于接收客户端发送的请求,将所述请求发送给服务器管理模 块接收到服务器管理模块反馈的与客户端建立连接的服务器负载过重信息时,释放客户 端与所述服务器的连接并启动负载均衡模块,建立客户端与所述负载均衡模块所选服务器 的连接;负载均衡模块,用于选择负载较轻的服务器并所述服务器的标识信息反馈给客户端管 理模块;服务器管理模块,用于接收客户端管理模块发送的请求,判断所述上下文变量是否为 真,如果是,则将所述请求发送至与所述客户端连接的服务器进行处理,否则判断与所述客 户端连接的服务器负载是否过重;当所述服务器负载过重时,则将负载过重信息反馈给客 户端管理模块,当所述服务器负载没有过重时,将所述请求发送至所述服务器进行处理。
9.根据权利要求8所述的系统,其特征在于,所述负载均衡模块还用于将已启动的服 务器以及所述服务器的服务状态和负载状态记录在注册表,所述注册表为所述负载均衡模 块中的内存单元;则,所述服务器管理模块还用于监测所述记录的服务器的服务状态和负载状态并反馈给 负载均衡模块。
10.根据权利要求9所述的系统,其特征在于,所述负载均衡模块还用于根据记录的所 有服务器的负载计算平均负载,则,所述服务器管理模块判断服务器是否过重,具体为判断与所述客户端连接的服务器 负载是否大于系统第一预设值且所述服务器负载相对于所述平均负载的百分比是否大于 系统第二预设值,如果是,则将负载过重信息反馈给客户端管理模块,如果否,则指示所述 服务器执行所述请求。
11.根据权利要求8所述的系统,其特征在于,所述服务器管理模块还用于接收服务器 处理请求失败信息,并将所述信息反馈给客户端管理模块;则,所述客户端管理模块还用于接收到处理请求失败信息时,释放客户端与所述服务器的 连接并重新启动负载均衡模块。
全文摘要
本发明提供了一种实现负载均衡的方法和系统,所述方法包括接收客户端发送的请求,所述请求包括上下文变量;判断所述上下文变量是否为真,如果是,则将所述请求发送至与所述客户端建立连接的服务器进行处理,否则判断与所述客户端建立连接的服务器负载是否过重,如果是,则释放客户端与所述服务器的连接,选择负载较轻的服务器,并建立客户端与所选服务器的连接,否则将所述请求发送至与所述客户端建立连接的服务器进行处理通过本发明实施例,避免了客户端发送的请求为上下文相关的请求时,由于切换服务器连接而出现的错误,同时保障了服务器的负载均衡,提高了负载均衡的可靠性。
文档编号H04L29/08GK102143075SQ20111007540
公开日2011年8月3日 申请日期2011年3月28日 优先权日2011年3月28日
发明者吴泉源, 周斌, 杨树强, 滕猛, 王凯, 王怀民, 罗荣凌, 舒琦, 贾焰, 赵辉, 金松昌, 陈志坤, 韩伟红 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1