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

文档序号:9304477阅读:637来源:国知局
一种用于流式数据并行处理的负载均衡方法
【技术领域】
[0001] 本发明涉及流式数据并行处理技术领域,具体地说,本发明涉及一种用于流式数 据并行处理的负载均衡方法。
【背景技术】
[0002] 流式数据处理包括:网络数据包处理(下文中简称为数据包处理)、视频流处理、 文本处理、消息处理等。网络规模和服务复杂度不断增长,传统的流式数据处理技术已经无 法满足高速网络带来的性能需求,基于多核处理器的流式数据并行处理技术的应用和推广 已经成为了新的趋势。下面以数据包处理为例简要介绍基于多核处理器的流式数据并行处 理技术。图1示出了现有技术中一个通用的数据包多核并行处理架构。参考图1,在这个数 据包多核并行处理架构中,每个处理器核上都绑定了一个处理线程,所有处理线程共同构 成了一个并行流水线布局。输入的数据包从流水线第一级开始,经过层层处理和中间调度, 最终抵达流水线最后一级。在实际应用中,系统的流水线级数和每级流水线的线程个数通 常都是可调整的。
[0003] 另一方面,在并行处理技术领域,为了让数据包处理任务充分并行化,每个处理线 程的数据包负载需要尽可能均衡,否则会出现只有部分处理线程繁忙而其他处理线程空闲 的情况,造成处理资源的浪费。此外,负载不均衡还有可能造成部分处理线程的过载(例如 数据包队列溢出)。所谓负载均衡,就是一个将待处理的负载按照"处理难度"进行划分,然 后按照处理线程的"处理能力"进行均匀分配的过程。现有的网络流量负载均衡方法主要有 两类,第一类是在数据包的源头一一网卡上进行硬件负载均衡,第二类是在网卡与数据包 处理应用之间的中间平台一一操作系统上进行软件负载均衡。下面分别介绍这两种方法。
[0004] (1)网卡负载均衡
[0005] 数据包处理设备常用的高性能网卡(NetworkInterfaceCard,NIC) -般都带有 "多队列"(multi-queue)功能以支持多核并行处理。当网卡在接收数据包的时候,首先通 过一个过滤器将不同的数据包送到不同的接收队列(RX-queue),而这些接收队列都是与不 同的处理器核心绑定的,这样流量就分散到了不同的处理器核进行处理。这种在网卡层面 所进行的多核流量负载均衡机制通常被称为RSS(ReceiveSideScaling,接收端伸缩)。
[0006] 在RSS机制下,网卡使用一个Hash函数对输入数据包头部的某些字段计算Hash 值,并将结果取余后去索引一个间接转发表(IndirectionTable),最终匹配到一个特定的 队列去处理。常见的RSS硬件实现中每个间接转发表都有128个条目,每个条目中存储着一 个队列号。一些高级的网卡还允许基于可编程的过滤器来分配数据包,例如将端口号为80 的TCP包导向Web服务器所在的处理器核对应的队列。这种N元组过滤器可以通过ethtool 工具的"--config-ntuple"选项进行配置。用于计算Hash值的字段通常是可以唯一标识 一条网络流的五元组(源IP地址、目的IP地址、源端口、目的端口、传输层的协议类型),这 样同一条网络流的数据包就能够被分配到同一队列去处理,保证处理的局部性和有序性。
[0007] 基于RSS机制的网卡负载均衡,在硬件层面上实现了网络流量与多核之间的负载 分配,并且具备简单的处理逻辑和较高的处理性能。然而,网卡负载均衡也存在着很明显的 局限性。一方面,后端的数据包处理应用对于网卡硬件来说是不可见的,因此网卡负载均衡 无法考虑到数据包处理应用的特殊需求;另一方面,RSS机制只支持静态的Hash均衡算法, 在动态的网络流量下很容易造成负载不均衡。
[0008] (2)操作系统负载均衡
[0009] 操作系统负载均衡有两种情况,第一种是在网卡只支持单队列时替代RSS实现多 核负载均衡,另一种则是在已有的多队列基础上,为多队列中的数据包和处理器核心进行 重新映射。其中,第二种情况下,考虑到操作系统能够获取到数据包处理应用的相关信息, 因此进行重新映射可以提升实际的负载均衡效果(例如把数据包重新分配到其对应的程 序所在的处理器核)。
[0010] 基于操作系统的网络流量负载均衡在最近几年已经得到了广泛应用。以Linux 操作系统为例,其较新版本(2.6.35以后)的网络协议栈中包含了两种网络流量多核负载 均衡机制,分别称为RPS(ReceivePacketSteering,接收端数据包引导)和RFS(Receive FlowSteering,接收端网络流引导)。从实现逻辑上看,RPS就是RSS的一种软件实现,而 RFS则在RPS基础上考虑了应用程序的局部性,以实现更好的实际负载均衡效果。
[0011] 相比网卡负载均衡来说,在操作系统层面实施负载均衡更加灵活,例如用户可以 自定义Hash函数和计算覆盖的字段等。然而,操作系统负载均衡也无法从根本上避免与网 卡负载均衡类似的两点局限性。一方面,虽然操作系统作为宿主能够了解运行在其中的数 据包处理应用的某些特性(如线程数目),但由于操作系统内核与应用程序是隔离的,无法 针对应用程序内部具体结构进行负载均衡。另一方面,从实现机制上看,操作系统负载均衡 的两种机制RPS和RFS,与RSS类似也都是通过计算数据包的Hash来分配到特定的队列去 处理,这种分配方式有时并不适合网络数据流等流式数据的处理。

【发明内容】

[0012] 因此,本发明的任务是提供一种特别适合于流式数据并行处理的负载均衡解决方 案。
[0013] 根据本发明的一个方面,提供了一种用于流式数据并行处理的负载均衡方法,所 述流式数据并行处理基于并行流水线实现,所述并行流水线包括N级处理线程,每个处理 线程与一个处理器核绑定,其中N为所述并行流水线的级别数目,令i的初始值为1,所述用 于流式数据并行处理的负载均衡方法包括下列步骤:
[0014] 1)对于任意一个第i级处理线程,该第i级处理线程首先完成本级的数据处理,得 到第i级中间数据包;
[0015] 2)根据各个第i+1级处理线程的负载状态,基于负载均衡算法将所述的第i级中 间数据包发送到一个第i+1级处理线程的缓冲队列;
[0016] 3)将所述第i+1级处理线程视为第i级处理线程重新执行步骤1),直至第N级处 理线程完成本级的数据处理得到最终数据。
[0017] 其中,所述步骤2)中,所述第i+1级处理线程的负载状态根据该第i+1级处理线 程的缓冲队列长度得出。
[0018] 其中,所述步骤2)中,所述第i+1级处理线程的负载状态根据该第i+1级处理线 程的缓冲队列长度的EWMA值得出。
[0019] 其中,所述步骤2)中,七时刻的所述£¥1仏值£1=¥*1^+(1-¥)4 11,其中1^表 示t时刻的缓冲队列长度,Et :表示t-1时刻的EWMA值,w表示平稳因子。
[0020] 其中,所述步骤2)中,t时刻的所述£¥熟值£1=Lt?l+Et々>1 ;其中">>"表示右 移运算。
[0021] 其中,所述步骤2)还包括:将所述的第i级中间数据包发送到具有最小EWMA值的 第i+1级处理线程的缓冲队列。
[0022] 其中,所述步骤2)包括下列子步骤:
[0023] 21)接收一个第i级中间数据包;其中,i= 1,2…,N-1 ;
[0024] 22)在全局流表中查找该第i级中间数据包所属的数据流,如果未找到,则执行步 骤23),如果找到,则直接根据所述全局流表的记录将所述的第i级中间数据包发送到相应 的第i+1
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1