一种高效的负载均衡器及负载均衡系统的制作方法

文档序号:11388970阅读:543来源:国知局
一种高效的负载均衡器及负载均衡系统的制造方法与工艺

本发明涉及通信控制领域,尤其涉及一种高效的负载均衡器,还涉及一种包含所述负载均衡器的负载均衡系统。



背景技术:

通常情况下的负载均衡要在灵活性和性能之间做权衡,用户态软件层面有haproxy和nginx这样的老牌负载均衡软件,他们一般配置和使用起来都比较容易,但是由于需要数据包从网卡到内核再到软件一层层向上处理,再一层层向下转发,堆栈比较深单机性能通常都比较一般。

为了提高单机性能,减少堆栈层级就有了lvs(linux虚拟服务器),其实质上是工作在内核层的负载均衡器,性能有着数量级的提高,然而配置起来相对也比较复杂而且对网络条件要求也有特殊要求;另外网络数据到达lvs之前还要经过完整的tcp/ip协议栈比如数据包要经过网卡的驱动层、链路层、ip层、tcp层、应用层等以及内核的一系列filter模块,而这些对于转发来说是非常冗繁并且没有必要的。



技术实现要素:

为解决现有技术中的问题,本发明提供一种高效的负载均衡器,还提供一种包含所述负载均衡器的负载均衡系统。

本发明高效的负载均衡器设置在网卡上,所述负载均衡器输入输出端分别与网卡的输入和输出队列相连,所述负载均衡器设有接收解析模块、均衡模块和发送模块,所述解析模块用于接收网卡输入队列的数据包并解析数据包的转发信息,所述均衡模块用于对解析的数据包均衡分配到发送队列中;发送模块用于从发送队列中读取数据包,并把数据包通过网卡的输出队列均衡分发给后端服务器。

本发明作进一步改进,所述接收解析模块只解析数据包的前几个字节,提取出转发信息,所述转发信息包括源地址、源端口、目标地址、目标端口和协议号。

本发明作进一步改进,还包括检测模块,设置在接收解析模块和均衡模块之间,用于对进入均衡模块的数据包进行检测,如果数据包的检测结果为丢弃,则该数据包不进入均衡模块。

本发明作进一步改进,所述负载均衡器与网卡的内存共享,所述负载均衡器和网卡共享一个数据池空间,所述负载均衡器能够读取网卡的内存数据。

本发明作进一步改进,利用dpdk技术,支持uio,提供应用空间下驱动程序的支持。

本发明作进一步改进,包括内存池,所述内存池采用无锁环形缓存管理。

本发明作进一步改进,所述负载均衡器设置在linux操作系统的服务器上时,把控制器面线程及各个数据面线程绑定到不同的cpu核。

本发明还提供一种包含所述负载均衡器的负载均衡系统,包括客户端、域名解析服务器、路由器、多个服务器,所述客户端分别与路由器和域名解析服务器相连,所述负载均衡系统设置在路由器和多个服务器之间。

本发明作进一步改进,当客户端发送请求包时,所述域名解析服务器根据请求的客户端的位置返回一个离请求的客户端地理位置最近的vip地址;所述请求包到达vip地址对应的路由器;路由器分别将多个请求包平均分配到与之连接的多个负载均衡器上;负载均衡器的均衡模块再将请求包均衡分发给与之连接的多个服务器。

本发明作进一步改进,所述负载均衡器在接收到请求包转发给服务器时,将请求包的源地址修改为用户请求时的地址,服务器响应时,将响应包的源地址改为用户的vip地址,将响应包不通过负载均衡器直接发送给与客户端相连的路由器。

与现有技术相比,本发明的有益效果是:数据包只需要在进入网卡的驱动层被负载均衡器调用,不需要进入ip层、tcp层、应用层等进行完整的tcp/ip协议栈的解析,并且本发明的数据包只需要分析前几个字节,极大提高了数据处理性能。能够对负载均衡器进行横向扩展和纵向扩展,有效加快处理网络数据包的速率。

附图说明

图1为本发明负载均衡器结构示意图;

图2为负载均衡器数据处理示意图;

图3为负载均衡器与网卡内存数据共享示意图;

图4为本发明负载均衡系统结构示意图。

具体实施方式

下面结合附图和实施例对本发明做进一步详细说明。

如图1所示,本发明提供一种高效的负载均衡器,所述负载均衡器设置在网卡上,所述负载均衡器输入输出端分别与网卡的输入和输出队列相连,所述负载均衡器设有接收解析模块、均衡模块和发送模块,所述解析模块用于接收网卡输入队列的数据包并解析数据包的转发信息,所述均衡模块用于对解析的数据包均衡分配到发送队列中;发送模块用于从发送队列中读取数据包,并把数据包通过网卡的输出队列均衡分发给后端服务器。

本例的接收解析模块为接收队列及数据包头改写单元,其中的均衡模块包括接收ip匹配单元、连接会话管理单元、数据重新封包单元等。当数据重新封装好后,通过数据包发送单元发送。

通过本例的设置,数据网络能够绕过内核,不需要经过内核的一系列模块处理,并且,针对数据包,也不需要经过网卡的驱动层、链路层、ip层、tcp层、应用层等进行完整的的tcp/ip协议栈的解析。本例的数据包只需要在进入网卡的驱动层被负载均衡器调用,并且通过本例的接收解析模块分析前几个字节,提取出转发信息,有效节约了数据处理时间,提高数据处理效率。本例的转发信息包括源地址、源端口、目标地址、目标端口和协议号这五元组,对于转发来说就已经足够;剩下的诸如payload,序列号之类的东西统统不关心,直接塞到网卡输出口给后面的实现服务器。

如图2所示,作为本发明的一个实施例,本例的数据包为报文,本例的负载均衡器分别通过相应的线程来实现。本例的负载均衡器的数据处理流程为:

1.接收:接收网卡把收到的报文dma(直接存储器访问)到自已的硬件接收环缓冲区中,接收线程从硬件的环缓冲区中取出报文,解释报文类型,把类型标识到报文和管理结构rte_mbuf->pk.hash.sched中,其实就是标识报文的subport,pipe,traffic_class,queue,color字段,最后把报文暂存在一个接收队列中,等待均衡调度线程把报文调度到相应的队列。

2.入队:均衡调度线程从接收队列中取出一定数量的报文,根据每个报文的标识,找到相应的队列,把报文分配到相应的队列中,然后到bit图(一种海量数据处理算法)中激活该队列。

值得一提的是,本例还包括检测模块,设置在接收解析模块和均衡模块之间,用于对进入均衡模块的数据包进行检测,如果数据包的检测结果为丢弃,则该数据包不进入均衡模块。

比如,如果配置了检测模块,在入队前需要先做检测,比如设置的条件为接收队列中的数据不能大于设定值,或者数据包的数量不能超过一定阈值,当某些数据包传输时,达到这些条件,那么就将其丢弃,以提高数据传输效率。

3.出队:均衡调度线程把一定数目的报文入队后,采用相应的均衡算法,从队列中选择一个队列,然后从所选择的队列中把报文取出保存到发送队列中,等待发送线程发送。

本例的负载均衡算法包括随机数生成算法、轮询算法、加权轮询算法、最少连接算法、最快传输算法、预判算法等等。本例优选轮询算法,按照顺序把数据包平均分配给连接的多个服务器。

4.发送:发送线程从发送队列中读取报文,把报文发送到外出网卡的缓冲区中。

如图3所示,为了提高本例的数据处理效率,本例的负载均衡器与网卡的内存共享,这样就不需要将数据包再从网卡进行一次复制到负载均衡器中,也不需要把数据包再从负载均衡器复制到网卡。本例网卡输入队列、负载均衡器和网卡输出队列共享一个数据池空间,所述负载均衡器能够读取网卡的内存数据,负载均衡器的接收队列和发送队列的三个指针不断的在内存共享池移动处理数据包,减少了复制数据的开销。

本例的负载均衡器能够利用dpdk(dataplanedevelopmentkit)技术垂直扩展,其中,dpdk是intel提供的提升数据面报文快速处理速率的应用程序开发包,本负载均衡器主要利用dpdk的下面几个特性加快处理网络数据包的速率:

1.采用大页缓存支持来提高内存访问效率;

2.利用uio(userspacei/o,是运行在用户空间的i/o技术)支持,提供应用空间下驱动程序的支持,也就是说网卡驱动是运行在用户空间的,减下了报文在用户空间和应用空间的多次拷贝;

3.利用linux亲和性支持,把控制面线程及各个数据面线程绑定到不同的cpu核,节省了线程在各个cpu核来回调度;

4.提供内存池,并对内存池进行无锁环形缓存管理,加快内存访问效率。

如图4所示,本例还提供了一种包含所述负载均衡器的负载均衡系统,包括客户端、域名解析服务器(dns服务器)、路由器、多个服务器,所述客户端分别与路由器和域名解析服务器相连,所述负载均衡系统设置在路由器和多个服务器之间。实现负载均衡器的横向扩展及负载均衡系统整体均衡分配,进一步提高数据处理效率。其中,客户端和dns服务器之间进行dns消息的互通,所述负载均衡器和路由器之间除了网络流量的转发外,还发送bgp信令给路由器,所述bgp(边界网关协议)信令是运行于tcp上的一种自治系统的路由协议。

一般来说,负载均衡器本身就是后端服务横向扩展的一个接入点,对于一般站点一个负载均衡器就够了;然而应对高级别的流量,负载均衡器本身也要能横向扩展,还要处理负载均衡器的高可用。本例与路由器连接的负载均衡器为1个以上,每个负载均衡器连接多个服务器,当负载均衡器为多个时,本例的处理流程为:

当客户端发送请求时,dns服务器(域名解析服务器)会根据客户端请求的位置返回一个离请求地理位置最近的vip地址,先在dns这一层做一个横向扩展。

然后,当请求包到达vip地址对应的路由器;路由器通过ecmp(等价多路径)协议,可以将请求平均分配到下面对等的多个负载均衡器上,这样在路由器这一层做了个负载均衡,让后面的负载均衡器也实现了横向扩展;负载均衡器的均衡模块再将请求包均衡分发给与之连接的多个服务器。

优选地,在负载均衡器处理环节,本例负载均衡器在接收到请求包转发给服务器时,将请求包的源地址修改为用户请求时的地址,服务器响应时,将响应包的源地址改为用户的vip地址,将响应包不通过负载均衡器直接发送给与客户端相连的路由器,从而降低负载均衡器压力。

本发明通过对负载均衡器进行横向扩展和纵向扩展,有效加快处理网络数据包的速率。

以上所述之具体实施方式为本发明的较佳实施方式,并非以此限定本发明的具体实施范围,本发明的范围包括并不限于本具体实施方式,凡依照本发明所作的等效变化均在本发明的保护范围内。

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