CN104519125A - 对于拓扑变化有弹性的分布式按次序负载分布 - Google Patents

对于拓扑变化有弹性的分布式按次序负载分布 Download PDF

Info

Publication number
CN104519125A
CN104519125A CN201410729357.3A CN201410729357A CN104519125A CN 104519125 A CN104519125 A CN 104519125A CN 201410729357 A CN201410729357 A CN 201410729357A CN 104519125 A CN104519125 A CN 104519125A
Authority
CN
China
Prior art keywords
stream
server
bloom filter
grouping
code reassignment
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410729357.3A
Other languages
English (en)
Other versions
CN104519125B (zh
Inventor
R·珀尔曼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN104519125A publication Critical patent/CN104519125A/zh
Application granted granted Critical
Publication of CN104519125B publication Critical patent/CN104519125B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/1034Reaction to server failures by a load balancer
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/1027Persistence of sessions during load balancing

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Computer And Data Communications (AREA)

Abstract

用于以对***拓扑变化有弹性的方式分配网络负载的方法、装置和***。在多个负载拆分器上实施分配函数及相关联操作,以使得如果负载拆分器成为无效的,则另一个或其他负载拆分器可以转发对应于以前由无效的负载拆分器处理的流的分组,而无需要求在负载拆分器之间保持流状态同步。通过***拓扑变化,以将用于相同流的分组分配给相同服务器的方式实施分配函数,解决了当服务器故障和/或离线时,及当这种服务器或替换服务器恢复在线时的情形。经由使用被标记以追踪重分配流的重分配流列表和/或布隆过滤器而部分地促进该技术。还公开了一种新颖的布隆过滤器再循环方案。

Description

对于拓扑变化有弹性的分布式按次序负载分布
背景技术
自从引入微处理器以来,计算机***已经变得越来越块。大致按照摩尔定律(基于预测集成电路上的晶体管数量每两年加倍的公司共同创始人Gordon Moore的1965年出版物),在几乎三十年中,速度增大以相当均匀的速率急速上升。同时,存储器和非易失性储存设备的尺寸也稳定地增大,使得许多当前个人计算机比仅仅10-15年之前的超级计算机更强大。另外,类似地见证了网络通信速度的极大增加。
处理器速度、存储器、储存设备和网络带宽技术中的增大导致了具有不断增大的容量的网络的扩建和部署。最近,诸如由亚马逊(例如,亚马逊弹性计算云(EC2)和简单储存服务(S3))和微软(例如,Azure和Office365)所提供的基于云的服务的引入,导致了用于公用网络基础结构的额外的网络扩建以及大容量数据中心的增加,用以支持使用专用网络基础结构的这些服务。另外,在不久的进来,预期新一代(例如4G)移动网络数据服务会相当大地影响陆线网络的使用。这些及其他考虑的结果是预期计算机网络的使用在可预见的未来以高速继续增长。
诸如电子商务网站、社交网站、内容托管网站和新闻网站之类的用于云服务及其他在线网站的公共架构使用多层架构,所述多层架构具有耦合到服务器(诸如应用服务器和数据库或储存服务器)的一层或多层的网络服务器前端。网络服务器层自身可以使用负载分配方案,其以扇出模型方式使用多个级。负载分布还通常部署在网络服务器与应用服务器层之间。
在技术上,网络服务器应被更准确地称为HTTP(超文本传输协议)服务器。HTTP采用使用客户机-服务器模型的请求-应答协议。HTTP是无状态协议,最初实施它以便在单一应答对后关闭连接。在HTTP 1.1中,增加了保持活动机制,其中,连接可以用于多个请求;这些连接被称为“持久”连接。另外,HTTP 1.1引入了分块传输编码以支持使用持久连接的数据流。
每一个服务器都具有其自身的网络地址,公共网络服务器具有公共因特网协议(IP)网络地址,其被按照使用32位寻址方案的IPv4或者按照使用128位寻址方案的IPv6进行编码。域名***(DNS)用于将网站URL映射到其公共IP地址。典型地,对于诸如www.facebook.com和www.youtube.com的网站的主页,仅有单一公共IP地址。为了处理每天接收到的上百万的请求,这些网站实施负载分布方案,根据这个方案,使用扇出的一级或多级在网站的专用网络内部路由每一个请求。
早期的负载分布方案采用负载平衡器等,其使用简单算法以便跨越多个服务器而平衡输入请求。例如,鉴于原始HTTP请求/应答预期,采用了循环法方案等,根据这种方案,如果存在1对n负载平衡器,则每个服务器就会处理每一第n个请求。根据在树状层级结构中将低层应用服务器耦合到高层服务器的架构,仅可以经由单一路由路径访问给定应用服务器。因而,对于这些架构中的流连接,沿着相同路径路由对应于主机的专用网络内的连接的所有分组。
与专用IP网络相反,因特网由大量相互连接的公用网络组成,并且采用极其大量的交换元件,例如交换机、路由器、桥接器等。根据因特网的基本概念,可以使用不同路线在相同源与目的地端点之间路由分组,因而提供了如果一些交换元件成为被禁用情况下的弹性,并实现了对网络拓扑的动态变化。但对于流连接等,在路线的公用因特网部分和路线的专用网络部分上,沿着相同路线路由分组是有利的。
通常优选的是,与流相关联的分组按次序到达目的地。为了便于这样,典型地将路由器和交换机配置成对给定流选择相同的下一跳。类似地,通常优选地,负载平衡器和负载拆分器被配置成将属于相同流的分组发送到相同的服务器。
附图说明
通过结合附图参考以下的详细说明,会更易于意识到本发明的前述方案和许多伴随优点,并且会更好地理解它,在附图中,除非另外指出,否则在贯穿各个视图中相似的参考标记指代相似的部分:
图1a是示例性***架构的示意图,所述***架构采用多个负载拆分器来将分组分配给多个服务器,而服务器又反过来提供对到由储存层中的设备存储的数据的访问;
图1b显示了图1a的***拓扑中的变化,其中一个服务器成为不可用的;
图1c显示了图1a和1b的***拓扑中的变化,其中两个服务器成为不可用的;
图1d显示了***拓扑通过使得不可用服务器之一恢复开机而从图1c的配置返回到图1b的配置。
图1e显示了其中由备用服务器代替有故障的服务器的***拓扑;
图1f显示了图1c的***拓扑中的变化,其中负载拆分器之一变为不可用的;
图2显示了图1a的***架构的变化,其中,耦合到负载拆分器的服务器经由LAN连接到应用服务器层中的应用服务器;
图3a-3c示出了采用多个哈希算法和一维位向量的布隆过滤器如何操作;
图4a-4c示出了采用多个哈希算法和各自的位向量的布隆过滤器如何操作;
图5显示了根据一个实施例的用于一对布隆过滤器的位向量数据的时间流,用于示出采用当前和下一布隆过滤器的布隆过滤器方案的实现方式;
图6是示出根据一个实施例的有利于根据图1a-1f中所示的实施例的通用分组分配/再分配方案的操作和逻辑的流程图;及
图7是示出被配置为实施本文公开的实施例的方案的装置的架构的示意图。
具体实施方式
本文说明了用于以对于拓扑变化有弹性的方式来分配网络负载的***、装置、方法的实施例。在以下说明中,阐述了许多具体细节,例如负载拆分器的示例性实施例,以提供对本发明的实施例的透彻理解。但相关领域技术人员会认识到,可以无需一个或多个具体细节,或者借助其他方法、组件、材料等来实践本发明。在其他实例中,没有详细显示或说明公知的结构、材料或操作以避免使得本发明的方案模糊不清。
在本说明书通篇中对“一个实施例”或“实施例”的提及表示结合实施例说明的特定特征、结构或特性包括在本发明的至少一个实施例中。因而,短语“在一个实施例中”或“在实施例中”在本说明书通篇中多个位置的出现不一定全都指代相同的实施例。而且,可以在一个或多个实施例中以任何适合的方式组合特定特征、结构或特性。
如上所述,在网络中通常沿相同路径来路由与相同流相关联的分组。更具体地,也可以称为负载拆分器(本文所使用的)的负载平衡器被配置为将属于相同流的分组转发到相同的服务器。对于将前端服务器连接到其他层上的服务器的树状层级而言,应总是将与给定服务和相同流相关联的分组发送到用于实施该服务的相同服务器。例如,基于云的数据上载或下载可以沿包括前端网络服务器、被配置为服务数据文件访问请求的应用服务器和在其上存储数据的储存服务器的路径来路由分组。可选地,可以在相同服务器上实现网络服务器和应用服务器功能。结合数据文件请求,打开持久连接,使用运行在应用服务器上的应用程序并结合使用在网络服务器上实施的HTTP数据分块而从储存服务器流送数据或向储存服务器流送数据。由于HTTP数据分块实际上涉及多个请求/应答,每一个请求都由相同的网络服务器和应用服务器来服务。
为了支持使用相同的路由/转发路径,当前使用的有两个基本机制。本文所述的这些机制适用于负载拆分器,但是可以由其他网络元件(例如交换机)来使用类似的机制。根据第一机制,负载拆分器为每个当前流保持状态:(流标识符、选择来转发流的服务器)。这存在两个问题;一个是,尤其是借助分布式拒绝服务(DDOS)攻击,该状态或许变为耗尽的。另一个问题是如果服务器选择是任意的(即,在流开始时选择最小负载的服务器),如果网络路径改变且将流路由到不同负载拆分器,则第二负载拆分器就会无法获知由第一负载拆分器所做出的选择(在负载拆分器之间没有极为昂贵的状态同步)。
第二个机制采用分组中选定字段值的哈希,以做出无状态确定选择。这允许另一负载拆分器计算相同的选择。但如果服务器组变化,就会不同地哈希处理所有流,从而不必要移动流(不仅仅是前往现在的废弃选择的流)。
根据本文所公开实施例的方案,解决了前述两个问题,实现了网络拓扑改变,同时确保由指定给给定请求的原始应用服务器或者其他服务器服务于该请求以进行完成。另外,该技术是可缩放的,使得多个负载拆分器可以实施相同的分配逻辑,如果这些负载拆分器之一发生故障,则另一负载拆分器可以接管处理由故障的负载拆分器先前处理的流的分配。此外,这可以以在负载拆分器之间无需昂贵的状态同步的方式来完成。
图1a示出了***100,包括n个运行服务器S(标记为S1、S2、……、Sn)和两个备用服务器102-1与102-2,其耦合到三个负载拆分器L(标记为L1、L2和L3)。每一个服务器S和备用服务器102还耦合到包括多个大容量储存设备106的储存层104和储存访问服务器或前端等(未示出),其提供对存储在大容量储存设备上的数据的访问。负载拆分器L1、L2和L3从***外部的客户端经由适用的网络基础结构(为了简单和清楚而没有示出)接收输入请求108。例如,***100可以是基于云的储存服务的部分,用户使用URL门户经由因特网进行访问。在由图2中的***200所示的另一配置中,服务器S包括网络服务器,其经由局域网(LAN)103耦合到应用服务器层105,应用服务器层105包括多个应用服务器107。另外,如果在应用服务器层或者其他中间层中实现服务器S,则可以从诸如前端网络服务器层(未示出)的***100中的另一层接收输入请求108,或者否则就在***架构中的层之间放置多个负载拆分器。
每一个负载拆分器L都包括分配逻辑110,其被配置为将输入请求路由/转发到服务器S。更具体地,配置分配逻辑110,以使得将对应于给定流的所有分组转发到用于服务相关联请求的相同服务器S,包括通过***拓扑变化,除非在流期间服务器变为被禁用的或者变为不可用的。根据常用术语,将可用于支持服务的服务器称为“在线”、“开机”或“活动”,而将不可用的服务器称为“离线”或“停机”或禁用的、有故障的等。其他服务器可以处于备用,同时在技术上为在线且运行中(尽管以减小的级别),但不可用于服务请求。出于在这个详细说明及以下权利要求书中的目的,将运行中的、在线的和/或以其它方式可用于服务请求的服务器称为“可用的”服务器,而将停机的、离线的、被禁用的和/或以其它方式不可用于服务请求的服务器称为“不可用的”服务器。
根据图1a中的***100的配置,n个服务器是可用的,而两个服务器是离线的处于备用模式中,由“Sb”标记。因此,分配逻辑110采用n路确定性分配函数(例如,在一个实施例中是n路哈希函数)来将输入请求分配到n个可用服务器。在所示的示例中,在每一个输入分组报头中的字段的元组上进行哈希处理,例如用于IP分组报头的公知的5元组哈希。这个方案通常称为k元组哈希。也可以使用其他公知的哈希函数。出于说明性目的,随后使用n作为除数,计算k元组哈希结果的余数R,其中,R识别将分组路由到哪个服务器S。相应的查找表(未示出)用于将分配函数结果(例如余数R)映射到相应服务器S的地址,随后将分组转发到该服务器。由于用于属于给定流的所有分组的元组字段值会是相同的(借助定义,根据标准流分类方案),所以哈希计算和余数结果同样总是相同的,为相同流中的所有分组产生相同的余数R。
图1b显示了***100的配置,其中服务器S2成为无效的或者成为不可用的,由“X”标记。结果,当前有n-1个服务器S可用。根据传统方案,将重新配置每一个负载拆分器L1、L2和L3中的分配逻辑,以将新的输入请求分配到(当前)n-1个可用服务器。例如,这可以使用与图1a中所示的相同的哈希函数来完成,其中,以n-1代替模数n。而这通过在n-1个可用服务器S中拆分输入请求108,而有利于负载平衡目的,(n-1)路确定性哈希函数可以为给定流产生与为n路确定性哈希函数所获得的结果不同的结果R。
前述是存在问题的,因为会将配置变化后的输入分组不必要地转发到不同服务器。本应前往保持开机的服务器的流仍会被路由到那些服务器,但本应路由到不可达的服务器的流会被重新定向到不同的服务器。此外,一旦服务器恢复,从该服务器重新定向的流会保持重新定向到替换服务器,直到流完成。典型地,将对应于在前请求的分组转发到不同服务器会导致请求的服务不得不重新开始,或者至少产生额外的开销,这取决于所请求的服务的类型。尽管有可能构造***以在无需请求重新开始的情况下支持中游传输,但这引起大量开销(例如状态同步、负载拆分器上额外的状态信息等),并且不可缩放。相反,实施了技术,以确保不管配置如何变化,都将与给定流相关联的分组转发到相同服务器,只要该服务器在整个流中保持可用。根据传统实践,这通过使用辅助信息(例如流识别和映射、流状态数据等)和逻辑来完成,这会在DDOS攻击下被压制和/或增大负载拆分器复杂性和成本。
根据图1a-1c中所示的实施例的方案,使用了不同的成本较低的方案。不是将确定性分配函数从n路哈希函数改变为(n-1)路哈希函数,而是在第一分配迭代期间使用相同的n路哈希函数。在一个实施例中,每一个负载拆分器L保留服务器S及其可用状况的列表。如果n路分配函数的结果导致到可用服务器S的映射(称为“命中”),则将分组简单地转发到该服务器。但如果n路分配函数导致到不可用服务器的映射(称为“未命中”),例如图1b中的服务器S2,则执行第二(n-1)路确定性分配函数,其会导致将分组分配给可用的n-1个服务器S之一。如图1c进一步所示的,如果(n-1)路分配函数导致另一个未命中,则执行第三(n-2)路分配函数。如果(n-2)路分配函数导致未命中,则执行第四(n-3)路分配函数,以此方式继续,直至分配函数结果映射到可用服务器。
前述方案确保了将对应于现有流的分组转发到借助对应于图1a中所示的原始***100配置的n路分配函数将流原始分配到的相同服务器(只要该服务器可用)。此外,这在无需要求负载拆分器保留传统方案所需的流状态的级别和映射信息的情况下实现了这个结果。另外,这个方案对于DDOS攻击更具有弹性,因为它无需为每一个流保持相同级别的状态信息。
尽管图1a-1c中所示的和以上论述的技术实现了在无需相当大的流级别追踪信息的情况下,将分组流分配给相同服务器,但它没有解决当由于(以前)不可用服务器恢复在线(因而再次成为可用的)而引起可用服务器的数量增大时的分配。例如,如果图1b和1c中的无效服务器S2或者S4的任意一个恢复在线时,会发生这种增大。
假定服务器S2恢复在线,并且可再次用于服务输入请求。在服务器S2不可用时,一个或多个负载拆分器L(如果适用的话)将正常情况下哈希处理到服务器S2(假定原始的n个服务器可用)的流分配给一个或多个其他服务器S。期望的是,负载拆分器104能够开始将对应于新请求的流分配给服务器S2,而不是移动在服务器S2不可用时重新分配给另一服务器的现有流。因此,每一个负载拆分器104应能够识别它在服务器S2不可用时分配给其他服务器的流,并实施这样的流分配机制:其将对应于重新定向的流的分组转发到在服务器S2不可用时将每一个重新定向的流所重新定向到的服务器,直至该流完成。如本文所用的,将转发到其他服务器的流称为“重分配的”流,因为它们被转发到与由分组的分配函数的初始迭代所识别出的服务器不同的服务器(换句话说,分组必须从不可用服务器重分配给另一个服务器)。
根据各个实施例,每一个负载拆分器保留重分配流的一个或多个列表,使用一个或多个布隆过滤器,或者使用二者的组合,其中,使用具有预定或可变尺寸的列表或表格,随后在没有更多空间来将额外重分配的流添加到列表/表格时,使用布隆过滤器。当流哈希处理到服务器S2时,处理分组的负载拆分器核对以查看它是否对应于在服务器S2不可用时重分配给另一服务器S的流的列表中的流(或者由布隆过滤器标记的流)。如果流在列表中,那么更新与何时最后见到来自流的分组相关联的计时器,并按照重分配的结果重新定向流。对于下述的当前/下一个布隆过滤器方案,如果流在当前布隆过滤器中,那么将相应的位设定在下一个布隆过滤器中,并重新定向流。如果流既不在列表中也不在布隆过滤器中,那么将它发送到由分配函数所识别的服务器。
假定***100配置是图1d中所示的,而在前配置(在服务器S2恢复在线之前)是图1c中所示的。在保留重分配流列表114和/或布隆过滤器116的负载拆分器L1处接收新的分组112。在所示的实施例中,重分配流列表114为每一个服务器S,或者可任选地,为近来不可用的每一个服务器存储重分配流条目的列表。在一个实施例中,重分配流由它们的FlowID识别。通常,可以使用用于定义并确定FlowID的几个公知的技术的任意一个来确定用于给定流的FlowID,诸如在多个分组报头字段值上执行哈希函数,例如在前述n元组哈希中所使用的,或者简单地串联多个字段值。在一个实施例中,哈希函数与用于流分配的类似或相同,但没有模数运算。例如,在一个实施例中,分配函数是在分组的相关联FlowID上执行的简单模数运算。如下所述的,典型地在分组分类过程中执行用于分组的FlowID。此外,可以缓存分组,以使得可以取回它们的(已经确定的)FlowID,而无需在流分配函数中执行类似的哈希函数。
继续分组112的处理,假定在分组112上的n路分配哈希处理导致将分组转发到不可用的服务器S4。如前所述,将执行第二(n-1)路分配哈希处理,如有必要则重复,直至分配哈希处理导致将分组转发到可用服务器。现在假定在分组120上的n路分配哈希处理导致将分组转发到服务器S2。由于这个服务器近来不可用,所以可以有在重新哈希处理的流列表114中的一个或多个条目或者布隆过滤器116之一中的标记,其识别如果服务器S2可用时会分配给它的、但需要一个或多个重新哈希处理的一个或多个以前的流,导致将一个或多个流被重分配给不同的一个或多个服务器。
考虑到与重分配流相关联的分组的可能性,在一个实施例中,为每一个接收到的分组执行重分配流列表114的查找。由于重分配流列表可以存储为表格,所以可以使用例如对应于服务器S2的ServerID执行针对表格的相应查询,ServerID是针对包含ServerID值的索引(或者简单地,包含ServerID值的列)而查询的,或者计算或取回FlowID,并用作用于查找的输入值。取决于恢复开机或被代替的以前不可用服务器的数量,可能需要执行分配函数的额外迭代。以下参考图6中的流程图600论述用于处理多个服务器可用性配置的更普遍过程。
响应于服务器故障等(例如,为了维护、重配置等而离线),一般惯例是用备用服务器代替有故障的或不可用的服务器。图1e中示出了这种代替的示例,其中,故障服务器S2由备用服务器102-1代替。通常,在服务器变为不可用的时间与替换服务器被配置和开机并运行和使其可用以接管由不可用服务器提供的服务及其他操作的时间之间会存在某一时间段。在这个时间段,可以将分组流重分配给其他服务器,如前所述。但不是故障服务器(例如服务器S2)恢复开机并使其可用以再次接收流,而是那些流现在会转发到替换服务器。
在一个实施例中,希望服务器替换的实现方式对于与实际中同样多的***是透明的。在图1e所示的实施例中,保留了服务器映射表120,其将ServerID映射到物理或虚拟服务器及其相应的IP地址。可任选地,可以将服务器映射到用于使用层2转发的***的MAC地址。从分配函数的一个实施例的角度来看,函数输出整数,使用该服务器的IP地址将流分配到与所述整数相关联的服务器。通过更新要被替换的服务器的映射信息,以使得ServerID现在映射到替换服务器的IP地址,可以部分地有利于服务器替换。如图1e所示的,用于ServerID 2的IP地址从分配给服务器S2的10.0.10.102更新为分配给替换服务器102-1的10.0.10.110。
如上所述,在一些实施例中,布隆过滤器用于追踪被重分配的流。布隆过滤器是空间高效的数据结构,其用于概率性地测试元素是否是集合的成员。最简单形式的布隆过滤器采用单一哈希算法,其用于在适用的位位置为元素的单行或列产生位值,通常称为一维位向量。另一个布隆过滤器方案采用多个哈希算法,其具有映射到一维位向量的位结果。根据更高级的布隆过滤器,用于多个哈希算法中每一个的位向量存储在各自的位向量中,其也可以称为多维位向量。
在图3a-3c中显示了使用具有映射到一维位向量中的位值的多个哈希算法来实施的布隆过滤器的示例。在这个示例中,存在三个哈希算法,示为H1(x)、H2(x)和H3(x),其中,元素x是输入值。对于给定输入x1,计算每一个哈希算法H1(x1)、H2(x1)和H3(x1)的结果,并在对应于哈希结果的位位置标记(例如设置为1)相应的位。例如,如图3a所示的,哈希函数H1(x1)的结果是26,H2(x1)是43、H3(x1)是14。因此,设置在位置26、43和14的位(例如将位值从“0”(清除)翻转为“1”(置位))。随后为后续输入xi值重复这个过程,结果得到图3b中所示的位向量,其中,设置的位以灰色和黑色示出。图3b还示出了对于输入x2的命中的结果(以黑色示出的位)。通过使用x2作为输入值来应用每一个布隆过滤器的哈希算法来验证命中(也称为对元素x2的查询),随后确认对于每一个哈希算法结果,在位位置是否存在位设置。例如,如果对于每一个哈希算法结果的位置存在位设置,则结果就是命中,表示元素xk对应于应用了哈希算法并设置了相应位的以前输入值xj的概率很高(取决于位向量的稀疏性)。
图3c显示了对于输入x3的未命中的结果。在此情况下,没有设置对应于哈希算法结果的位向量中的一个或多个位位置。图3b和3c示出了布隆过滤器所固有的几个特点。首先,布隆过滤器可能产生错误肯定。这是因为通过相对于多个输入x评价哈希算法所形成的位向量是对于每一个输入x的单个结果的合并。因此,可以存在设置位位置的组合,该设置位位置对于在针对布隆过滤器的位向量应用时的测试输入xi产生命中结果,而输入xi不用于产生位向量。这称为错误肯定。布隆过滤器的另一个固有特点是它们不产生错误否定。如果在应用于布隆过滤器的位向量时的输入xi的评价得到未命中,则必然会知道xi不是以前布隆过滤器输入的集合的成员。
图4a-4c示出了为每一个布隆过滤器哈希算法保留单独的表格行(和一维位向量)的布隆过滤器的示例。尽管将每一行示出为具有相同的长度,但可以是不同哈希算法会产生不同长度的位向量。在针对输入x值(例如图4a中针对x1)评价哈希算法时,在对应于哈希算法结果的表格行的位位置处设置相应的位。如同以前一样,输入x2导致命中(无论是真实命中还是错误肯定),而输入x3导致未命中。
由于哈希算法对于两个或更多个不同输入可以产生相同的结果(因而在布隆过滤器位向量中设置相同位),所以不可能在保证不清除对应于其他输入结果的位的同时,去除单个集合成员(通过清除它们的位)。因而,传统布隆过滤器技术是单向的:仅对应于将额外成员添加到集合,而将额外的位添加到位向量。
添加额外集合成员的问题是减小了位向量稀疏性,这导致错误肯定的增加,如上所述。同时,期望在持续的基础上继续添加新的集合成员,以有效地存储便于确定是否重分配流的标记。根据采用布隆过滤器的一些实施例的方案,提供了一种新颖的技术,其实现了布隆过滤器追踪重分配的流,同时保持布隆过滤器稀疏。
更具体地,如下实施技术的一个实施例。参考图5,为根据传统方案会使用的每一个单一布隆过滤器保留两个布隆过滤器。例如,在一个实施例中,存在每个服务器S保留一对布隆过滤器。布隆过滤器的目的是保持追踪从服务器S重新定向到另一个服务器的重新定向的流。根据一个方案,以循环方式交换布隆过滤器的状态,一个布隆过滤器的状态称为“当前”布隆过滤器,而另一个布隆过滤器的状态称为“下一个”布隆过滤器。当服务器S停机时,随着重分配新的流,在当前和下一个布隆过滤器中设置相同的位(或者将相同的位添加到下一个布隆过滤器,用于属于在当前布隆过滤器中已经标记的流的分组),同时仅针对当前布隆过滤器应用命中测试。当服务器S开机时,当前布隆过滤器仅用于测试分组是否属于重新定向的流;不将新的位添加到当前布隆过滤器。只有在分组属于进行中的重新定向的流时,才在下一个布隆过滤器中设置用于该分组的布隆过滤器位,如以下进一步详细解释的。
最初,清除在第一当前布隆过滤器和第一下一个布隆过滤器中的所有位,如图5中在时间t0所示的。正是对于这些第一当前和第一下一个布隆过滤器,随着在第一时间段中处理新的重分配流,将新设置位(以灰色示出)仅添加到第一当前布隆过滤器。此时(时间t1),在如由在时间t1和t2之间的时间差所示的第二时间段中,将新的设置位添加到第一当前和第一下一个布隆过滤器。在一个实施例中,第一和第二(及随后的)时间段相同。以黑色显示在第二时间段中已经添加到第一当前和第一下一个布隆过滤器中的位向量的设置位。由于在比第一下一个布隆过滤器更长的时间段中将设置位添加到第一当前布隆过滤器中的位向量(在下一个和当前布隆过滤器中的填充位在时间上偏移),所以在第一当前布隆过滤器(及随后的当前布隆过滤器)中的位向量会总是不如第一下一个布隆过滤器(及随后的下一个布隆过滤器)中的稀疏,除非在给定循环周期中没有将设置位添加到任一布隆过滤器。
在此阶段,如在时间t2+所示的(“+”指示刚刚在时间t2之后),将第一下一个布隆过滤器提生成为第二当前布隆过滤器,而第一布隆过滤器再循环并再用作第二下一个布隆过滤器。结合当前布隆过滤器的再循环,清除其位向量。如果在时间t1和t2之间的时间段中已经将设置位添加到第一当前和第一下一个布隆过滤器,那么当第一当前布隆过滤器再循环时,新的当前布隆过滤器位向量将包括设置的至少一些位,而新的下一个布隆过滤器位向量将不包括设置位,如图5所示。
随后在进行中的基础上重复前述布隆过滤器提升和再循环过程,当前布隆过滤器再循环并以下一个布隆过滤器代替。例如,借助在时间t3和t3+所示的布隆过滤器位向量,在图5中示出了从第二当前与下一个布隆过滤器到第三当前与下一个布隆过滤器的序列。
使用重分配流列表和布隆过滤器的组合可以提供优于单独的重分配流列表或者布隆过滤器的优点。与借助布隆过滤器不同,由于重分配流列表中的每一个条目都对应于各自的重分配流,所以错误肯定是不可能的。如上所述,布隆过滤器为验证条目是否是由布隆过滤器位向量数据所标记的条目集合的成员提供了极为有效的机制。通过组合两个方案,重分配流列表可以用于主要命中测试,如果空间可用则将FlowID或其他标记添加到重分配流列表,同时布隆过滤器可以用于溢出情况(例如,当重分配流列表空间耗尽时)。与布隆过滤器不同,当条目不再相关时,例如当流完成时,条目可以并且优选地应从重分配流列表中去除。可以使用几个公知的技术之一来确定流完成的指示,在一个实施例中,响应于确定已经完成重分配流,从重分配流列表中去除用于该流的FlowID或其他标记。
还存在将经由布隆过滤器标记的现有重分配流“添加”到重分配流列表是有利的情况。如果在用于不可用服务器的重分配流列表已满的同时,重分配用于重分配流的第一分组,则将用于流的相应标记(设置位)添加到与服务器相关联的布隆过滤器(或者在使用布隆过滤器再循环方案的情况下,添加到当前和下一个布隆过滤器两者)。如果在重分配流列表中具有FlowID或其他标记的重分配流完成,则可以从列表去除那些条目,从而释放空间以添加新的条目。如果是对应于在布隆过滤器中标记的、但不在重分配流列表中的现有重分配流的分组,并且列表中有空间,则可以将相应的标记添加到重分配流列表,同时不影响布隆过滤器位。最后,对应于布隆过滤器中的流的位会老化移出,仅留下与重分配流列表中的流相关的标记。
在一个实施例中,使用了以下技术。响应于将用于流的分组哈希处理到服务器Si,执行以下操作。
针对重分配流的列表检查分组。如果它被列出,那么按照列表中所指示的重分配流(或者如果你没有标记将特定流重新定向到的服务器的列表条目,则进行重新哈希处理)。
否则(列表中没有),就针对布隆过滤器检查它。如果布隆过滤器指示不存在流,那么将流转发到服务器Si。
否则(不在列表中,但在当前布隆过滤器中),那么(不修改下一个布隆过滤器)将用于该特定流的标记(例如FlowID)添加到重分配流的列表。
最后,如果你运气好,从Si重新定向的仅有的流会是几个极其长时间的流,在再循环布隆过滤器一次或多次后,布隆过滤器将保持全为零,因为识别所有长时间流的标记都将进入到重分配流列表中。
图6是示出了使用架构100并根据图1a-1f中所示实施例来促进通用分组分配/重分配方案的操作和逻辑的流程图600。首先,在块602中,确定初始数量的可用服务器n。如由开始和结束循环块604和624所示的,在由负载拆分器接收并属于要转发到服务器S之一的流的每一个分组上执行在流程图的外循环内所示的操作和逻辑。在块606中,将整数计数i初始化为n;i用作整数变量,其借助由开始和结束循环块610和616所示的内循环中的分配函数的每一次迭代而倒计数。
在块608中,执行流分类操作以分类分组。流分类是本领域中公知的,可以使用各种不同的流分类方案,包括上述的n元组哈希分类方案。在所示的实施例中,为每一个流确定FlowID,并利用FlowID将分组与流相关联。例如,可以以通过指针或其他类型的链接机制将每一个分组链接到其FlowID的方式缓存分组。优选地,用于得到FlowID的技术应保证每一个流都具有唯一的FlowID(在预期的操作参数内)。
如上提及的,开始和结束循环块610和616描绘了内循环,重复执行该内循环,直至循环退出到块622。更具体地,在开始循环块610中,将分组的FlowID用作函数输入以识别应将分组分配到的服务器S,来实施使用当前值的i路分配函数。在决策块612中,确定所识别的服务器是否是可用服务器。如果所识别的服务器不可用,则不能将分组转发到该服务器。因而,对决策块612的回答是“否”,逻辑前进到块614,其中,要么将FlowID添加到用于所识别的不可用服务器的重分配流列表,要么将相应的位添加到当前和下一个布隆过滤器。在一个实施例中,如果存在可用空间以添加新的条目,则将FlowID添加到不可用服务器的重分配流列表,如果不存在可用空间,那么就将适用的位标记(添加)到当前和下一个布隆过滤器。逻辑随后前进到结束循环块616,其中,i递减1,循环返回到开始循环块610,以使用分组FlowID作为函数输入来执行下一个i路分配函数,其中,随着每一次循环迭代,i减小1。
返回到决策块612,如果所识别的服务器是可用服务器,则回答为“是”,逻辑流动到决策块618,其中,确定分组是否对应于重分配流。在一个实施例中,通过使用分组的FlowID作为用于所识别的服务器的重分配流列表的查找以检查FlowID是否在列表中,来执行这个确定。如果查找检查结果得到未命中,那么就针对当前布隆过滤器,通过使用FlowID作为到命中测试的输入来执行第二检查。如果重分配流列表检查或者当前布隆过滤器检查结果得到命中,则分组就属于重分配流(对于决策块618的“是”结果),逻辑前进到块620,其中,如果FlowID在重分配流列表中,则更新用于FlowID的时间戳以反映当前时间(时间戳表示重分配流的最近的分组),或者,如果不在列表中,则将从FlowID得到的相应位添加到用于下一个布隆过滤器的位向量数据;无需将这些位添加到当前布隆过滤器,因为以前在块614中为流中较早的分组已经添加了它们。逻辑随后前进到结束循环块616,使得i递减1,且在开始循环块610开始循环的下一迭代。
这个循环迭代继续,直至由i路分配函数所识别的服务器是没有为其重分配分组的流的可用服务器,结果得到在决策块612的“是”和在决策块618的“否”。这导致逻辑退出循环,并前进到块622,其中,将分组转发到所识别的服务器。这完成了分组的处理,并且逻辑循环从结束循环块624返回到开始循环块604,以开始处理由负载拆分器接收到的下一分组。
在一个实施例中,在周期性基础上检查用于重分配流列表中的FlowID的时间戳,以确定在当前时间与FlowID时间戳之间的差是否超过某一预定值。这个时间差表示自接收到给定重分配流的最后分组以来的时间;超过预定值表示完成了流。结果,从用于适用服务器的重分配流列表去除FlowID。
图7显示了示例性负载拆分器700的示意性框图架构,其可以被配置为实施本文公开的实施例的方案。负载拆分器700包括多个网络端口702,每一个都包括物理(PHY)层块704、出口缓冲器E和入口缓冲器I。每一个网络端口702还可以包括其他组件,它们是网络技术领域中技术人员所公知的,为了简单和清楚而没有示出这些组件。多个网络端口702的每一个都包括标记为U(上游)、D(下游)或M(管理)的块。当部署并运行于负载拆分器位于网络705与网络服务器层之间的***中时,全部或部分上游端口将连接到服务器S,一个或多个下游端口将连接到网络705。在另一***环境中(未示出),负载拆分器700将在不同服务器层之间实施,例如在网络服务器层与应用服务器层之间。因此,上游端口会连接到应用服务器层中的服务器,而下游端口会连接到网络服务器层中的服务器。
管理端口通常可以用于管理的目的,例如从管理计算机706等将软件下载到负载拆分器,配置负载拆分器,从负载拆分器接收数据,等等。可选地,可以经由上游端口或下游端口中的一个传送管理操作。在一些实施例中,管理端口(或另一端口,未示出)可以耦合到另一负载拆分器L,实现多个负载拆分器共享信息,例如关于重分配流的信息、布隆过滤器数据、统计数据等。注意,由于用于布隆过滤器的位向量可以作为整数传送到另一负载拆分器,所以用于在负载拆分器之间共享布隆过滤器数据的开销极低。
负载拆分器700进一步包括主缓冲器708、存储器710、存储器控制器712、指令存储器714、互连716和处理器718。出口缓冲器E和入口缓冲器I中的每一个都可操作地耦合到主缓冲器708,它们可以实施为存储器710的部分,或者可以单独实施。存储器710包括一类动态随机存取存储器(DRAM),在所示实施例中经由存储器控制器712进行访问。可选地,处理器718可以具有一个或多个集成的存储器控制器或者代理,其被配置为支持对存储器710的访问。在运行时间操作期间,出于多个目的,分配存储器710的地址空间内的存储器的块,包括储存重分配流列表720、布隆过滤器722和一个或多个应用,如由应用空间724所示的。对应于服务器可用性历史725的数据也可存储在存储器710中,如果此类数据被追踪的话。
处理器718通常可以包括通用处理器,包括一个或多个核心726,或者专用处理器,例如网络处理单元(NPU),包括诸如核心、微引擎等的多个处理元件。处理器718还可以包括哈希单元728,如图所示。在运行时间操作期间,将指令从指令存储器714载入应用空间724,或者直接载入与核心或微引擎726相关联的高速缓冲存储器级,并在核心或微引擎上执行以实现为其配置指令的操作。通过示例而非限制,将指令存储器714示出为存储用于多个模块的指令,包括分组识别/流分类模块730、分配逻辑732、统计引擎734和网络堆栈736。公知的,负载拆分器等通常可以包括其他指令,以实现通常由负载拆分器执行的其他操作;为了清楚,没有显示这些指令。
分组识别/流分类模块730包括被配置为识别和/或分类从网络705接收到的输入分组的指令。例如,如上所述,基于在分组的报头字段中的信息,可以使给定分组与FlowID相关联。流分类和/或分配函数可以采用哈希单元728,它是基于硬件的组件,被配置为使用一个或多个哈希算法执行哈希运算。可选地,可以经由由处理器718执行软件指令,或者经由分离的基于硬件的组件(未示出)来实施全部或部分哈希算法。
分配逻辑732包括被配置为实施本文所述的分组分配和重分配操作的指令。在一些实施例中,这个模块传送用于分组的FlowID,随后使用诸如本文所述的哈希函数的可适用的确定性分配函数将分组分配给适当的服务器S。分配逻辑还被配置为实现重分配流列表720和布隆过滤器722。在一些实施例中,使用以上参考图5所述的当前/下一个布隆过滤器再循环方案来实施布隆过滤器。
统计引擎734包括被配置为实施统计运算的指令,包括但不限于收集用于分组流的统计信息,并计算由负载拆分器700使用的各种配置参数。例如,统计引擎734可以被配置为响应于相应分组流数据的处理,动态重配置布隆过滤器再循环频率。另外或者可选地,统计引擎734可以被配置为从管理计算机706和/或从另一负载拆分器接收统计数据。此外,统计引擎734可以被配置为从一个或多个服务器S接收统计数据。例如,可以采用使用专用逻辑端口的管理通道,以便于在负载拆分器700与服务器S之间的非业务数据的传送。
网络堆栈736包括用于传送源自负载拆分器700或者以负载拆分器700为目的地的数据的指令。例如,这种传送可以在负载拆分器700与管理计算机706、另一负载拆分器L、和/或服务器S之间。在一些实例中,可以使用公知的TCP/IP网络堆栈来实施这种传送。另外,可以使用其他公知的协议。
在一个实施例中,指令存储器714包括非易失性储存设备,例如闪存或大容量储存设备(例如硬盘)。可任选地,用于一个或多个前述模块的指令可以结合负载拆分器的初始化而从管理计算机706或通过网络705下载。另外,可以经由管理端口或另一端口下载对这些模块的更新。
除了经由在通用或专用处理器上执行指令来实施操作以外,可以使用嵌入式逻辑等来实施由本文所述实施例执行的各种操作。此外,负载拆分器700可以采用多个处理器,包括一个或多个通用处理器和专用处理器的组合。另外,一个或多个网络端口702可以采用嵌入式逻辑,以执行本文所述的一个或多个操作。例如,可以使用被配置为执行分组识别和/或流分类的高级单端口或多端口网络接口控制器(NIC),以代替经由在处理器718上执行指令而执行的这些操作。
根据本文公开的实施例的原理和教导的分配逻辑及相关联操作的实现方式提供了比当前技术更显著的优势。例如,根据在相同层中使用多个负载拆分器的***架构,在其中可以由两个或更多个不同负载拆分器接收与相同流相关联的分组,传统方案要求相当大程度的流状态信息在负载拆分器之间同步。这个流状态信息通常包括与由负载拆分器处理的每一个流相关的状态信息。作为简化示例,这种信息可以表述(大意是)属于FlowID 3的分组要被输送到ServerID S5。尽管这个技术对于处理在连接到单一负载拆分器的上游层中的拓扑变化适用,但它不能很好地缩放,因为相同的信息需要在其他负载拆分器可用,以便那些负载拆分器获知将属于流的分组转发到何处,所述流包括已经或将要由另一负载拆分器处理的分组。
根据本文的实施例,由于考虑到***拓扑变化,结合适于分配函数的方案使用分配函数来转发分组,所以每一个负载拆分器都可以将分组转发到适当的服务器,而无需共享流状态信息,或者甚至无需预先获知这种流状态信息。
在图1f中示出了这个功能的示例,其将负载拆分器L1示为有故障且不可用于转发输入分组。如由分组112a和118a所示的,与以前由负载拆分器L1在它成为不可用之前处理的流相关联的分组(例如,分组112和118)现在示出为由负载拆分器L2处理。由于每一个负载拆分器L1和L2都使用相同的分配函数和逻辑,所以负载拆分器L2会将相同的分组转发到适当的服务器,其被指定为处理与分组相关联的流。此外,在需要重分配的情况下,两个负载拆分器L1和L2会将对应于相同流的分组重分配给相同的服务器。尽管未示出,但负载拆分器L3也被配置为以类似的方式将分组转发到适当的服务器。
除了在负载拆分器上实现外,实施例的方案可以更普遍地在任意类型的网络交换或转发元件上实施,其利用流分配和/或转发分组,其中将与相同流相关联的分组分配和/或转发出相同的网络端口,朝向相同的下一跳(如另一网络元件)或者到相同的端点(例如,服务器、计算机等)。
除了使用物理负载拆分器或者其他物理交换元件实现外,该技术也可以部署在虚拟环境中,例如通常用于数据中心和服务器群中的那些环境。例如,服务器平台可以被配置为从网络接收分组,并将那些分组分配给由服务器平台托管的多个虚拟服务器实例。根据此类实现方式,交换元件以软件实现为虚拟交换机、负载拆分器、负载平衡器等。
尽管参考特定实现方式描述了一些实施例,但根据一些实施例,其他实现方式也是可能的。另外,无需以附图所示和本文所述的特定方式布置所示和/或所述的元件或其他特征的布置和/或顺序。根据一些实施例,许多其他布置是可能的。
在附图中所示的每一个***中,在一些情况下,元件中的每一个都可以具有相同的参考标记或不同的参考标记,以暗示所示元件可以是不同的和/或相似的。但元件可以足够灵活以具有不同实现方式,并与本文所示或所述的一些或全部***工作。附图中所示的各种元件可以是相同的或不同的。将哪一个称为第一元件和将哪一个称为第二元件是任意的。
在说明书和权利要求书中,可以使用术语“耦合”和“连接”及其派生词。应理解,这些术语并非旨在作为彼此的同义词。相反,在特定实施例中,“连接”可以用于指示两个或更多个元件彼此直接物理或电气接触。“耦合”可以表示两个或更多个元件直接物理或电气接触。但“耦合”也可以表示两个或更多个元件彼此没有直接接触,但仍彼此协作或相互作用。
实施例是本发明的实现方式或示例。说明书中对“实施例”、“一个实施例”、“一些实施例”或者“其他实施例”的提及表示结合实施例说明的特定特征、结构或特性包括在本发明的至少一些实施例中,但不一定是所有实施例中。“实施例”、“一个实施例”或“一些实施例”的多次出现不一定全都指代相同的实施例。
本文所述和所示的全部组件、特征、结构、特性等并非都需要包括在特定的一个或多个实施例中。例如,如果说明书表述“可以”、“或许”、“能够”或者“可能”包括了组件、特征、结构或特性,则该特定组件、特征、结构或特性不是必需被包括。如果说明书或权利要求书提及“一(a)”或“一(an)”元件,其并非表示仅有一个元件。如果说明书或权利要求书提及“另外的”元件,其不排除存在多于一个另外的元件。
如上所述,通过相应的软件和/或固件组件和应用可以便于本文实施例的多个方案,例如由在负载拆分器上的处理器或NPU执行的软件或固件。因而,本发明的实施例可以用作或者支持在某一形式的处理核心(例如处理器或NPU,或者多核处理器的一个或多个核心)上执行的软件程序、软件模块、固件、和/或分布式软件、运行在处理器或核心上的或者在机器可读介质上或内实施或实现的虚拟机。机器可读介质包括用于存储或发送以机器(例如计算机)可读形式的信息的任何机制。例如,机器可读介质可以包括只读存储器(ROM);随机存取存储器(RAM);磁盘储存介质;光储存介质;和闪存设备等。
本发明的所示实施例的以上说明,包括在摘要中所述的,并非旨在是穷举性的,或者将本发明局限于公开的准确形式。尽管在此出于示例性目的说明了本发明的特定实施例和示例,但如相关领域技术人员会认识到的,在本发明的范围内的多个等效修改是可能的。
按照以上的详细说明可以做出这些修改。用于以下权利要求书中的词语不应解释为将本发明局限于在说明书和附图中公开的特定实施例。相反,本发明的范围由以下权利要求书整体上确定,其应按照权利要求解释的既定原则来解释。

Claims (25)

1.一种由负载拆分器实施的方法,所述负载拆分器被配置为接收输入分组并将所述分组分配给耦合到所述负载拆分器的多个服务器,所述方法包括:
检测到n个服务器能用于接收分组;
采用n路分配函数来将分组分配给所述n个服务器,其中,所述n路分配函数被配置为使得将属于相同流的分组分配给相同的服务器;
检测到所述n个服务器的第一服务器不能用于接收分组,留下n-1个能用服务器;
在存在n-1个能用服务器时,
响应于接收到第一分组,
将所述第一分组分类以将所述第一分组与流相关联;以及
在所述分组上执行所述n路分配函数;
如果所述n路分配函数的结果指示将所述第一分组分配给能用服务器,则将所述第一分组转发到所述能用服务器;
如果所述n路分配函数的结果指示将所述第一分组分配给第一不能用服务器,则
采用(n-1)路分配函数来确定能用服务器,以将所述第一分组重分配到所述服务器,并将所述第一分组转发到所述服务器;
存储指示与用于所述第一分组的流相关联的分组属于重分配流的标记;以及
当能用服务器的数量返回到n个服务器时,
将随后接收到的与所述重分配流相关联的分组转发到将所述第一分组重分配到的相同的服务器。
2.根据权利要求1所述的方法,进一步包括:
响应于接收到分组,
初始化整数i=n;
(a)执行i路分配函数,以识别将所述分组分配或重分配到的服务器;
(b)如果所述i路分配函数的结果识别出能用服务器,则确定所述分组是否与用于所述能用服务器的重分配流相关联;及
i.如果所述分组与用于所述能用服务器的重分配流相关联,则将i递减1,并返回到(a);否则,
ii.将所述分组转发到所述能用服务器;
(c)如果所述i路分配函数的结果识别出不能用服务器,则存储指示属于与所述分组相关联的流的分组属于重分配流的标记,将i递减1,并返回到(a);及
(d)在适用情况下,重复操作(a)、(b)、(b)i和(c),直至在操作(b)中所述i路分配函数识别出不具有与所述分组相关联的重分配流的能用服务器。
3.根据权利要求2所述的方法,进一步包括:
对于每个接收到的分组,执行流分类操作,以识别与所述分组相关联的流,所述流具有流标识符(FlowID);以及
采用所述FlowID作为到所述i路分配函数的输入。
4.根据权利要求3所述的方法,进一步包括:采用用于被重分配的流的FlowID作为标记,所述标记指示与那些流相关联的分组是重分配流。
5.根据权利要求2-4中任意一项所述的方法,进一步包括:
采用用于向其重分配流的服务器的重分配流列表,其中,
在操作(c)中,将包含标记的重分配流条目添加到用于所述服务器的重分配流列表,所述标记指示将与所述流相关联的分组被重分配给另一服务器;
在操作(b)中,通过确定与分组相关联的流,并针对用于所述服务器的重分配流列表执行查找,以确定是否存在与和分组相关联的流匹配的条目,来确定所述分组是否与用于所述能用服务器的重分配流相关联;以及
在操作(b)i中,更新用于对应于与所述分组相关联的重分配流的重分配流条目的时间戳。
6.根据权利要求2-5中任意一项所述的方法,进一步包括:
采用一对布隆过滤器来存储位向量数据,所述位向量数据被配置为促进确认流是否包括用于与布隆过滤器对相关联的服务器的重分配流;
通过用下一个布隆过滤器代替当前布隆过滤器来周期性地再循环当前布隆过滤器,其中,所述下一个布隆过滤器成为新的当前布隆过滤器,清除所述当前布隆过滤器中的位向量数据,并且所述当前布隆过滤器成为新的下一个布隆过滤器;
在操作(c)中,在与所述不能用服务器相关联的所述当前布隆过滤器和所述下一个布隆过滤器中设置位,指示将与所述流相关联的分组重分配到另一服务器;
在操作(b)中,通过确定与所述分组相关联的流,并针对用于所述服务器的所述当前布隆过滤器执行查找,以确定是否存在与和所述分组相关联的流匹配的条目,来确定所述分组是否与用于所述能用服务器的重分配流相关联;以及
在操作(b)i中,在所述下一个布隆过滤器中设置位,指示将与所述流相关联的分组重分配到另一服务器。
7.根据前述权利要求中任意一项所述的方法,进一步包括:
在所述服务器的数量小于n个服务器时,
保留包含数据的重分配流标记,所述数据为当前或者过去不能用的每一个服务器识别哪些流现在或者过去被从所述服务器重分配到另一服务器,
当能用服务器的数量返回到n个服务器时,
响应于接收到下一分组,
对所述下一分组进行分类,以将所述下一分组与流相关联,并在所述分组上执行n路分配函数;
检查用于由所述n路分配函数识别的服务器的重分配流标记;以及
如果与所述下一分组相关联的流是由所述重分配流标记识别的流,则将所述分组重定向到与被重新分配的流相关联的服务器分组。
8.根据前述权利要求中任意一项所述的方法,进一步包括:保留包含数据的至少一个重分配流列表,所述数据为当前或者过去不能用的每一个服务器识别哪些流现在或者过去被从所述服务器重分配到另一服务器。
9.根据前述权利要求中任意一项所述的方法,进一步包括:
采用至少一对布隆过滤器来存储位向量数据,所述位向量数据被配置为促进已经被重分配的流的识别;
对于每一对布隆过滤器,
以时间上偏移的方式填充所述布隆过滤器中的所述位向量数据,以使得所述布隆过滤器中的一个具有比另一个更多的位设置,将具有更多位设置的布隆过滤器指定为当前布隆过滤器,并将另一个布隆过滤器指定为下一个布隆过滤器;
周期性将所述下一个布隆过滤器提升成为新的当前布隆过滤器,并再循环所述当前布隆过滤器,以用作新的下一个布隆过滤器,其中,再循环当前布隆过滤器向量清除其位向量数据;以及
针对作为当前布隆过滤器的布隆过滤器执行流识别命中测试。
10.根据前述权利要求中任意一项所述的方法,进一步包括:
为多个服务器的每一个服务器关联一对布隆过滤器;
对于每一对布隆过滤器,
指定一个布隆过滤器的状态为当前布隆过滤器,另一个布隆过滤器的状态为下一个布隆过滤器,其中,每一个布隆过滤器的状态在当前布隆过滤器状态与下一个布隆过滤器状态之间周期性循环,
当服务器在第一时间段中不能用时,响应于检测到被从与布隆过滤器对相关联的服务器重分配出去的流,在所述第一时间段中初始仅以位向量数据填充第一当前布隆过滤器;
(a)在下一时间段中,响应于在所述下一时间段中检测到被从所述服务器重分配出去的流,以位向量数据填充所述第一当前布隆过滤器和第一下一个布隆过滤器;
(b)在下一时间段完成后,将所述第一下一个布隆过滤器提升为新的当前布隆过滤器,并再循环所述第一当前布隆过滤器,以用作新的下一个布隆过滤器,其中,当再循环布隆过滤器时,清除用于所述布隆过滤器的位向量数据;以及
在持续的基础上重复操作(a)和(b)。
11.根据前述权利要求中任意一项所述的方法,进一步包括:
保留包含数据的至少一个重分配流列表,所述数据为当前或者过去不能用的每一个服务器识别哪些流的至少一部分现在或者过去被从所述服务器重分配到另一服务器;以及
为所述当前或者过去不能用的每一个服务器采用至少一个布隆过滤器来存储位向量数据,所述位向量数据被配置为促进确认流是否包括当前或过去被从与包含所述位向量数据的布隆过滤器相关联的服务器重分配出去的流。
12.一种装置,包括:
多个上游网络端口;
至少一个下游网络端口;
其中,所述装置被配置为安装在***中,并实施为负载拆分器,其将在所述至少一个下游端口处接收到的分组分配给与所述多个上游端口通信耦合的多个服务器,其中,服务器的初始数量是n,当被安装在所述***中并运行时,所述装置进一步被配置为执行包括以下的操作,
响应于接收到分组,
初始化整数i=n;
识别与所述分组相关联的流;
(a)执行i路分配函数,以识别将所述分组分配或重分配到的服务器;
(b)如果所述i路分配函数的结果识别出能用服务器,则确定所述分组是否与用于所述能用服务器的重分配流相关联;以及
i.如果所述分组与用于所述能用服务器的重分配流相关联,则将i递减1,并返回到(a);否则,
ii.将所述分组转发到所述能用服务器;
(c)如果所述i路分配函数的结果识别出不能用服务器,则存储指示属于与所述分组相关联的流的分组属于重分配流的标记,将i递减1,并返回到(a);以及
(d)在适用情况下,重复操作(a)、(b)、(b)i和(c),直至在操作(b)中所述i路分配函数识别出不具有与所述分组相关联的重分配流的能用服务器,导致在(b)ii中将所述分组转发到所述能用服务器。
13.根据权利要求12所述的装置,其中,当被安装在所述***中并运行时,所述装置进一步被配置为执行包括以下的操作:
对于每个接收到的分组,执行流分类操作,以识别与所述分组相关联的流,所述流具有流标识符(FlowID);
采用所述FlowID作为到所述n路和(n-1)路分配函数的输入;以及
使用用于重分配流的FlowID,追踪与被重分配的分组相关联的重分配流。
14.根据权利要求13所述的装置,其中,当被安装在所述***中并运行时,所述装置进一步被配置为:使用包含数据的至少一个重分配流列表追踪已经被重分配的流,所述数据为当前或者过去不能用的每一个服务器识别当所述服务器现在或过去不能用时哪些流现在或者过去被从所述服务器重分配到另一服务器。
15.根据权利要求14所述的装置,其中,当被安装在所述***中并运行时,所述装置进一步被配置为:
在操作(c)中,将包含标记的重分配流条目添加到用于所述服务器的重分配流列表,所述标记指示将与所述流相关联的分组重分配给另一服务器;
在操作(b)中,通过确定与分组相关联的流,并针对用于所述服务器的重分配流列表执行查找,以确定是否存在与和分组相关联的流匹配的条目,来确定所述分组是否与用于所述能用服务器的重分配流相关联;
在操作(b)i中,更新用于对应于与所述分组相关联的重分配流的重分配流条目的时间戳;以及
如果在重分配流条目的时间戳与当前时间之间的时间差超过预定值,则去除所述重分配流条目。
16.根据权利要求12-15任意一项所述的装置,其中,当被安装在所述***中并运行时,所述装置进一步被配置为执行包括以下的操作:
为操作性地耦合到所述上游网络端口的多个服务器中的每一个服务器关联一对布隆过滤器;
对于每一对布隆过滤器,
指定一个布隆过滤器的状态为当前布隆过滤器,另一个布隆过滤器的状态为下一个布隆过滤器,其中,每一个布隆过滤器的状态在所述当前布隆过滤器状态与所述下一个布隆过滤器状态之间周期性循环,
在服务器在第一时间段中不能用时,响应于检测到被从与布隆过滤器对相关联的服务器重分配出去的流,在所述第一时间段中初始仅以位向量数据填充第一当前布隆过滤器;
(a)在下一时间段中,响应于在所述下一时间段中检测到被从所述服务器重分配出去的流,以位向量数据填充所述第一当前布隆过滤器和第一下一个布隆过滤器;
(b)在下一时间段完成后,将所述第一下一个布隆过滤器提升为新的当前布隆过滤器,并再循环所述第一当前布隆过滤器,以用作新的下一个布隆过滤器,其中,当再循环布隆过滤器时,清除用于所述布隆过滤器的位向量数据;以及
在持续的基础上重复操作(a)和(b)。
17.根据权利要求16所述的装置,其中,当被安装在所述***中并运行时,所述装置进一步被配置为执行包括以下的操作:
在操作(c)中,在与所述不能用服务器相关联的所述当前布隆过滤器和所述下一个布隆过滤器中设置位,指示将与所述流相关联的分组重分配到另一服务器;
在操作(b)中,通过针对用于所述服务器的所述当前布隆过滤器执行查找,以确定是否存在与和所述分组相关联的流匹配的条目,来确定所述分组是否与用于所述能用服务器的重分配流相关联;以及
在操作(b)i中,在所述下一个布隆过滤器中设置位,指示将与所述流相关联的分组重分配到另一服务器。
18.根据权利要求16所述的装置,其中,当被安装在所述***中并运行时,所述装置进一步被配置为:
保留包含数据的至少一个重分配流列表,所述数据为当前或者过去不能用的每一个服务器识别哪些流的至少一部分现在或者过去被从所述服务器重分配到另一服务器;
响应于接收到流的第一分组,
如果用于分组的所述i路重分配函数识别出不能用的服务器,则确定在用于所述不能用服务器的重分配流列表中是否存在能用于增加新的重分配流条目的任何空间;以及
如果存在能用的空间,则将对应于用于所述第一分组的流的新的重分配流条目增加到所述重分配流列表;否则
将位向量数据增加到与所述不能用服务器相关联的所述当前和下一个布隆过滤器,以指示所述流是重分配流。
19.根据权利要求12-18中任意一项所述的装置,其中,所述装置进一步包括:
处理器,具有一个或多个处理元件;
至少一个存储器,操作性地耦合到所述处理器;
储存设备,所述储存设备具有存储于其中的指令,所述指令被配置为在所述处理器上执行,以使得当所述装置被安装在所述***中并运行时,执行所述的操作。
20.根据权利要求13所述的装置,其中,所述装置进一步包括管理网络端口,当被安装在采用具有类似配置的第二装置的***中时,所述装置被配置为与所述第二装置共享关于重分配流的信息。
21.一种有形非暂时性机器可读介质,具有存储于其上的指令,所述指令被配置为由负载拆分器上的至少一个处理元件执行,以使得当负载拆分器被安装在***中并运行时,所述负载拆分器能够实现分组分配和重分配操作,所述分组分配和重分配操作包括:
响应于接收到分组,
初始化整数i=n;
识别与所述分组相关联的流;
(a)执行i路分配函数,以识别将所述分组分配或重分配到的服务器;
(b)如果所述i路分配函数的结果识别出能用服务器,则确定所述分组是否与用于所述能用服务器的重分配流相关联;以及
i.如果所述分组与用于所述能用服务器的重分配流相关联,则将i递减1,返回到(a);否则,
ii.将所述分组转发到所述能用服务器;
(c)如果所述i路分配函数的结果识别出不能用服务器,则存储指示属于与所述分组相关联的流的分组属于重分配流的标记,将i递减1,并返回到(a);以及
(d)在适用情况下,重复操作(a)、(b)、(b)i和(c),直至在操作(b)中所述i路分配函数识别出不具有与所述分组相关联的重分配流的能用服务器,导致在(b)ii中将所述分组转发到所述能用服务器。
22.根据权利要求21所述的有形非暂时性机器可读介质,其中,所述指令被配置为执行进一步的操作,在执行时,包括:
对于每个接收到的分组,执行流分类操作,以识别与所述分组相关联的流,所述流具有流标识符(FlowID),或者取回通过先前的流分配操作产生的与所述分组相关联的FlowID;
采用所述FlowID作为到所述i路分配函数的输入;以及
使用用于重分配流的FlowID,追踪与被重分配的分组相关联的重分配流。
23.根据权利要求21或22所述的有形非暂时性机器可读介质,其中,所述指令被配置为执行进一步的操作,在执行时,包括:
使用包含数据的至少一个重分配流列表追踪已经被重分配的流,所述数据为当前或者过去不能用的每一个服务器识别当所述服务器现在或过去不能用时现在或过去被重分配的流;
在操作(c)中,将包含标记的重分配流条目添加到用于所述服务器的重分配流列表,所述标记指示将与所述流相关联的分组重分配给另一服务器;
在操作(b)中,通过确定与分组相关联的流,并针对用于所述服务器的重分配流列表执行查找,以确定是否存在与和分组相关联的流匹配的条目,来确定所述分组是否与用于所述能用服务器的重分配流相关联;
在操作(b)i中,更新用于对应于与所述分组相关联的重分配流的重分配流条目的时间戳;以及
如果在重分配流条目的时间戳与当前时间之间的时间差超过预定值,则去除所述重分配流条目。
24.根据权利要求21-23中任意一项所述的有形非暂时性机器可读介质,其中,所述指令被配置为执行进一步的操作,在执行时,包括:
为操作性地耦合到上游网络端口的多个服务器中的每一个服务器关联一对布隆过滤器;
对于每一对布隆过滤器,
指定一个布隆过滤器的状态为当前布隆过滤器,另一个布隆过滤器的状态为下一个布隆过滤器,其中,每一个布隆过滤器的状态在所述当前布隆过滤器状态与所述下一个布隆过滤器状态之间周期性循环,
在服务器在第一时间段中不能用时,响应于检测到被从与布隆过滤器对相关联的服务器重分配出去的流,在所述第一时间段中初始仅以位向量数据填充第一当前布隆过滤器;
(a)在下一时间段中,响应于在所述下一时间段中检测到被从所述服务器重分配出去的流,以位向量数据填充所述第一当前布隆过滤器和第一下一个布隆过滤器;
(b)在下一时间段完成后,将所述第一下一个布隆过滤器提升为新的当前布隆过滤器,并再循环所述第一当前布隆过滤器,以用作新的下一个布隆过滤器,其中,当再循环布隆过滤器时,清除用于所述布隆过滤器的位向量数据;以及
在持续的基础上重复操作(a)和(b)。
25.根据权利要求24所述的有形非暂时性机器可读介质,其中,所述指令被配置为执行进一步的操作,在执行时,包括:
在操作(c)中,在与所述不能用服务器相关联的所述当前布隆过滤器和所述下一个布隆过滤器中设置位,指示将与所述流相关联的分组重分配到另一服务器;
在操作(b)中,通过针对用于所述服务器的所述当前布隆过滤器执行查找,以确定是否存在与和所述分组相关联的流匹配的条目,来确定所述分组是否与用于所述能用服务器的重分配流相关联;以及
在操作(b)i中,在所述下一个布隆过滤器中设置位,指示将与所述流相关联的分组重分配到另一服务器。
CN201410729357.3A 2013-09-27 2014-09-26 对于拓扑变化有弹性的分布式按次序负载分布 Active CN104519125B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/040,125 2013-09-27
US14/040,125 US9917891B2 (en) 2013-09-27 2013-09-27 Distributed in-order load spreading resilient to topology changes

Publications (2)

Publication Number Publication Date
CN104519125A true CN104519125A (zh) 2015-04-15
CN104519125B CN104519125B (zh) 2019-05-07

Family

ID=52741196

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410729357.3A Active CN104519125B (zh) 2013-09-27 2014-09-26 对于拓扑变化有弹性的分布式按次序负载分布

Country Status (2)

Country Link
US (1) US9917891B2 (zh)
CN (1) CN104519125B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108377254A (zh) * 2017-02-01 2018-08-07 瞻博网络公司 负载均衡中的一致流指派
CN113329048A (zh) * 2021-04-13 2021-08-31 网络通信与安全紫金山实验室 基于交换机的云负载均衡方法、装置及存储介质
US20220116448A1 (en) * 2017-07-03 2022-04-14 Pure Storage, Inc. Load Balancing Reset Packets

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9906969B2 (en) * 2014-04-04 2018-02-27 Cellco Partnership Remote diagnostics for mobile devices
US9917727B2 (en) * 2014-06-03 2018-03-13 Nicira, Inc. Consistent hashing for network traffic dispatching
US9588977B1 (en) * 2014-09-30 2017-03-07 EMC IP Holding Company LLC Data and metadata structures for use in tiering data to cloud storage
US10959131B2 (en) * 2019-03-11 2021-03-23 Cisco Technology, Inc. Dynamic prioritization of roam events based on latency
TWI738253B (zh) * 2020-03-18 2021-09-01 華南商業銀行股份有限公司 網域名稱系統服務之客戶端連線方法
US11748166B2 (en) * 2020-06-26 2023-09-05 EMC IP Holding Company LLC Method and system for pre-allocation of computing resources prior to preparation of physical assets
US11799761B2 (en) 2022-01-07 2023-10-24 Vmware, Inc. Scaling edge services with minimal disruption
US11888747B2 (en) 2022-01-12 2024-01-30 VMware LLC Probabilistic filters for use in network forwarding and services

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6112249A (en) * 1997-05-30 2000-08-29 International Business Machines Corporation Non-disruptively rerouting network communications from a secondary network path to a primary path
CN101247350A (zh) * 2008-03-13 2008-08-20 华耀环宇科技(北京)有限公司 一种基于ssl数字证书的网络负载均衡方法
CN102420708A (zh) * 2011-12-16 2012-04-18 广东高新兴通信股份有限公司 一种业务数据的负载均衡处理***及方法
CN102843305A (zh) * 2012-09-21 2012-12-26 苏州阔地网络科技有限公司 一种网络会议负载分配方法及***
CN103150394A (zh) * 2013-03-25 2013-06-12 中国人民解放军国防科学技术大学 面向高性能计算的分布式文件***元数据管理方法
CN103188345A (zh) * 2013-03-01 2013-07-03 北京邮电大学 分布式动态负载管理***和方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8065399B2 (en) * 2000-04-17 2011-11-22 Circadence Corporation Automated network infrastructure test and diagnostic system and method therefor
US8132177B2 (en) * 2007-12-18 2012-03-06 AT & T Intellectual Property II, LP System and method for load-balancing in server farms
US8849838B2 (en) * 2008-01-15 2014-09-30 Google Inc. Bloom filter for storing file access history
US9071608B2 (en) * 2008-04-28 2015-06-30 International Business Machines Corporation Method and apparatus for load balancing in network based telephony application
US8290972B1 (en) * 2009-04-29 2012-10-16 Netapp, Inc. System and method for storing and accessing data using a plurality of probabilistic data structures
US8908521B2 (en) * 2012-04-04 2014-12-09 Telefonaktiebolaget L M Ericsson (Publ) Load balancing for stateful scale-out network services

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6112249A (en) * 1997-05-30 2000-08-29 International Business Machines Corporation Non-disruptively rerouting network communications from a secondary network path to a primary path
CN101247350A (zh) * 2008-03-13 2008-08-20 华耀环宇科技(北京)有限公司 一种基于ssl数字证书的网络负载均衡方法
CN102420708A (zh) * 2011-12-16 2012-04-18 广东高新兴通信股份有限公司 一种业务数据的负载均衡处理***及方法
CN102843305A (zh) * 2012-09-21 2012-12-26 苏州阔地网络科技有限公司 一种网络会议负载分配方法及***
CN103188345A (zh) * 2013-03-01 2013-07-03 北京邮电大学 分布式动态负载管理***和方法
CN103150394A (zh) * 2013-03-25 2013-06-12 中国人民解放军国防科学技术大学 面向高性能计算的分布式文件***元数据管理方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108377254A (zh) * 2017-02-01 2018-08-07 瞻博网络公司 负载均衡中的一致流指派
CN108377254B (zh) * 2017-02-01 2021-06-29 瞻博网络公司 负载均衡中的一致流指派的方法及设备
US20220116448A1 (en) * 2017-07-03 2022-04-14 Pure Storage, Inc. Load Balancing Reset Packets
US11689610B2 (en) * 2017-07-03 2023-06-27 Pure Storage, Inc. Load balancing reset packets
CN113329048A (zh) * 2021-04-13 2021-08-31 网络通信与安全紫金山实验室 基于交换机的云负载均衡方法、装置及存储介质

Also Published As

Publication number Publication date
US20150095404A1 (en) 2015-04-02
US9917891B2 (en) 2018-03-13
CN104519125B (zh) 2019-05-07

Similar Documents

Publication Publication Date Title
CN104519125A (zh) 对于拓扑变化有弹性的分布式按次序负载分布
US9736263B2 (en) Temporal caching for ICN
EP2901308B1 (en) Load distribution in data networks
Jokela et al. LIPSIN: Line speed publish/subscribe inter-networking
CN106464585B (zh) 用于压缩数据网络的转发状态的方法和***
US20130041982A1 (en) Method and node for acquiring content and content network
CN102045252B (zh) 用于内容连网的自适应多接口使用
CN102474467A (zh) 使用父-子链路聚合组的服务器端负载均衡
US8539041B2 (en) Method, apparatus, and network system for acquiring content
US9929941B2 (en) Fast convergence for redundant edge devices
CN104380289B (zh) 服务感知分布式散列表路由
Ko et al. An information-centric architecture for data center networks
Xie et al. Supporting seamless virtual machine migration via named data networking in cloud data center
US10430304B2 (en) Communication continuation during content node failover
CN105991347A (zh) Dns请求报文的重定向方法和装置
JP2016171503A (ja) 管理装置および接続処理方法
Liu et al. On scaling software-defined networking in wide-area networks
Soleimanzadeh et al. SD‐WLB: An SDN‐aided mechanism for web load balancing based on server statistics
Pu ProNDN: MCDM‐Based Interest Forwarding and Cooperative Data Caching for Named Data Networking
US10977141B2 (en) Systems and methods for handling server failovers
Ashok Kumar et al. Simple, efficient location‐based routing for data center network using IP address hierarchy
Jia et al. sRetor: a semi-centralized regular topology routing scheme for data center networking
Sarma et al. Uniform load sharing on a hierarchical content delivery network interconnection model
Sun et al. MatrixDCN: a high performance network architecture for large‐scale cloud data centers
Xie Resilient Cache Network Management: Algorithms, Analysis, Experiments

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant