一种适用于udp服务的负载均衡系统及方法
【专利摘要】本发明公开了一种适用于UDP服务的负载均衡系统及方法,其通过用户定义的负载均衡策略而生效;同时允许建立多个侦听相同端口的UDP服务,并且将数据包或者数据流负载均衡到这些服务。本发明提供的方案可以实现多个UDP应用服务绑定相同的IP地址和UDP端口,然后数据流量在该多个UDP应用服务之间按照用户定义的负载均衡策略进行负载均衡处理。
【专利说明】一种适用于UDP服务的负载均衡系统及方法
【技术领域】
[0001]本发明涉及网络通信技术,具体涉及基于UDP协议应用程序的负载均衡技术。
【背景技术】
[0002]现有的多种应用服务器均采用TCP协议,这些服务器包括但不限于WEB服务,MAIL服务,FTP服务。众所周知,TCP协议具有良好的流量控制机制,拥有良好的拥塞控制机制,其Listen/Acc印t模型提供了良好的多处理亲和机制,以上种种优势使TCP协议可以适应几乎任意的网络环境以及处理机环境。
[0003]TCP的优势几乎都是UDP的劣势,特别是UDP协议在伯克利套接字层没有类似TCP的Listen/Acc印t模型,这就使基于UDP的服务不能实现多处理,而这一点从根本上限制了UDP服务的推广,使UDP应用只能停留在诸如视频,音频领域。
[0004]UDP相比TCP而言,在于其灵活性,其可以在用户态实现和TCP —样但灵活得多的控制逻辑,包括但不限于以下几点:
[0005]1.维持连接,维持按序处理,但不实现流量控制和拥塞控制;
[0006]2.实现流量控制和拥塞控制,但不保持连接;
[0007]3.实现轻量级的流量控制;
[0008]4.支持组播通信。
[0009]随着越来越多的控制逻辑横向上从端节点向中心推,纵向上从传输层向应用层推,UDP相对TCP的优势将越发明显,TCP的复杂控制逻辑反过来成了一种负担。
[0010]UDP应用服务器的发展目前只缺乏一个多处理机制,即一套控制逻辑,用来支持对UDP应用客户端的并发处理以及一套调度策略用来支持UDP应用服务器的负载均衡。
【发明内容】
[0011]本发明的目的之一:针对针对现有使用UDP协议的应用服务器无法实现并发处理以及负载均衡的问题,提出一种适用于UDP服务的负载均衡系统。
[0012]本发明的目的之二:基于上述的负载均衡系统,提供一种适用于UDP服务的负载均衡方法。
[0013]本发明提供的方案可以实现多个UDP应用服务绑定相同的IP地址和UDP端口,然后数据流量在该多个UDP应用服务之间按照用户定义的负载均衡策略进行负载均衡处理。
[0014]为了达到上述目的,本发明采用如下的技术方案:
[0015]一种适用于UDP服务的负载均衡系统,所述负载均衡系统包括:
[0016]套接字队列,所述套接字队列具有若干节点,其中每一个节点表征一个标准的套接字,套接字队列中的节点是应用层服务和实施负载均衡策略之间的接口,在属于同一队列的节点之间进行应用层服务的负载均衡;
[0017]策略库,所述策略库中包括若干负载均衡策略模块,每个负载均衡策略模块对应于套接字队列中一个节点;所述策略库通过抉择相应的负载均衡策略模块,由此决定由套接字队列中哪个套接字接受服务请求,进行负载均衡;
[0018]用户接口,所述用户接口用来控制策略库,注入具体的算法到策略库。
[0019]在负载均衡系统的优选方案中,所述套接字队列中排入此队列的节点为用户态通过socket建立的套接字,套接字可以按照任意的顺序排入队列。
[0020]进一步的,所述套接字队列采用单向或双向链表形成。
[0021]进一步的,所述策略库中的负载均衡策略模块为负载均匀算法模块,每个算法模块的计算结果指向一个套接字队列中的节点。
[0022]再进一步的,所述负载均匀算法为基于UDP协议四元组的哈希算法或加入随机变量的哈希算法。
[0023]进一步的,所述用户接口结构中包括一个命令码和一个参数,可以通过任意的IPC方式和策略库通信。
[0024]作为本发明的第二目的,一种适用于UDP服务的负载均衡方法,该方法包括如下步骤:
[0025](I)建立N个侦听相同端口的UDP服务;
[0026](2)建立负载均衡策略;
[0027](3) N个UDP服务接受数据并且处理数据。
[0028]在负载均衡方法的优选方案中,所述步骤(I)中通过标准的套接字系统调用接口创建m)P套接字。
[0029]进一步的,所述步骤(2)中通过用户接口设置策略库,由策略库根据用户接口的设置进行抉择确定相应的负载均衡策略。
[0030]进一步的,所述步骤(3)中首先由步骤(2)中策略库建立的负载均衡策略确定处在套接字队列中对应的套接字节点,接着,由确定的套接字节点按照标准的套接字接收数据流程接收数据,并且将数据通过标准的套接字读取接口传递到应用程序,应用程序接收之后按照自身逻辑进行处理。
[0031]本发明提供的方案可以实现多个UDP应用服务绑定相同的IP地址和UDP端口,然后数据流量在该多个UDP应用服务之间按照用户定义的负载均衡策略进行负载均衡处理。其与现有技术相比具有以下优势:
[0032]1.诸如DNS的大型UDP服务器不再需要额外的负载均衡设备进行负载均衡,使用本发明提供的方案,将可以在高性能设备自身实现对DNS查询客户端的并发处理,这将大大节省资源;
[0033]2.本发明实现了 UDP应用服务的多处理负载均衡方案,这将大大推广UDP应用服务,可以充分利用UDP的简约性和潜在的灵活性实现更加丰富的应用。
【专利附图】
【附图说明】
[0034]以下结合附图和【具体实施方式】来进一步说明本发明。
[0035]图1为本发明中适用于UDP服务的负载均衡系统的逻辑框图。
【具体实施方式】
[0036]为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
[0037]本发明为了实现使用UDP协议的应用服务器的并发处理以及负载均衡,将原有协议栈中的UDP实现的套接字查找部分被完全替换为套接字队列,策略库,算法三个模块。
[0038]对于其中的原有协议栈,主要指的是原生操作系统的协议栈,包括但不限于Windows, Linux, Mac OS X。
[0039]参见图1,其所示为本发明中适用于UDP服务的负载均衡系统的逻辑框图。由图可知,本发明提供的负载均衡系统100主要由套接字队列101、策略库102以及用户接口 103三部分组成。
[0040]其中套接字队列101,具有若干节点,其中每一个节点表征一个标准的套接字,套接字队列中的节点是应用层服务和实施负载均衡策略之间的接口,在属于同一队列的节点之间进行应用层服务的负载均衡。
[0041]具体的,该套接字队列中排入此队列的节点为用户态通过socket建立的套接字101a,套接字可以按照任意的顺序排入队列,例如插入队列头部,插入队列尾部,但并不限于上述方式。
[0042]该套接字队列在具体实现时,可使用单向或者双向链表,Map等技术来实现。
[0043]策略库102,其包括若干负载均衡策略模块102a,每个负载均衡策略模块对应于套接字队列中一个节点,策略库中的策略用于表征如何进行负载均衡。通过策略库的抉择,确定相应的负载均衡策略模块102a,再由确定的负载均衡策略模块102a决定套接字队列中对应的套接字接受服务请求,进行负载均衡。
[0044]每个负载均衡策略模块102a为负载均衡算法模块,并且每个算法的计算结果指向一个套接字队列中的节点。
[0045]具体实现时,负载均衡策略模块102a中的负载均匀算法可以采用基于UDP协议四元组的哈希算法、加入随机变量的哈希算法等,如图1所示的基于源IP/源端口的哈希算法、随机数%套接字队列长度算法。
[0046]再者,这些形成负载均衡策略模块102a的负载均匀算法模块,采用可扩展可插拔的方式设置在策略库102中,由此实现根据实际场景,选择合适的算法模块。
[0047]用户接口 103,其主要用来控制策略库,通过注入具体的算法到策略库中,实现控制。
[0048]具体的,该用户接口结构中包括一个命令码和一个参数,可以通过任意的IPC (进程间通信)方式和策略库通信。
[0049]基于上述的负载均衡系统,本发明具体实现负载均衡的过程如下:
[0050](I)建立N个侦听相同端口的UDP服务,其中N根据实际需求而定,这里的UDP服务为任意的基于UDP协议的应用程序;
[0051]应用程序创建套接字时,使用标准的套接字接口进行创建UDP套接字。
[0052](2)建立负载均衡策略;
[0053]该步骤中建立负载均衡策略的方法为通过用户接口为策略库注入策略,并将注入的策略确定为负载均衡策略。
[0054](3) N个UDP服务接受数据并且处理数据。
[0055]操作系统内置的协议栈会将网络接收的数据包导入策略库,策略库利用建立的负载均衡策略,将数据包关联到一个套接字,该套接字将数据导入应用程序,数据包的源IP地址,目标IP地址,源端口,目标端口等字段不同,计算结果也就不同,最终处理数据的应用相应地也会不同。
[0056]本发明以下通过一应用实例来具体说明适用于UDP服务的负载均衡的过程,该实例基于上述的负载均衡系统来实施(参见图1):
[0057](I)用户通过负载均衡系统中提供的用户接口设置策略库中的一种算法,在该例中,选择基于源IP/源端口的哈希算法;
[0058](2)从网络接收到的数据包从IP层进入UDP层,进入负载均衡系统中策略库;
[0059](3)数据包头被协议栈导入策略库中相应的算法模块,该算法模块为用户在步骤I中选择的基于源IP/源端口的哈希算法;
[0060](4)算法计算结果(注意,该处实施的算法计算的结果包括但不限于基于IP/端口元素计算的结果)指向套接字队列中的一个套接字,本例中假设其为套接字2 ;
[0061](5)数据包继续通过协议栈传递给套接字2,进而进入服务实例2。
[0062]上述过程中,可以看到,建立了多个而不是一个绑定相同IP地址和端口的UDP套接字,通过策略库可以将数据传递给不同的上述UDP套接字中的一个,这种方式下,建立的UDP套接字越多,可以并发处理的数据就越多,实现了在多个UDP套接字之间为客户端用户应用程序提供透明的服务,从而提供了一个负载均衡的解决方案。
[0063]对于本实例在步骤I采用的算法,如果UDP应用服务是有连接的,那么采用基于源IP/源端口的哈希算法将是合适的,因为同样的源IP/源端口的计算结果将是一致的,这就保证了来自同一客户端实例的数据包始终被同一个服务实例所处理;如果UDP服务是无连接,或者是REQUEST/REPLY式的,那么采用随机选择将是合适的,因为这种请求被回复之后,将不会再有后续的通信。
[0064]再者,这里的算法模块是可扩展可插拔的,可依照上述例子说明,根据实际场景,实现以及选择合适的算法。
[0065]以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
【权利要求】
1.一种适用于UDP服务的负载均衡系统,其特征在于,所述负载均衡系统包括: 套接字队列,所述套接字队列具有若干节点,其中每一个节点表征一个标准的套接字,套接字队列中的节点是应用层服务和实施负载均衡策略之间的接口,在属于同一队列的节点之间进行应用层服务的负载均衡; 策略库,所述策略库中包括若干负载均衡策略模块,每个负载均衡策略模块对应于套接字队列中一个节点;所述策略库通过抉择相应的负载均衡策略模块,由此决定由套接字队列中哪个套接字接受服务请求,进行负载均衡; 用户接口,所述用户接口用来控制策略库,注入具体的算法到策略库。
2.根据权利要求1所述的一种适用于UDP服务的负载均衡系统,其特征在于,所述套接字队列中排入此队列的节点为用户态通过socket建立的套接字,套接字可以按照任意的顺序排入队列。
3.根据权利要求1或2所述的一种适用于UDP服务的负载均衡系统,其特征在于,所述套接字队列采用单向或双向链表形成。
4.根据权利要求1所述的一种适用于UDP服务的负载均衡系统,其特征在于,所述策略库中的负载均衡策略模块为负载均匀算法模块,每个算法模块的计算结果指向一个套接字队列中的节点。
5.根据权利要求4所述的一种适用于UDP服务的负载均衡系统,其特征在于,所述负载均匀算法为基于UDP协议四元组的哈希算法或加入随机变量的哈希算法。
6.根据权利要求1所述的一种适用于UDP服务的负载均衡系统,其特征在于,所述用户接口结构中包括一个命令码和一个参数,可以通过任意的IPC方式和策略库通信。
7.一种适用于UDP服务的负载均衡方法,其特征在于,所述方法包括如下步骤: (1)建立N个侦听相同端口的UDP服务; (2)建立负载均衡策略; (3)N个UDP服务接受数据并且处理数据。
8.根据权利要求7所述的一种适用于UDP服务的负载均衡方法,其特征在于,所述步骤(O中通过标准的套接字系统调用接口创建Μ)Ρ套接字。
9.根据权利要求7所述的一种适用于UDP服务的负载均衡方法,其特征在于,所述步骤(2)中通过用户接口设置策略库,确定负载均衡策略。
10.根据权利要求7所述的一种适用于UDP服务的负载均衡方法,其特征在于,所述步骤(3)中首先由策略库建立的负载均衡策略确定处在套接字队列中对应的套接字节点,接着,由确定的套接字节点按照标准的套接字接收数据流程接收数据,并且将数据通过标准的套接字读取接口传递到应用程序,应用程序接收之后按照自身逻辑进行处理。
【文档编号】H04L12/803GK103929365SQ201410113502
【公开日】2014年7月16日 申请日期:2014年3月25日 优先权日:2014年3月25日
【发明者】赵亚, 掌晓愚, 任伟, 杨文山 申请人:上海格尔软件股份有限公司