一种负载均衡接口表维护方法、设备及系统
技术领域
本发明涉及流量分流技术领域,尤其涉及一种负载均衡接口表维护方法、设备及系统。
背景技术
互联网采集分流系统是一种在通信网络中进行数据分光采集和分流的系统。目前,采集分流设备从IP数据网络获取流量,按一定负载分担算法从输出接口组中选一个接口把流量送到后台服务器进行更深入的数据分析,如图1所示。
对于采集分流设备,最基本的原则就是将采集的流量均衡的分流到指定的输出接口组各接口,同时保证流量同源同宿,也就是同一会话的流量发送到同一后台服务器。
假设采用输入流五元组信息进行hash计算,设置最大hash值深度为20,即hash值范围从0-19,另外假设分流输出负载均衡接口组的接口数为5,假设5个接口都UP,那么采用hash值除以输出接口组接口数取余法,如表1所示,可以得到接口表a,hash值对应的物理接口即为该hash值所对应流的输出接口。
表1传统负载均衡接口表
但是,如果接口3出现down,这个输出接口组数量就只有4个了,按照以上方法,如表1所示,可以得到接口表b。从接口表b可以看出,hash值为3-18的流对应的输出接口相对原来全部发生了变化,也就是说以上负载均衡接口表维护方法一旦负载均衡输出接口组接口数量发生变化,几乎所有送往服务器的的流都会受到影响,无法做到会话保持。
如前所述,采集分流设备将采集的流均衡的分流到负载均衡输出接口组,同时根据hash计算和查找,保证同一会话的流量能输送到同一台服务器进行分析,然而采用以上负载均衡算法就会导致输出接口组有接口down时,送给某台服务器的流量会发生变化,送到其它服务器,虽然最终的数据分析不受影响,但过程中势必造成数据在服务器群间来回切换,势必导致客户体验变差。
为了解决以上缺陷,目前业界有采用通过以上方法结合流表的手段来保持会话,即先查找出接口,找到出接口后将hash值和出接口号写入流表,后续的流就先查流表,这样就保证了会话的保持,但这种方法,随着网络中的流量种类越来越丰富,流表就会越来越庞大,非常消耗系统资源,并且有些设备的系统方案本身芯片也无更多资源存储流表。
发明内容
本发明的主要目的在于提供一种负载均衡接口表维护方法、设备及系统,旨在实现负载均衡分流时会话的保持。
本发明提供一种一种负载均衡接口表维护方法,所述方法包括以下步骤:
根据系统配置的负载均衡输出接口信息对输出接口组进行初始化,设置对流进行hash计算的hash算法和hash值范围;
实时根据输出接口组接口数量和hash值范围生成负载均衡逻辑接口表,根据输出接口组接口数量生成物理接口A表;
检测到输出接口组其中一个接口或多个接口出现接口关闭时,复制物理接口A表到一张物理接口B表,将出现接口关闭的接口所对应的物理接口B表中的逻辑接口号删掉;将未关闭的接口对应的逻辑接口号按预设的规则填入物理接口B表中空缺的条目;
收到需要负载均衡输出的IP流时,根据设置的hash算法计算出该IP流的hash值,根据所述hash值查找负载均衡逻辑接口表、物理接口B表得到输出接口,将该IP流从查找到的输出接口输出。
在上述技术方案的基础上,实时根据输出接口组接口数量和hash值范围生成负载均衡逻辑接口表,具体包括以下步骤:
在hash值范围内,从小到大依次采用各个hash值除以输出接口组最大接口数M,得到的余数作为该hash值对应行的逻辑接口号,由各个hash值及其对应行的逻辑接口号组成负载均衡逻辑接口表。
在上述技术方案的基础上,根据输出接口组接口数量生成物理接口A表,具体包括以下步骤:
根据hash值范围建立对应数量的物理接口A表条目,每个物理接口A表条目对应一个hash值,并按照其对应的hash值的大小从小到大排列;
将逻辑接口号从小到大依次填入各个物理接口A表条目;填入的逻辑接口号为最大值时,下一物理接口A表条目填入逻辑接口号最小值,继续按逻辑接口号从小到大依次填入各个物理接口A表条目,直至填满所有的物理接口A表条目。
在上述技术方案的基础上,将未关闭的接口对应的逻辑接口号按预设的规则填入物理接口B表中空缺的条目,具体包括以下步骤:
将逻辑接口号从小到大依次填入物理接口B表中空缺的条目;填入的逻辑接口号为最大值时,下一物理接口B表中空缺的条目填入逻辑接口号最小值,继续按逻辑接口号从小到大依次填入物理接口B表中空缺的条目,直至填满所有的物理接口B表中空缺的条目。
在上述技术方案的基础上,根据所述hash值查找负载均衡逻辑接口表、物理接口B表得到输出接口,将该IP流从查找到的输出接口输出,具体包括以下步骤:
根据负载均衡逻辑接口表和物理接口B表中相同行数的条目一一对应生成逻辑接口及物理接口B表的对应表;
根据流的hash值查找逻辑接口及物理接口B表的对应表,查找到输出接口;将该IP流从查找到的输出接口输出。
在上述技术方案的基础上,所述接口关闭包括接口down的情况,以及接口被手动删除且不更新接口组的情况。
在上述技术方案的基础上,所述实时根据输出接口组接口数量和hash值范围生成负载均衡逻辑接口表,根据输出接口组接口数量生成物理接口A表,还包括以下步骤:
增加接口时,根据新的输出接口组接口数量和hash值范围生成新的负载均衡逻辑接口表;根据新的输出接口组接口数量生成新的物理接口A表。
在上述技术方案的基础上,所述实时根据输出接口组接口数量和hash值范围生成负载均衡逻辑接口表,根据输出接口组接口数量生成物理接口A表,还包括以下步骤:
手动删除接口时,判断是否需要更新接口组,如需要更新接口组,则根据新的输出接口组接口数量和hash值范围生成新的负载均衡逻辑接口表;根据新的输出接口组接口数量生成新的物理接口A表;如果不需要更新接口组,则把删除的接口当作接口关闭处理。
本发明还提供一种线卡设备,包括:
存储器,所述存储器中存储有指令;
处理器,用于读取并执行所述存储器中的指令,以使得所述线卡设备执行所述的方法。
本发明还提供一种采集分流系统,包括若干如权利要求9所述的线卡设备和若干交换卡;
所述线卡设备用于:对IP流进行流识别和处理,进行负载均衡接口表维护,得到IP流的输出接口,通过所述交换卡将IP流送往设备对应的输出接口;
所述交换卡用于将IP流送往设备对应的输出接口。
与现有技术相比,本发明的优点在于:
本发明通过生成负载均衡逻辑接口表、物理接口A表和物理接口B表三张表,并实时在物理接口A表和物理接口B表之间维护接口表的生成,如有接口关闭,都会实时重新生成物理接口B表,本发明所设计的物理接口B表生成机制保证了那些未发生变化的接口输出的流量不会因为其他接口的状态变化而发生输出接口的改变,从而达到了负载均衡分流时会话的保持。
附图说明
图1为现有技术的采集分流系统负载均衡应用示意图;
图2为本发明实施例的负载均衡接口表维护方法的流程示意图;
图3为本发明实施例的负载均衡接口表维护过程示意图;
图4为本发明实施例的负载均衡流量处理过程示意图;
图5为本发明实施例的采集分流系统框图及流量采集分流路径示意图。
具体实施方式
参见图2所示,本发明实施例提供一种负载均衡接口表维护方法,其特征在于,所述方法包括以下步骤:
S1、根据系统配置的负载均衡输出接口信息对输出接口组进行初始化,设置对流进行hash计算的hash算法和hash值范围;
S2、实时根据输出接口组接口数量和hash值范围生成负载均衡逻辑接口表,根据输出接口组接口数量生成物理接口A表;
S3、检测到输出接口组其中一个接口或多个接口出现接口关闭时,复制物理接口A表到一张物理接口B表,将出现接口关闭的接口所对应的物理接口B表中的逻辑接口号删掉;将未关闭的接口对应的逻辑接口号按预设的规则填入物理接口B表中空缺的条目;
S4、收到需要负载均衡输出的IP流时,根据设置的hash算法计算出该IP流的hash值,根据所述hash值查找负载均衡逻辑接口表、物理接口B表得到输出接口,将该IP流从查找到的输出接口输出。
本发明实施例的负载均衡接口表维护过程如下,如图3所示。
S10:首先根据系统配置下来的负载均衡输出接口信息对输出接口组进行初始化,并设置要对流进行hash计算的hash算法和hash值深度。
这里假设流量输出负载均衡接口组的接口数为5个,并采用某种hash算法,设置最大hash值深度为20,即hash值范围从0-19。
S11:根据负载均衡输出接口组接口数量和hash值深度生成负载均衡逻辑接口表。如表2所示,由于设置hash值深度为20,则根据流的IP五元组信息计算出来的hash值范围为0-19,如表2左列的‘HASH值’列。同时采用hash值除以负载均衡输出接口组最大接口数5,得到的余数即为逻辑接口号,如表2的右列‘逻辑接口号’列,为0-19个hash值计算得到对应的逻辑接口号。
表2负载均衡逻辑接口表
S12:根据负载均衡输出接口组接口总数生成物理接口A表。如表3所示,设置物理接口A表的深度等于hash值深度20,即接口表最大20行,由于系统设置的负载均衡输出接口组最大接口数为5,从第一行开始从小到大填入interface0,interface1,interface2,interface3,interface4,到第六行开始又从小到大填入interface0,interface1,interface2,interface3,interface4,后面不断这样重复,直到把20行填完。
表3物理接口A表
S13:生成物理接口A表后,实时判断负载均衡输出接口组内是否有接口出现down,或者是否有接口被手动删除且不更新接口组的情况,如果有接口被手动删除又不需要更新输出接口组总接口数量时,删除的接口当作接口down处理。
S14:根据接口down的数量生成或更新物理接口B表。
情况一:步骤S13检测到负载均衡输出接口组中5个输出接口没有接口down,都up时,则直接复制物理接口A表到物理接口B表,如表4-1。
表4-1物理接口B表(所有接口UP时)
行号 |
输出接口号 |
1 |
interface0 |
2 |
interface1 |
3 |
interface2 |
4 |
interface3 |
5 |
interface4 |
6 |
interface0 |
7 |
interface1 |
8 |
interface2 |
9 |
interface3 |
10 |
interface4 |
11 |
interface0 |
12 |
interface1 |
13 |
interface2 |
14 |
interface3 |
15 |
interface4 |
16 |
interface0 |
17 |
interface1 |
18 |
interface2 |
19 |
interface3 |
20 |
interface4 |
情况二:步骤S13检测到负载均衡输出接口组中接口2出现down时,则首先复制物理接口A表,将物理接口A表对应接口号为interface2的位置删掉接口号,如表4-2的行3,8,13和18对应的接口号,然后将当前up的接口号从小到大逐一填入被删除的down掉的接口号位置,如interface0填入第3行,interface1填入第8行,interface3填入第13行,interface4填入第18行,如果后面还有interface2的位置,则又从interface0开始从小到大逐一填入,不断重复,直到把接口表中所有interface2的位置填满,通过这种方法最终生成了物理接口B表,如表4-2所示;以及生成逻辑接口和物理接口A表对应表,如表4-2-1所示。
表4-2物理接口B表(接口2down)
行号 |
输出接口号 |
1 |
interface0 |
2 |
interface1 |
3 |
interface0 |
4 |
interface3 |
5 |
interface4 |
6 |
interface0 |
7 |
interface1 |
8 |
interface1 |
9 |
interface3 |
10 |
interface4 |
11 |
interface0 |
12 |
interface1 |
13 |
interface3 |
14 |
interface3 |
15 |
interface4 |
16 |
interface0 |
17 |
interface1 |
18 |
interface4 |
19 |
interface3 |
20 |
interface4 |
表4-2-1逻辑接口和物理接口A表对应表
情况三:步骤S13检测到负载均衡输出接口组中接口2和3出现down时,则首先复制物理接口A表,将物理接口A表对应接口号为interface2和interface3的位置删掉接口号,如表4-3的行3,4,8,9,13,14,18和19对应的接口号,然后将当前up的接口号从小到大逐一填入被删除的down掉的接口号位置,如interface0填入第3行,interface1填入第4行,interface4填入第8行,如果后面还有interface2和interface3的位置,则又从interface0开始从小到大逐一填入,不断重复,直到把接口表中所有interface2和interface3的位置填满,通过这种方法最终生成了物理接口B表,如表4-3所示。
表4-3物理接口B表(接口2,3down)
行号 |
输出接口号 |
1 |
interface0 |
2 |
interface1 |
3 |
interface0 |
4 |
interface1 |
5 |
interface4 |
6 |
interface0 |
7 |
interface1 |
8 |
interface4 |
9 |
interface0 |
10 |
interface4 |
11 |
interface0 |
12 |
interface1 |
13 |
interface1 |
14 |
interface4 |
15 |
interface4 |
16 |
interface0 |
17 |
interface1 |
18 |
interface0 |
19 |
interface1 |
20 |
interface4 |
以上情况二和三举例描述了其中一个接口或多于一个接口down的情况时的B表生成方法,参照该方法,可以生成任意接口down时的物理接口B表。
物理接口B表生成后,即过程S14处理完后,立即回到S12,再次从S12->S13->S14->S12重复执行,通过如此重复执行,可以根据接口up/down变化实时刷新物理接口B表。
S15:如果负载均衡输出接口组需要手动增加接口数,那么整个流量要负载均衡到更多的接口,势必需要重新初始化生成新的负载均衡逻辑接口表,即按图4所示S11的处理,根据增加的接口数重新生成负载均衡逻辑接口表。
本实施案例前面提到负载均衡输出接口组接口数为5,如果增加1个接口,则输出接口组接口数为6,根据S11和S12所述的方法,生成新的负载均衡逻辑接口表和新的物理接口A表,如表5-1和表5-2所示。
表5-1负载均衡逻辑接口表
HASH值 |
逻辑接口号 |
0 |
0 |
1 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
0 |
7 |
1 |
8 |
2 |
9 |
3 |
10 |
4 |
11 |
5 |
12 |
0 |
13 |
1 |
14 |
2 |
15 |
3 |
16 |
4 |
17 |
5 |
18 |
0 |
19 |
1 |
表5-2物理接口A表
S16:如果负载均衡输出接口组需要手动删除接口数,那么需要执行步骤S17;
S17:判断手动删除接口时,是否需要更新接口组,如需要更新接口组,则按S11的处理,根据删除的接口重新生成负载均衡逻辑接口表;如果不需要更新接口组,则按S13的步骤处理,即把删除的接口当作接口down处理。
假设手动删除接口时需要更新负载均衡输出接口组接口数,如本实施案例前面提到负载均衡输出接口组接口数为5,如果删除1个接口,则输出接口组接口数为4,根据S11和S12所述的方法,生成新的负载均衡逻辑接口表和新的物理接口A表,如表5-3和表5-4所示。
表5-3负载均衡逻辑接口表
表5-4物理接口A表
行号 |
输出接口号 |
1 |
interface0 |
2 |
interface1 |
3 |
interface2 |
4 |
interface3 |
5 |
interface0 |
6 |
interface1 |
7 |
interface2 |
8 |
interface3 |
9 |
interface0 |
10 |
interface1 |
11 |
interface2 |
12 |
interface3 |
13 |
interface0 |
14 |
interface1 |
15 |
interface2 |
16 |
interface3 |
17 |
interface0 |
18 |
interface1 |
19 |
interface2 |
20 |
interface3 |
本发明实施例的流量处理过程和步骤如下,如图4所示。
S20:需要负载均衡输出的流到达负载均衡模块。
S21:根据指定的hash算法计算出流的hash值,如S10,S11所述。
S22:根据流的hash值查找负载均衡逻辑接口表,如表2所示,负载均衡逻辑接口表的生成方法如S11所述。
S23:根据逻辑接口表和物理接口B表对应表查找到输出接口,如表4,5,6所示;
本实施例中,负载均衡输出接口组接口数为5,当所有接口up,未出现down的情况,根据前面生成的逻辑接口表(表2)和物理接口B表(表4-1)形成对应表,如表6-1所示。
表6-1逻辑接口和物理接口B表对应表一
当负载均衡接口组内接口2出现down时,根据前面生成的逻辑接口表(表2)和物理接口B表(表4-2)形成对应表,如表6-2所示。
表6-2逻辑接口和物理接口B表对应表二
当负载均衡接口组内接口2和3出现down时,根据前面生成的逻辑接口表(表2)和物理接口B表(表4-3)形成对应表,如表6-3所示。
表6-3逻辑接口和物理接口B表对应表三
S24:如S23的所述方法,进入负载均衡模块的IP流生成hash值后,根据生成的负载均衡逻辑接口表和物理接口B表的对应表,找到输出接口号,并将该IP流从查找到的接口输出。
根据以上方法,从表4,5,6可以看出,当负载均衡输出接口组内接口出现down时,只是出现down的接口对应hash值的IP流的输出接口关闭,这些流被平均的分担到了其它up的接口,而本来已经查找到从up接口上输出的所有流量并未发生输出接口改变,持续保持原有输出接口中输出,从而很好的达到了会话保持的效果。
基于同一发明构思,本申请实施例还提供一种线卡设备,其包括存储器和处理器,所述存储器中存储有指令,所述处理器用于读取并执行所述存储器中的指令,以使得所述电子设备实现所述负载均衡接口表维护方法中的全部或部分流程。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,处理器是计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。
存储器可用于存储计算机程序和/或模块,处理器通过运行或执行存储在存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现计算机装置的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、视频数据等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
基于同一发明构思,本申请实施例还提供一种采集分流系统,该系统主要由若干个线卡和若干交换卡组成,线卡由常用的流量处理ASIC芯片和FPGA组成。作为流从线卡的接口输入后,首先进入ASIC芯片进行流的初步识别和处理,再分发到若干个线卡的FPGA,FPGA对流进行进一步识别和处理,最后处理完的流量需要通过一系列的负载均衡输出接口组送往后端设备,如服务器,其中这一步是由FPGA内部部署的负载均衡模块来完成。具体的,流量经过FPGA进行了其他识别和处理后,需要输出之前,FPGA按照图4和图5的总体流量处理过程和负载均衡接口表维护过程实现流量的负载分担,找到输出接口,将流量经过ASIC和交换卡送往设备的输出接口。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、服务器或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、服务器和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。