一种用于流式数据并行处理的负载均衡方法_2

文档序号:9304477阅读:来源:国知局
级处理线程的缓冲队列;所述全局流表记录已处理过的所有数据流及其所对应的 在流水线中的处理路径;
[0025] 23)更新所有第i+1级处理线程的缓冲队列在当前时刻下的EWMA值,选出EWMA值 最小的第i+1级处理线程;
[0026] 24)将所述第i级中间数据包发往步骤23)所选出的第i+1级处理线程的缓冲队 列;回到步骤21)接收下一个第i级中间数据包。
[0027] 其中,所述步骤24)还包括:根据步骤23)的选择更新所述全局流表中所述第i级 中间数据包所对应数据流的表项。
[0028] 其中,所述全局流表的每条表项记录数据流标识和该数据流在流水线中的处理路 径,其中采用五元组作为数据流标识,五元组由源IP地址、目的IP地址、源端口、目的端口、 传输层的协议类型构成。
[0029] 与现有技术相比,本发明具有下列技术效果:
[0030] 1、本发明能够实现流式数据并行处理中流水线构架内部的负载均衡。
[0031] 2、本发明能够显著降低流水线中各个线程的缓冲队列长度。
[0032] 3、本发明能够降低流水线中各个线程的缓冲队列长度的波动幅度。
[0033] 4、本发明能够降低流水线中各个线程的缓冲队列长度之间的差异。
【附图说明】
[0034] 以下,结合附图来详细说明本发明的实施例,其中:
[0035] 图1示出了现有技术中一个通用的数据包多核并行处理架构;
[0036] 图2示出了本发明一个实施例中增加了负载均衡模块的多核并行处理架构的示 例;
[0037] 图3示出了本发明一个优选实施例中的EWMA负载均衡算法的流程图。
【具体实施方式】
[0038] 发明人在进行数据包多核并行处理研究时,发现数据包并行处理存在以下两个特 占.
[0039] 1)网络流量的动态性。网络中流入的数据包内容都是随着时间动态变化的,不同 时段下的网络流量成分都有巨大差异。因此,即便是在同一个处理线程下进行处理,其所处 理的每个网络数据包的实际操作复杂度也可能是不一样的。由于网络数据的动态性,评估 和预测待处理负载的"处理难度"变得异常困难,导致现有的网卡负载均衡和操作系统负载 均衡方案均难以达到理想的效果。
[0040] 2)处理线程的异构性。在数据包并行处理中,不同处理线程上执行的处理任务通 常也不一样。例如在一个处理流水线中,第一级线程负责数据包解码,第二级线程负责深度 包检测。即使是同一级流水线中,也可能存在任务分工,例如部分线程负责TCP协议处理, 其它线程负责UDP协议处理。处理线程的异构性,造成了"处理能力"的不一致,而现有的 负载均衡方案未考虑到这种不一致性。
[0041] 基于上述分析,本发明的一个实施例提出了一种用于数据包并行处理的负载均衡 方法,该方法基于数据包多核并行处理架构实现。图2示出了本发明一个实施例中增加了 负载均衡模块的多核并行处理架构的示例。如前文所述,在数据包多核并行处理架构中,每 个处理器核上都绑定一个处理线程,所有处理线程共同构成了一个并行流水线布局。输入 的数据包从流水线第一级开始,经过层层处理,最终抵达流水线最后一级,进而完成数据包 的处理。参考图2,本实施例中,在流水线内部的各级之间都设置一个负载均衡模块,用于 为流水线的每一阶段都进行负载均衡。流水线共包含三级处理线程,因此流水线内部总共 需要做两级负载均衡,即需要两个负载均衡模块(负载均衡模块Level1和负载均衡模块 Level2)。前一级流水线的输出数据都会交给负载均衡器处理,然后通过一定的负载均衡 算法进行分配,输出到下一级流水线的线程的输入队列中。此处输入队列实际上是指处理 器核心的缓冲队列,由于流水线的每个线程都绑定了相应的处理器核心,所以处理器核心 的缓冲队列可以看成相应线程的缓冲队列。图2中,每级流水线的线程个数并不完全一致, 例如第二级线程的数目为四个,第一级和第三级线程的数目均为三个。本实施例中,通过流 水线内部各级之间的负载均衡模块的处理,数据流的处理路径不一定是直线,例如某一数 据流可能沿着图2中所示的灰色曲线这一路径完成数据处理。
[0042] 基于图2所述的多核并行处理架构,本实施例提出了一种用于数据包并行处理的 负载均衡方法,包括下列步骤:
[0043] 步骤1 :接收网络数据包,基于网卡负载均衡或者操作系统负载均衡技术将数据 包分发到流水线第一级的各个线程。
[0044] 步骤2 :流水线第一级的各个线程完成本级数据处理,将所得的中间数据包传递 给第一级负载均衡模块(负载均衡模块Level1)。为便于描述,将第一级线程完成本级数 据处理后所得到的中间数据包称为第一级中间数据包。
[0045] 步骤3 :第一级负载均衡模块接收到任意一个第一级中间数据包时,根据第二级 的各个线程的负载状态,基于负载均衡算法选择一个第二级线程,将该第一级中间数据包 传递给所选的第二级线程。
[0046] 步骤4 :第二级的各个线程完成本级数据包处理,将所得的中间数据包传递给第 二级负载均衡模块(负载均衡模块Level2)。为便于描述,将第二级线程完成本级数据处 理后所得到的中间数据包称为第二级中间数据包。
[0047] 步骤5 :第二级负载均衡模块接收到任意一个第二级中间数据包时,根据第三级 的各个线程的负载状态,基于负载均衡算法选择一个第三级线程,将该第二级中间数据包 传递给所选的第三级线程。
[0048] 上述步骤3和步骤5中,负载均衡模块可以是独立的软件模块,也可以是一个功能 函数,当负载均衡模块是一个功能函数时,处理线程在完成本级数据处理后,通过调用负载 均衡函数将所输入的中间数据包转发到合适的下一级处理线程的缓冲队列中。
[0049] 上述步骤3和步骤5中,负载均衡算法可以直接使用现有网卡负载均衡或者操作 系统负载均衡技术中所采用的负载均衡算法。这种方案下,由于设置了多级负载均衡模块, 使得能够针对应用程序内部具体结构和实时负载状态及进行负载均衡,因此,在各个负载 均衡模块直接使用现有的负载均衡算法时,也能够产生一定的优化效果,例如降低各级线 程的缓冲队列长度,使同一级的各处理线程的流量负载更加均匀等。
[0050] 如前文所述,流水线并行处理构架中具有网络流量的动态性和处理线程的异构性 这两个特点,而以静态Hash算法为代表的现有负载均衡算法并未对此进行优化。因此,在 本发明的一个优选实施例中,进一步给出了一种EWMA负载均衡算法,任意一级的负载均衡 模块均可通过EWMA负载均衡算法为中间数据包选择所要发往的下一级线程,下面对其做 详细描述。
[0051] 图3示出了本发明一个优选实施例中的EWMA负载均衡算法的流程图,该流程包括 下列步骤:
[0052] 步骤101 :中间数据包输入负载均衡模块。本步骤中,中间数据包可以是任意一级 的中间数据包,负载均衡模块则是与中间数据包相应级别的负载均衡模块。
[0053] 步骤102 :通过在整个系统的全局流表中查找该中间数据包所属的数据流,判断 当前中间数据包是否属于一条新的网络数据流,如果判断为是,则执行步骤103,如果判断 为否,执行步骤105。其中,全局流表中记录已接收和处理过的所有数据流及其所对应的各 个级别的处理线程。如前文所述,每个处理线程具有一个缓冲队列,只要记录处理线程的级 别和在该级别中的缓冲队列序号,即可唯一的确定一个处理线程。因此,用各个级别的缓冲 队列序号,即可表示出数据流在流水线中的处理路径。本实施例中,全局
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1