多协议栈负载均衡方法及装置的制造方法
【技术领域】
[0001]本发明涉及通信技术领域,特别是涉及一种多协议栈负载均衡方法及装置。
【背景技术】
[0002]云计算的快速发展,使得计算的工作越来越集中在数据中心完成,而终端更多的是利用网络快速的将请求的任务发送到数据中心,所以终端对计算能力的需求在降低,而对网络能力的需求在增加。而协议栈作为应用和物理网络之间的桥梁却没有得到快速发展,已经逐渐成为了两者之间的瓶颈。多个协议栈组合处理单个或者多个端口的扩展方式已经成为必然。此时,要采用分流算法将属于相同连接的数据包转发给不同的协议栈,由于所有协议栈共用一个分发模块,不算是真正的并行处理,容易在分发模块处出现性能瓶颈。
[0003]现在商用1G网卡大部分具备有RSS (Receive Side Scaling,接收方扩展)等分流功能,通过对接收的网络数据包基于三元组/五元组进行哈希(hash),完成硬件分流的任务,将属于同一个连接的数据包发给网卡的同一个RSS网卡收队列,即发给同一个协议栈实例来处理。如图1所示,每个网卡接口 100有多个协议栈,如协议栈0,协议栈1、协议栈2、协议栈3,每个协议栈绑定至少I个RSS网卡收、发队列,RSS网卡收队列由对应的协议栈处理。例如,通常通过防火墙网关发出的数据包具有相同的IP (Internet Protocol,网络协议),如果网卡的RSS分流只是基于源、目的IP以及协议三元组来进行哈希(hash)分流的话,这些通过同一个网关的数据包很可能分配到了同一个RSS网卡收队列,导致和该队列相连的协议栈可能存在过载的情况。因此,基于数据包的三元组/五元组进行简单hash分流,存在不能通过感知协议栈的真实负载情况进行灵活的负载均衡分发的缺点。
【发明内容】
[0004]本发明实施方式提供一种多协议栈负载均衡方法及装置,能够在多协议栈环境下,通过对协议栈以及应用的负载感知,与RSS网卡收/发队列、流表匹配相结合,实现协议栈的负载均衡,减少了 CPU的数据分发开销。
[0005]第一方面提供一种多协议栈负载均衡方法,该方法包括:响应应用的请求创建第一套接字并部署在所有的协议栈上;接收请求连接的数据包;判断请求连接的数据包的协议类型,如果协议类型是传输控制协议,则:创建第二套接字以建立会话连接;根据每个协议栈的负载情况,为第二套接字选择一个协议栈;在第二套接字的数据包通过网卡的默认分流规则不能把数据包分流到选择的协议栈所绑定的接收方扩展RSS网卡收队列上时,根据网卡的分流策略在网卡上创建匹配流表,并在接收到数据包后,把接收的第二套接字的数据包分流到RSS网卡收队列上;进行第二套接字与选择的协议栈间的数据包分发。
[0006]结合第一方面,在第一方面的第一种可能的实现方式中,还包括:会话结束后,释放第二套接字,并删除网卡上创建的匹配流表。
[0007]结合第一方面,在第一方面的第二种可能的实现方式中,如果协议类型是用户数据报协议,则:由收到请求连接的数据包的协议栈进行协议处理。
[0008]结合第一方面,在第一方面的第三种可能的实现方式中,在响应应用的请求创建第一套接字并部署在所有的协议栈上的步骤之前,对网卡和所有的协议栈进行初始化配置,包括:读取并存储网卡的硬件配置信息;获取用户配置信息,并结合硬件配置信息形成网卡配置策略,写入网卡;启动多个协议栈,并根据网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。
[0009]结合第一方面,在第一方面的第四种可能的实现方式中,响应应用的请求创建第一套接字并部署在所有的协议栈上包括:调用应用编程接口创建第一套接字;第一套接字创建后,调用bind函数将第一套接字绑定到特定的IP地址,并调用listen函数监听指定端口的数据包请求;收到第一套接字的监听方法调用时,将第一套接字部署在所有的协议栈上。
[0010]结合第一方面,在第一方面的第五种可能的实现方式中,创建第二套接字以建立会话连接的步骤包括:根据各协议栈的网络运行的实际情况,创建第二套接字。
[0011]结合第一方面,在第一方面的第六种可能的实现方式中,创建第二套接字以建立会话连接的步骤包括:将接收的对端发送的请求连接的数据包转给应用;待应用确认后创建第二套接字。
[0012]结合第一方面,在第一方面的第七种可能的实现方式中,会话结束包括接收并响应应用下发的释放第二套接字的请求,或者接收并响应对端发送的连接释放请求。
[0013]第二方面提供一种多协议栈负载均衡方法,该方法包括:创建第一套接字,并根据每个协议栈的负载情况,为第一套接字选择一个协议栈以建立会话连接;若第一套接字的数据包通过网卡的默认分流规则不能分流到协议栈所绑定的接收方扩展RSS网卡收队列上,则根据网卡的分流策略在网卡上创建匹配流表,并在接收到数据包后,把接收的数据包分流到RSS网卡收队列上;进行第一套接字与选择的协议栈间的数据包分发。
[0014]结合第二方面,在第二方面的第一种可能的实现方式中,还包括:会话结束后,释放第一套接字,并删除网卡上创建的匹配流表
[0015]结合第二方面,在第二方面的第二种可能的实现方式中,在创建第一套接字之前,对网卡和所有的协议栈进行初始化配置,包括:读取并存储网卡的硬件配置信息;获取用户配置信息,并结合硬件配置信息形成网卡配置策略,写入网卡;启动多个协议栈,并根据网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。
[0016]结合第二方面,在第二方面的第三种可能的实现方式中,会话结束包括接收并响应应用下发的释放第一套接字的请求,或者接收并响应对端发送的连接释放请求。
[0017]第三方面提供一种多实例协议栈负载均衡装置,该装置包括:协议栈模块、网卡、数据分发模块以及负载均衡模块,协议栈模块包括多个协议栈,其中:数据分发模块,用于响应应用的请求创建第一套接字并部署在所有的协议栈上;协议栈模块,用于接收请求连接的数据包,判断请求连接的数据包的协议类型;数据分发模块,用于,如果协议类型是传输控制协议,则创建第二套接字以建立会话连接;负载均衡模块,用于,如果协议类型是传输控制协议,则根据每个协议栈的负载情况,为第二套接字选择一个协议栈,并在第二套接字的数据包通过网卡的默认分流规则不能分流到选择的协议栈所绑定的接收方扩展RSS网卡收队列上时,根据网卡的分流策略在网卡上创建匹配流表,并在接收到数据包后,把接收的第二套接字的数据包分流到RSS网卡收队列上;数据分发模块,还用于进行第二套接字与选择的协议栈间的数据包分发。
[0018]结合第三方面,在第三方面的第一种可能的实现方式中,在会话结束后,协议栈模块,还用于,控制选择的协议栈释放第二套接字;负载均衡模块,还用于删除网卡上创建的匹配流表。
[0019]结合第三方面,在第三方面的第二种可能的实现方式中,协议栈模块,还用于,如果协议类型是用户数据报协议,则控制收到请求连接的数据包的协议栈进行协议处理。
[0020]结合第三方面,在第三方面的第三种可能的实现方式中,负载均衡模块,还用于对网卡和所有的协议栈进行初始化配置,包括:具体用于读取并存储网卡的硬件配置信息,获取用户配置信息并结合硬件配置信息形成网卡配置策略,写入网卡;协议栈模块,还用于启动多个协议栈,并根据网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。
[0021]结合第三方面,在第三方面的第四种可能的实现方式中,数据分发模块,用于响应应用的请求创建第一套接字并部署在所有的协议栈上,具体为:数据分发模块用于响应应用调用应用编程接口的通知创建第一套接字,并接收第一套接字的监听方法调用,其中,第一套接字创建后,应用调用bind函数将第一套接字绑定到特定的IP地址,并调用listen函数监听指定端口的数据包请求;负载均衡模块,还用于通知各协议栈将第一套接字部署在所有的协议栈上。
[0022]结合第三方面,在第三方面的第五种可能的实现方式中,数据分发模块用于创建第二套接字以建立会话连接,具体为:用于根据各协议栈的网络运行的实际情况,创建第二套接字。
[0023]结合第三方面,在第三方面的第六种可能的实现方式中,协议栈模块用于创建第二套接字以建立会话连接,具体为:用于将接收的对端发送的请求连接的数据包转给应用;所述数据分发模块,用于待应用确认后创建第二套接字。
[0024]结合第三方面,在第三方面的第七种可能的实现方式中,数据分发模块接收并响应应用下发的释放第二套接字的请求,或者协议栈模块接收并响应对端发送的连接释放请求,则表示会话结束。
[0025]第四方面提供一种多实例协议栈负载均衡装置,该装置包括:协议栈模块、网卡、数据分发模块以及负载均衡模块,协议栈模块包括多个协议栈,其中:数据分发模块,用于创建第一套接字;负载均衡模块,用于根据每个协议栈的负载情况,为第一套接字选择一个协议栈以建立会话连接,若第一套接字的数据包通过网卡的默认分流规则不能分流到协议栈所绑定的接收方扩展RSS网卡收队列上,则根据网卡的分流策略在网卡上创建匹配流表,并在接收到数据包后,把接收的数据包分流到RSS网卡收队列上;数据分发模块,还用于进行第一套接字与选择的协议栈间的数据包分发。
[0026]结合第四方面,在第四方面的第一种可能的实现方式中,在会话结束后,协议栈模块,用于控制选择的协议栈释放第一套接字;负载均衡模块,还用于删除网卡上创建的匹配流表。
[0027]结合第四方面,在第四方面的第二种可能的实现方式中,负载均衡模块,还用于对网卡和所有的协议栈进行初始化配置,包括:具体用于读取并存储网卡的硬件配置信息,获取用户配置信息并结合硬件配置信息形成网卡配置策略,写入网卡;协议栈模块,还用于启动多个协议栈,并根据网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。
[0028]结合第四方面,在第四方面的第三种可能的实现方式中,数据分发模块接收并响应应用下发的释放第一套接字的请求,或者协议栈模块接收并响应对端发送的连接释放请求,则表示会话结束。
[0029]本发明实施方式提供的多协议栈负载均衡方法及装置,通过响应应用的请求创建第一套接字并部署在所有的协议栈上;在接收请求连接的数据包后,如果请求连接的数据包的协议类型是传输控制协议,则创建第二套接字以建立会话连接;并根据每个协议栈的负