一种负载均衡方法及系统与流程

文档序号:13141920阅读:136来源:国知局
一种负载均衡方法及系统与流程

本发明属于计算机技术领域,尤其涉及一种负载均衡方法及系统,用于实现多个节点间流量的负载均衡。



背景技术:

在大型互联网公司中,在许多节点上部署有应用,为了实现这些节点间的负载均衡,需要对这些节点进行流量分配。现有技术如图1所示,采用负载均衡集群进行节点分流,负载均衡集群由多个负载均衡器(例如,haproxy、nginx)组成,每个负载均衡器均与每个节点连接,负载均衡器可以将用户的请求转发给节点上的应用,并将节点上应用的执行结果返回给用户。

负载均衡器需要对后端的节点定期进行有效性检查,以便确保节点有效。现在技术中,通常采用两种方案进行节点有效性检查:一种是进行高频的有效性检查,这种方法会导致消耗大量不必要的资源,甚至会压垮一些本已比较繁忙的节点;另一种方法是增长健康检查的周期,这样虽然减小了资源消耗,但会损失节点检查的及时性。



技术实现要素:

(一)要解决的技术问题

本发明提供一种负载均衡方法及系统,能以低资源消耗、高实时性地检查出所有节点中的有效节点,并实现有效节点间的负载均衡。

(二)技术方案

本发明提供一种负载均衡方法,用于实现多个节点间流量的负载均衡,方法包括:

s1,循环对多个节点中每个节点的有效性进行检查,识别出该节点为有效节点或失效节点;

s2,将流量导入至多个节点中的有效节点。

进一步,步骤s1中,在循环检查每个节点时,如果连续r次检查到该节点为有效状态,则识别出该节点为有效节点,如果连续f次检查到该节点为失效状态,则识别出该节点为失效节点,其中,r和f为大于等于2的整数。

进一步,步骤s1包括:

s11,针对每个节点,为其设置count变量和last_state变量,其中,每次检查该节点时,如果该节点的有效性不变,则令count加1,否则,令count等于0,last_state表示上一次检查出的该节点的有效性,初始化count为0,并且,初始化last_state的值为有效状态或失效状态;

s12,获得一个0到1之间的随机数m,休眠m×n时间后,开始有效性检查,其中,n表示每次检查的周期,单位为秒;

s13,获取当前检查出的该节点的有效性current_state,如果current_state不等于last_state,则执行步骤s14,如果等于,则执行步骤s15;

s14,令count=0,并令last_state值为current_state的值,休眠n时间后,执行步骤s13;

s15,计算下一次检查时,检查出的该节点的有效性current_state与last_state相等的概率pcount:

其中,x和s为可配置的常数,

然后计算本次检查到下一次检查的时间间隔tcount:

tcount=pcount×c+n,

其中,c为可配置的常数,同时,令count加1;

s16,如果current_state为有效状态,并且count大于等于r,则识别出该节点为有效节点,如果current_state为失效状态,并且count大于等于f,则识别出该节点为失效节点;

s17.休眠tcount时间后,转向步骤s13。

优选地,n取值为1,c取值为2,x取值为1.5,s取值为10。

进一步,预先计算count从0到size时对应的pcount,并将这些pcount存储在内存中;在计算pcount时,若count小于等于size,直接从内存中获取count值所对应的pcount,若count大于size,直接从内存中获取size所对应的pcount,其中size为可配置的常数。

本发明还提供一种负载均衡系统,其与多个节点连接,用于实现多个节点间流量的负载均衡,系统包括:

检查模块,用于循环对多个节点中每个节点的有效性进行检查,识别出该节点为有效节点或失效节点;

流量导入模块,用于将流量导入至多个节点中的有效节点。

进一步,检查模块在循环检查每个节点时,如果连续r次检查到该节点为有效状态,则识别出该节点为有效节点,如果连续f次检查到该节点为失效状态,则识别出该节点为失效节点,其中,r和f为大于等于2的整数。

进一步,检查模块执行以下步骤:

s11,针对每个节点,为其设置count变量和last_state变量,其中,每次检查该节点时,如果该节点的有效性不变,则令count加1,否则,令count等于0,last_state表示上一次检查出的该节点的有效性,初始化count为0,并且,初始化last_state的值为有效状态或失效状态;

s12,获得一个0到1之间的随机数m,休眠m×n时间后,开始有效性检查,其中,n表示每次检查的周期,单位为秒;

s13,获取当前检查出的该节点的有效性current_state,如果current_state不等于last_state,则执行步骤s14,如果等于,则执行步骤s15;

s14,令count=0,并令last_state值为current_state的值,休眠n时间后,执行步骤s13;

s15,计算下一次检查时,检查出的该节点的有效性current_state与last_state相等的概率pcount:

其中,x和s为可配置的常数,

然后计算本次检查到下一次检查的时间间隔tcount:

tcount=pcount×c+n,

其中,c为可配置的常数,同时,令count加1;

s16,如果current_state为有效状态,并且count大于等于r,则识别出该节点为有效节点,如果current_state为失效状态,并且count大于等于f,则识别出该节点为失效节点;

s17.休眠tcount时间后,转向步骤s13。

优选地,n取值为1,c取值为2,x取值为1.5,s取值为10。

进一步,检查模块预先计算count从0到size时对应的pcount,并将这些pcount存储在内存中;在计算pcount时,若count小于等于size,直接从内存中获取count值所对应的pcount,若count大于size,直接从内存中获取size所对应的pcount,其中size为可配置的常数。

(三)有益效果

本发明提供的负载均衡方法及系统中,在每次检查完节点的有效性后,都会计算下一次检查该节点的时间,从而动态改变节点检查的时间间隔,即对于有效性状态不变的节点,适应性减少了检查的频率,这样降低了检查所需的资源消耗,对于有效性发生改变的节点,适应性提高检查的频率,这样保证了检查的实时性。

附图说明

图1是现有技术采用负载均衡集群进行节点间负载均衡的示意图。

图2是本发明实施例提供的负载均衡方法的流程图。

图3是本发明实施例提供的负载均衡系统的结构示意图。

图4是本发明实施例中进行节点有效性检查的流程图。

图5是本发明实施例中检查时间间隔tcount随count值变化的曲线图。

具体实施方式

根据结合附图对本发明示例性实施例的以下详细描述,本发明的其它方面、优势和突出特征对于本领域技术人员将变得显而易见。

在本发明中,术语“包括”和“含有”及其派生词意为包括而非限制;术语“或”是包含性的,意为和/或。

在本说明书中,下述用于描述本发明原理的各种实施例只是说明,不应该以任何方式解释为限制发明的范围。参照附图的下述描述用于帮助全面理解由权利要求及其等同物限定的本发明的示例性实施例。下述描述包括多种具体细节来帮助理解,但这些细节应认为仅仅是示例性的。因此,本领域普通技术人员应认识到,在不背离本发明的范围和精神的情况下,可以对本文中描述的实施例进行多种改变和修改。此外,为了清楚和简洁起见,省略了公知功能和结构的描述。此外,贯穿附图,相同参考数字用于相似功能和操作。

图2是本发明实施例提供的负载均衡方法的流程图,如图2所示,方法包括:

s1,循环对多个节点中每个节点的有效性进行检查,识别出该节点为有效节点或失效节点。这里所说的节点可以是服务器(server),服务器上安装有应用,通过检查服务器上应用是否能成功提供服务,以确定该服务器节点是否有效。在本实施例中,如果连续3次检查到该节点为有效状态,则识别出该节点为有效节点,如果连续4次检查到该节点为失效状态,则识别出该节点为失效节点。

s2,将流量导入至多个节点中的有效节点。对于无效节点,由于其不能正常工作,并不会向其导入流量。本步骤可采用现有的负载均衡方法,在此就不再赘述。

然而实践经验表明,如果本次检查到一节点有效,那么下一次检查到该节点还是有效的概率将会提高,同样的,如果本次检查到一节点失效,那么下一次检查到该节点还是失效的概率将会提高。因此,连续i次检查到某一节点处于相同状态时,第i+1次检查该节点保持同一状态的概率为x,s为可以配置的参数,在本实施例中,x=1.5,s=10。

图3是本发明实施例提供的负载均衡系统的结构示意图,如图3所示,系统100包括:

检查模块101,用于循环对多个节点中每个节点的有效性进行检查,识别出该节点为有效节点或失效节点。这里所说的节点可以是服务器(server),服务器上安装有应用,通过检查服务器上应用是否能成功提供服务,以确定该服务器节点是否有效。在本实施例中,如果连续3次检查到该节点为有效状态,则识别出该节点为有效节点,如果连续4次检查到该节点为失效状态,则识别出该节点为失效节点。

流量导入模块102,用于将流量导入至多个节点中的有效节点。对于无效节点,由于其不能正常工作,并不会向其导入流量。流量导入模块102可采用现有的负载均衡技术,在此就不再赘述。

然而实践经验表明,如果本次检查到一节点有效,那么下一次检查到该节点还是有效的概率将会提高,同样的,如果本次检查到一节点失效,那么下一次检查到该节点还是失效的概率将会提高。因此,连续i次检查到某一节点处于相同状态时,第i+1次检查该节点保持同一状态的概率为x,s为可以配置的参数,在本实施例中,x=1.5,s=10。

图4是本发明实施例中进行节点有效性检查的流程图,如图4所示,具体包括:

s11,针对每个节点,为其设置count变量和last_state变量,其中,每次检查该节点时,如果该节点的有效性不变,则令count加1,否则,令count等于0,last_state表示上一次检查出的该节点的有效性,初始化count为0,并且,初始化last_state的值为失效状态;

s12,获得一个0到1之间的随机数m,休眠m×n时间后,开始有效性检查,其中,n等于1秒;

s13,获取当前检查出的该节点的有效性current_state,如果current_state不等于last_state,则执行步骤s14,如果等于,则执行步骤s15;

s14,令count=0,并令last_state值为current_state的值,休眠n时间后,执行步骤s13;

s15,计算下一次检查时,检查出的该节点的有效性current_state与last_state相等的概率pcount:

其中,x=1.5,s=10,

然后计算本次检查到下一次检查的时间间隔tcount:

tcount=pcount×c+n,

其中,c=2,同时,令count加1;

s16,如果current_state为有效状态,并且count大于等于r,则识别出该节点为有效节点,如果current_state为失效状态,并且count大于等于f,则识别出该节点为失效节点;

s17,休眠tcount时间后,转向步骤s13。

在实际运行中,为提升计算pcount的效率,可以预先计算count从0到20的值,得到一个从p0到p20的共计21个的概率数组p_list,然后将其存储在内存中,当count<=20时,直接获取p_list的第count个数,即p_list[count],并将pcount取值为p_list[count]。当count>20时,获取p_list数组的最后一个数p20,并且pcount取值为p20。

图5是本发明实施例中检查时间间隔tcount随count值变化的曲线图,如图5所示,横轴为count,纵轴为tcount,在count值较小的时候,即刚刚完成了状态变化的时候,保持较高频度的检查,这样有利于快速的根据配置的rise或者fall的次数,确定后端server的状态,保证检查的及时性。在count值逐渐增大时,适当延长检查的周期,且pcount也符合连续保持某个状态次数越多,下一次检查保持该状态的概率越高的规律。本实施例中,检查周期最大值是小于c+n的,这样保证了检查周期不会被无限期延长,以免损失健康检查的时效性。

综上所述,本发明提供的负载均衡方法及系统中,在每次检查完节点的有效性后,都会计算下一次检查该节点的时间,从而动态改变节点检查的时间间隔,即对于有效性状态不变的节点,适应性减少了检查的频率,这样降低了检查所需的资源消耗,对于有效性发生改变的节点,适应性提高检查的频率,这样保证了检查的实时性。

根据本发明各实施例的上述方法、模块和/或系统可以通过有计算能力的电子设备执行包含计算机指令的软件来实现。所述有计算能力的电子设备可以是通用处理器、数字信号处理器、专用处理器、可重新配置处理器等,但不限于此。执行这样的指令使得电子设备被配置为执行根据本发明的上述各项操作。上述各设备和/或部件可以在一个电子设备中实现,也可以在不同电子设备中实现。这些软件可以存储在计算机可读存储介质中。计算机可读存储介质存储一个或多个程序(软件模块),所述一个或多个程序包括指令,当电子设备中的一个或多个处理器执行所述指令时,所述指令使得电子设备执行本发明的方法。

这些软件可以存储为易失性存储器或非易失性存储装置的形式(比如类似rom等存储设备),不论是可擦除的还是可重写的,或者存储为存储器的形式(例如ram、存储器芯片、设备或集成电路),或者被存储在光可读介质或磁可读介质上(比如,cd、dvd、磁盘或磁带等等)。应该意识到,存储设备和存储介质是适于存储一个或多个程序的机器可读存储装置的实施例,所述一个程序或多个程序包括指令,当所述指令被执行时,实现本发明的实施例。实施例提供程序和存储这种程序的机器可读存储装置,所述程序包括用于实现本发明的任何一项权利要求所述的装置或方法的代码。此外,可以经由任何介质(比如,经由有线连接或无线连接携带的通信信号)来电传递这些程序,多个实施例适当地包括这些程序。

根据本发明各实施例的方法、模块和/或系统还可以使用例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic)或可以以用于对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式的适当组合来实现。在以这些方式实现时,所使用的的软件、硬件和/或固件被编程或设计为执行根据本发明的相应上述方法、步骤和/或功能。本领域技术人员可以根据实际需要来适当地将这些系统和模块中的一个或多个,或其中的一部分或多个部分使用不同的上述实现方式来实现。这些实现方式均落入本发明的保护范围。

尽管已经参照本发明的特定示例性实施例示出并描述了本发明,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本发明的精神和范围的情况下,可以对本发明进行形式和细节上的多种改变。因此,本发明的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1