负载均衡的实现方法、装置和系统 【技术领域】
本发明涉及通信领域,具体而言,涉及一种负载均衡的实现方法、装置和系统。
背景技术
自网络通信技术诞生以来,认证、授权及计费(AAA,Authentication、Authorization、Accounting)体制已成为通信网络运营的基础。
目前,随着第三代移动通信系统向基于全IP的网络架构的演进,Diameter协议已成为新一代的AAA技术,且由于Diameter协议具有强大的可扩展性和安全性而备受关注,国际电信联盟(ITU)、第三代合作伙伴计划(3GPP,3rd Generation Partnership Project)和第三代合作伙伴计划2(3GPP2)等国际标准组织已正式将Diameter协议作为下一代网络(NGN,Next Generation Network)、宽带码分多址(WCDMA,Wideband CDMA)和码分多址(CDMA,CodeDivision Multiple Access)2000等未来通信网络的首选AAA协议。
越来越多的运营商选择Diameter协议作为AAA首选协议。Diameter协议相对于之前的Radius协议具有更好的安全性和扩展性。统一的Diameter接口增加了不同厂商之间设备的互通性。
当越来越多的传统运营商转向使用Diameter协议的时候,不可避免的出现一种新的需求,就是进行认证,授权,计费等消息越来越多,出现了负载均衡的需求。这种负载均衡不仅仅体现在客户端,更多的是体现在服务器端。Diameter服务器可能处理多个客户端发送的Diameter消息。
现有技术实现负载均衡的方法比较多,通常的做法是在通过人为控制或者操作维护配置来实现一定程度的负载均衡。例如通过配置一定的分配策略在不同服务器之间实现负载均衡。
这些方法普遍存在需要人工干涉,并且即使在流量根本不大的情况下也会按照既定策略强制进行负荷分担,造成对端服务器的不必要的处理负担,并使得资源利用率不高。
此外,由于Diameter协议相比Radius协议明确提出了Failover/failback(故障切换/故障回溯)机制。协议中描述的故障切换机制是指当本节点检测到传输失败时,如果可能的话,所有未收到响应的请求消息会被重新发送至备选代理。当本节点检测到原传输恢复,后续消息将被发送至该对等端,此过程称为故障回溯。
图1是根据现有技术的Failover/failback处理流程图。如图1所示,发送节点发送请求消息时发送故障切换的流程包括以下步骤:
步骤S102:发送节点需要发送消息时,根据请求消息中的目的域名进行路由分析,获得下一跳节点对应的链路;
步骤S104:发送节点将请求消息发往下一跳,然后将请求消息缓存到本地请求消息队列;
步骤S106:发送节点定时检测链路状态,如果链路状态正常,例如没有发生中断故障,则转至步骤S112,否则,转至步骤108,以便启动故障切换;
步骤S108:发送节点扫描消息队列,通过目的域名重新进行路由分析,获得备选对等端对应的链路;
步骤S110,发送节点发送消息到备选对等端;
步骤S112:发送节点收到请求消息对应的响应消息,将该请求消息从本地缓存的消息队列中移出。
启动故障切换后,一旦主用对等端恢复正常,则后续消息发往主用对等端。
上述现有技术中,启动故障切换的时机必须是主用服务器发生故障了,例如链路中断,也就是说只有当故障发生的时候才进行故障切换操作。这种负载均衡的实现方法往往会造成一条链路及服务器超负荷运行,而另一条链路及服务器却得不到充分利用,造成资源利用不足。
针对现有技术中负载均衡实现方法造成的资源利用率不高的问题,目前尚未提出有效的解决方案。
【发明内容】
针对现有技术中负载均衡实现方法造成的资源利用率不高的问题而提出本发明,为此,本发明的主要目的在于提供一种负载均衡的实现方法、装置和系统,以解决上述问题至少之一。
为了实现上述目的,根据本发明的一个方面,提供了一种负载均衡的实现方法。
根据本发明的负载均衡的实现方法包括:在Diameter客户端与第一Diameter服务器进行通信的过程中,如果确定出第一Diameter服务器的负荷超过预设的第一阈值,则Diameter客户端按照预定的比例将随后发送的全部请求消息中的部分请求消息发送给第二Diameter服务器。
根据本发明的另一个方面,提供了一种Diameter客户端。
根据本发明地Diameter客户端包括:接收模块,用于接收来自第一Diameter服务器的响应消息;检测模块,用于检测Diameter客户端与第一Diameter服务器之间的通信流量是否超过预设的阈值;均衡模块,用于在响应消息携带有指示服务器忙碌的信息时,或在检测模块检测出Diameter客户端与第一Diameter服务器之间的通信流量超过预设的阈值时,按照预定的比例将随后发送的全部请求消息中的部分请求消息发送给第二Diameter服务器。
根据本发明的又一个方面,提供了一种负载均衡的实现系统。
根据本发明的负载均衡的实现系统包括Diameter客户端、第一Diameter服务器和第二Diameter服务器。
上述Diameter客户端包括:第一接收模块,用于接收来自第一Diameter服务器的响应消息;第一检测模块,用于检测Diameter客户端与第一Diameter服务器之间的通信流量是否超过预设的第一阈值;均衡模块,用于在响应消息携带有指示服务器忙碌的信息时,或在第一检测模块检测出Diameter客户端与第一Diameter服务器之间的通信流量超过预设的第一阈值时,按照预定的比例将随后发送的全部请求消息中的部分请求消息发送给第二Diameter服务器。
上述第一Diameter服务器包括:第二接收模块,用于接收来自Diameter客户端的请求消息;第二检测模块,用于检测自身的开销是否超过预设的第二阈值;发送模块,用于在第二检测模块检测出自身的开销超过预设的第二阈值时,向Diameter客户端发送携带有指示服务器忙碌的信息的响应消息。
根据本发明,Diameter客户端在确定出第一Diameter服务器的负荷过大时将随后发送的全部请求消息中的部分请求消息发送给第二Diameter服务器,从而灵活地实现负荷分担,提高了资源利用率。
【附图说明】
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据现有技术的Failover/failback处理的流程图;
图2是根据本发明的负载均衡的实现方法的流程图;
图3是根据本发明实施例的负载均衡的实现系统的示意图;
图4是根据本发明实施例的负载均衡的实现方法的流程图;
图5是根据本发明实施例的Diameter客户端;
图6是图3所示的负载均衡实现系统的结构图。
【具体实施方式】
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
功能概述
考虑到现有技术中负载均衡实现方法造成的资源利用率不高的问题,根据本发明,Diameter客户端在确定出第一Diameter服务器的负荷过大时将随后发送的全部请求消息中的部分请求消息发送给第二Diameter服务器,从而灵活地实现负荷分担,提高了资源利用率。
方法实施例
根据本发明,提供了一种负载均衡的实现方法。
图2是根据本发明的负载均衡的实现方法的流程图。如图2所示,该方法包括如下的步骤S202至步骤S206:
步骤S202,Diameter客户端与第一Diameter服务器进行通信。
例如,Diameter客户端将所有的请求消息发送给第一Diameter服务器。
步骤S204,对第一Diameter服务器的负荷情况进行判断。如果第一Diameter服务器的负荷超过预设的阈值,则转至步骤S206;否则,转至步骤S202,这里,上述阈值可以根据实际情况来预先设定。
可以通过两种方式对第一Diameter服务器的负荷情况进行判断:1)Diameter客户端检测到其与第一Diameter服务器之间的通信流量超过预设的流量阈值,则确定出第一Diameter服务器的负荷超过预设的阈值,这里,流量阈值可以根据实际情况来预先设定,第一Diameter服务器的负荷超过预设的阈值可以诸如,CPU占用率超过预设的阈值,例如,CPU占用率超过了80%,或者,占用的内存资源超过了预设的阈值,例如,占用的内存资源超过了总量的80%;2)Diameter客户端接收到来自第一Diameter服务器的响应消息,则判断出第一Diameter服务器的负荷超过预设的阈值,其中,第一Diameter服务器在自身的开销超过预设的阈值时,发送上述的响应消息,该响应消息携带有标记服务器忙碌的信息,这里,开销超过预设的阈值可以诸如,CPU占用率超过预设的阈值,例如,CPU占用率超过了80%,或者,占用的内存资源超过了预设的阈值,例如,占用的内存资源超过了总量的80%等。
步骤S206,Diameter客户端按照预定的比例将随后发送的全部请求消息中的部分请求消息发送给第二Diameter服务器。
上述预定的比例可以根据实际情况来预先设定,例如,二分之一,即,Diameter客户端将随后发送的全部请求消息中的二分之一发送给第二Diameter服务器。
随后,Diameter客户端通过流量监测发现第一Diameter服务器的负荷情况恢复到正常水平,则启动故障回溯过程,将随后发送的所有请求消息发送到第一Diameter服务器上进行处理。
根据本发明,Diameter客户端在确定出第一Diameter服务器的负荷过大时将随后发送的全部请求消息中的部分请求消息发送给第二Diameter服务器,从而灵活地实现负荷分担,提高了资源利用率。此外,避免了只在第一Diameter服务器发生故障的情况下才进行故障切换,降低了消息发送失败的可能性。另外,根据本发明实施例的负载均衡实现方法不会影响原有Failover/failback的功能,即,当在第一Diameter服务器发生故障的情况下仍然可以执行故障切换和故障回溯操作。
下面结合附图及具体实施例对本发明作进一步详细说明。
图3是根据本发明实施例的负载均衡的实现系统的示意图。如图3所示,该系统包括:Diameter客户端(Diameter Client)302、Diameter服务器(Diameter Server)304、Diameter服务器306。
其中,所述Diameter客户端302通过Diameter协议向Diameter服务器304或Diameter服务器306发送Diameter认证授权计费请求消息,或者接收Diameter服务器304或Diameter服务器306返回的Diameter认证授权计费响应消息。
这里,所述Diameter客户端302可以为S-CSCF(Serving-CallSession Control Function,服务呼叫会话控制功能)或GGSN(Gateway GPRS Supporting Node,网关GPRS支持节点)等。
对于Diameter客户端302而言,Diameter客户端302检测Diameter服务器304的负荷情况,在确定Diameter服务器304负荷情况正常时,将相关的认证授权计费请求消息发送到Diameter服务器304,或者从Diameter服务器304接收返回的Diameter认证授权计费响应消息。在确定Diameter服务器304的负荷情况为异常时,即Diameter客户端302检测到其与Diameter服务器304之间的通信流量超过预设的流量阈值(该流量阈值可以根据实际情况预先设定,例如,流量阈值为80Mbps),或者Diameter服务器304返回携带有DIAMETER_TOO_BUSY信息的响应消息(其中,Diameter服务器304检测到自身的开销超过预设的阈值时,发送上述的响应消息,该响应消息表示Diameter服务器304忙碌),则Diameter客户端302按照预定的比例将随后发送的全部Diameter请求消息中的部分请求消息发送到Diameter服务器306,并从Diameter服务器306接收返回的Diameter响应消息。在确定Diameter服务器304的负荷情况恢复正常时,Diameter客户端302可以再次将随后发送的所有Diameter请求消息发送至Diameter服务器304。
这里,Diameter客户端302通过预先设定的流量阈值来监测与Diameter服务器304之间的通讯流量,一旦通讯流量超过了预先设定的流量阈值,则认为Diameter服务器304的负荷超过预先的阈值,需要进行故障切换;或者Diameter客户端302接收到Diameter服务器304返回的错误响应,该响应携带有标记DIAMETER_TOO_BUSY的信息,则同样认为Diameter服务器304的负荷超过阈值,需要进行故障切换。
在判断需要进行故障切换后,上述Diameter客户端302可以按照预定的比例将随后发送的所有请求消息中的部分请求消息发往Diameter服务器306,其中,上述预定的比例可以根据实际情况来预先设定,例如,将比例设置为二分之一。
对于Diameter服务器304而言,Diameter服务器304接收Diameter客户端302发送的Diameter认证授权计费请求消息,并根据本地策略处理请求消息,回复响应消息。
进一步,Diameter服务器304在本地接收消息过多,开销超过阈值(这里,阈值可以根据实际情况来预先设定)时,可以通过给来自Diameter客户端302的请求消息回复错误响应,来通知Diameter客户端302进行负荷控制,其中,上述的错误响应携带有错误码“DIAMETER_TOO_BUSY”,上述开销超过阈值可以诸如,CPU占用率超过预设的阈值,例如,CPU占用率超过了80%,或者,占用的内存资源超过了预设的阈值,例如,占用的内存资源超过了总量的80%。
对于Diameter服务器306而言,Diameter服务器306接收Diameter客户端302发送的Diameter认证授权计费请求消息,并根据本地策略处理请求消息,回复响应消息。
进一步,所述Diameter服务器306需要与Diameter服务器304之间进行数据同步,以便可以与Diameter服务器304协同处理客户端发来的请求消息。
本发明中Diameter服务器304以及Diameter服务器306可以为HSS(Home Subscriber Server,归属用户服务器)或者OCS(OnlineCharging System,在线计费系统)。
基于上述描述的系统,对根据本发明实施例的负载均衡的实现方法进行详细描述。
图4是根据本发明实施例的负载均衡的实现方法的流程图。如图4所示,该方法主要包括以下步骤S402至步骤S414:
步骤S402:Diameter客户端302判断与作为主用服务器的Diameter服务器304之间通讯正常,这里判断通讯正常的方法可以是通过Diameter链路检测消息,也可以是通过业务交互消息来进行。
步骤S404:Diameter客户端302将所有的请求消息都发送到Diameter服务器304。
步骤S406:Diameter客户端302在与Diameter服务器304通信的过程中检测其与Diameter服务器304之间的通讯流量是否超过预先设定的流量阈值。如果通讯流量超过预设的流量阈值,则说明Diameter服务器304超负荷运行,即,Diameter服务器304的负荷超过阈值,转至步骤S408;否则,说明Diameter服务器304的负荷情况正常,转至步骤S412。
步骤S408:由于Diameter服务器304的负荷过大,所以需要进行负载均衡控制。这时,启动Failover机制,按照预先设定的比例将随后发送的全部请求消息中的一部分发往备用服务器,即,Diameter服务器306。
步骤S410:Diameter客户端302接收从Diameter服务器306返回的响应消息,继续处理。
步骤S412:Diameter客户端302判断出其与Diameter服务器304之间的流量低于流量阈值,则继续正常处理,并接收主用服务器,即,Diameter服务器304返回的响应消息。
步骤S414:Diameter客户端302判断响应消息是否携带有“DIAMETER_TOO_BUSY”的信息。若是,则确定出Diameter服务器304的负荷超过预定的阈值,并转至步骤S408;否则,继续处理。
随后,如果Diameter客户端302检测到其与作为主用服务器的Diameter服务器304之间的流量回落到预设的阈值以下,或者,没有再接收到来自Diameter服务器304的携带有“DIAMETER_TOO_BUSY”信息的响应消息,则启动failback机制,将随后发送的所有请求消息发往Diameter服务器304。
综上所述,对于本发明的Diameter客户端和负载均衡实现系统,Diameter客户端在确定出第一Diameter服务器的负荷过大时将随后发送的全部请求消息中的部分请求消息发送给第二Diameter服务器,从而灵活地实现负荷分担,提高了资源利用率。此外,避免了只在第一Diameter服务器发生故障的情况下才进行故障切换,降低了消息发送失败的可能性。另外,根据本发明实施例的负载均衡实现方法不会影响原有Failover/failback的功能,即,当在第一Diameter服务器发生故障的情况下仍然可以执行故障切换和故障回溯操作。
装置实施例
根据本发明的实施例,提供了一种Diameter客户端。
图5是根据本发明实施例的Diameter客户端。如图5所示,该Diameter客户端包括:接收模块502,用于接收来自第一Diameter服务器的响应消息;检测模块504,用于检测Diameter客户端与第一Diameter服务器之间的通信流量是否超过预设的阈值,其中,该阈值可以根据实际情况来预先设定,例如,流量阈值为80Mbps;均衡模块506,用于在响应消息携带有指示服务器忙碌的信息时,或在检测模块504检测出Diameter客户端与第一Diameter服务器之间的通信流量超过上述预设的阈值时,按照预定的比例将随后发送的全部请求消息中的部分请求消息发送给第二Diameter服务器,这里,预定的比例可以根据实际情况设定,例如为二分之一。
均衡模块506还用于在接收模块502没有再接收到来自第一Diameter服务器的携带有指示服务器忙碌的信息的响应消息时,或者在检测模块504检测出Diameter客户端与第一Diameter服务器之间的通信流量低于上述预设的阈值时,将随后发送的全部请求消息发送给第一Diameter服务器。
在第一Diameter服务器在自身的开销超过预设的阈值时,发送上述的响应消息,该响应消息携带有标记服务器忙碌的信息,这里,开销超过预设的阈值可以诸如,CPU占用率超过预设的阈值,例如,CPU占用率超过了80%,或者,占用的内存资源超过了预设的阈值,例如,占用的内存资源超过了总量的80%等。
系统实施例
根据本发明的实施例,提供了一种负载均衡的实现系统。
图6是图2所示的负载均衡实现系统的结构图。如图6所示,该实现系统包括Diameter客户端302、第一Diameter服务器304和第二Diameter服务器306。
上述Diameter客户端302包括:第一接收模块602,用于接收来自第一Diameter服务器304的响应消息;第一检测模块604,用于检测Diameter客户端302与第一Diameter服务器304之间的通信流量是否超过预设的阈值,其中,该阈值可以根据实际情况来预先设定,例如,流量阈值为80Mbps;均衡模块606,用于在上述响应消息携带有指示服务器忙碌的信息时,或在第一检测模块604检测出Diameter客户端302与第一Diameter服务器304之间的通信流量超过上述预设的阈值时,按照预定的比例将随后发送的全部请求消息中的部分请求消息发送给第二Diameter服务器306,这里,预定的比例可以根据实际情况设定,例如为二分之一。
均衡模块606还用于在第一接收模块602没有再接收到来自第一Diameter服务器304的携带有指示服务器忙碌的信息的响应消息时,或者在第一检测模块604检测出Diameter客户端302与第一Diameter服务器304之间的通信流量低于上述预设的阈值时,将随后发送的全部请求消息发送给第一Diameter服务器304。
第一Diameter服务器304包括:第二接收模块612,用于接收来自Diameter客户端302的请求消息;第二检测模块614,用于检测第一Diameter服务器304的开销是否超过预设的阈值,其中,该阈值可以根据实际情况来预先设定;第一发送模块616,用于在第二检测模块614检测出第一Diameter服务器304的开销超过上述预设的阈值时,向Diameter客户端302发送携带有指示服务器忙碌的信息的响应消息。这里,开销超过预设的阈值可以诸如,CPU占用率超过预设的阈值,例如,CPU占用率超过了80%,或者,占用的内存资源超过了预设的阈值,例如,占用的内存资源超过了总量的80%等
第二Diameter服务器306包括:第三接收模块622,用于接收来自Diameter客户端302的请求消息;第三检测模块624,用于检测第二Diameter服务器306的开销是否超过预设的阈值,其中,该阈值可以根据实际情况来预先设定;第二发送模块626,用于在第三检测模块624检测出第二Diameter服务器306的开销超过上述预设的阈值时,向Diameter客户端302发送携带有指示服务器忙碌的信息的响应消息。
综上所述,对于本发明的Diameter客户端和负载均衡实现系统,Diameter客户端在确定出第一Diameter服务器的负荷过大时将随后发送的全部请求消息中的部分请求消息发送给第二Diameter服务器,从而提高了资源利用率。此外,避免了只在第一Diameter服务器发生故障的情况下才进行故障切换,降低了消息发送失败的可能性。另外,根据本发明实施例的Diameter客户端和负载均衡实现系统不会影响原有Failover/failback的功能,即,当在第一Diameter服务器发生故障的情况下仍然可以执行故障切换和故障回溯操作。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。