买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】在无状态集群边缘上提供有状态服务的方法、设备和介质_NICIRA股份有限公司_201480083356.4 

申请/专利权人:NICIRA股份有限公司

申请日:2014-12-30

公开(公告)日:2021-02-26

公开(公告)号:CN107077579B

主分类号:G06F21/85(20130101)

分类号:G06F21/85(20130101);H04L12/715(20130101);H04L12/721(20130101);H04L12/743(20130101);H04L29/08(20060101);H04L29/12(20060101)

优先权:["20141114 US 14/541,477","20141114 US 14/541,501","20141114 US 14/541,517","20141114 US 14/541,530"]

专利状态码:有效-授权

法律状态:2021.02.26#授权;2017.09.12#实质审查的生效;2017.08.18#公开

摘要:为了使得能够在边缘处动态缩放网络服务,提供了使得能够添加新节点或去除现有节点,同时保持通过有状态服务的流的紧密度的新颖系统和方法。该方法提供了可以动态调整大小以操纵和处理利用有状态网络服务的网络流量的网络节点集群。流经边缘的现有流量在集群成员资格更改期间和之后继续工作。集群中的所有节点都以活动‑活动模式操作,即,它们正在接收和处理流量流,从而最大化可用处理能力的利用率。

主权项:1.一种用于在用于提供有状态服务的节点的集群处对第一流和第二流执行有状态服务的方法,所述第二流与所述第一流不同但是与所述第一流相关,所述方法包括:在所述节点的集群中的第一节点处执行对所述第一流的有状态服务,其中第一流的状态信息由第一节点维护;在第一节点处接收来自所述集群中的第二节点的属于所述第二流的分组,其中一致性散列函数将第一流分配给第一节点,并且将第二流分配给第二节点;以及通过使用第一流的状态信息在第一节点处执行对所述第二流的有状态服务,其中执行对所述第二流的有状态服务需要第一流的状态信息。

全文数据:无状态集群边缘上的有状态服务背景技术[0001]诸如防火墙和NAT的有状态网络服务在流量流进和流出的网络边缘处是常见的。它提供基本的安全能力,诸如网络安全网关服务和用于性能和可用性的Web负载平衡。随着网络流量的增加,对边缘服务的需求也增加,从而需要为边缘服务分配附加的资源。发明内容[0002]为了使得能够在边缘处动态缩放网络服务,一些实施例提供能够添加新节点或去除现有节点,同时保持通过有状态服务的流的紧密度affinity的系统和方法。一些实施例提供了可以动态调整大小以操纵和处理利用有状态网络服务的网络流量的网络节点集群。流经边缘的现有流量在集群成员资格membership更改期间和之后继续工作。在一些实施例中,集群中的所有节点都以活动-活动模式操作,即,它们正在接收和处理流量流,从而最大化可用处理能力的利用率。[0003]为了创建在网络或网络段边缘处执行有状态服务的动态可扩展的节点集群,一些实施例将流分发到集群的不同节点,使得集群的所有节点都在主动参与有状态服务。在一些实施例中,流通过一致性散列函数散列到集群的节点中。一致性散列函数是在集群的节点之上(或基于集群的成员资格),使得不同的流将被几乎均匀地分发到集群的不同节点。在这些实施例中的一些实施例中,通过一致性散列函数产生的每个可能的散列值都被映射到集群中的节点,并且每个节点被映射到至少一个可能的散列值。因此,集群的每个节点都在主动处理至少一个流的有状态服务。为了确保为每个流正确执行有状态服务,在流的生命周期期间,将每个流分配给集群中的节点。分配给流的节点管理和维护与流相关的状态信息。在一些实施例中,流的标识符用于将属于该流的分组引导到所分配的节点。[0004]在从ECMP过程接收到分组之后,在一些实施例中,节点识别流的所有者节点,并将分组转发到识别出的所有者节点。在一些实施例中,边缘集群中的每个节点对分组中的流标识符例如,源(IP地址、源端口、目的地(IP地址、目的地端口、传输协议的五元组执行一致性散列,以便识别流的所有者节点。[0005]在一些实施例中,由特定流的一致性散列识别出的所有者节点不是对流执行有状态服务最合适的边缘节点。当通过一致性散列识别出的流的所有者节点不具有正确处理流所需的必要状态信息,而是这种状态信息被保持在集群中的另一个节点处时,情况就是这样。该另一个节点可以是流的前所有者节点,或者可以是需要其状态信息来正确处理该流的相关流的所有者节点,为了提供一致性有状态服务,在一些实施例中,通过一致性散列识别出的所有者节点将分组委派给其中保持状态信息的节点。[0006]—些实施例允许集群中的异构服务支持。在这些实施例中的一些实施例中,一致性散列函数是基于被调用以服务流的服务的类型。具体而言,在一些实施例中,不同的节点集合用于不同的服务,即,不同的服务基于不同的节点集合具有不同的一致性散列函数。[0007]在一些实施例中,流委派是基于驻留在边缘集群的节点中的固定流(pinnedflow表和间接表。间接表和固定流表中的每个条目对应于流。每个间接表条目指示其边缘节点根据条目转发或委派属于流的分组。用于流的固定流表中的每个条目指示其边缘节点本地处理流因此固定或锚定流并且为流提供有状态服务,而不管节点是否是流的所有者节点。不是所有者节点将分组转发到流的状态信息所保持处的委派节点,而是一些实施例将状态信息转发给所有者节点。[0008]在一些实施例中,所有者节点的标识符不仅基于所使用的散列函数,而且还基于集群中的边缘节点的成员资格。换句话说,确定哪个边缘节点是给定流的所有者节点部分地基于多少边缘节点在能够提供有状态服务的边缘集群中。因此,边缘集群中的成员资格的任何变化将更改一致性散列的结果。边缘集群的大小可以被改变以添加新节点或去除现有节点。一些实施例允许这种动态地,即,在边缘集群正在主动处理利用有状态网络服务的网络流量的同时,调整边缘集群的大小。流经边缘的现有流量在集群的成员资格改变期间和之后继续被处理。为了通过调整边缘集群的大小不间断地提供有状态服务,一些实施例在其原始所有者节点处为现有流锚定有状态服务,直到这些现有流完成。在一些实施例中,边缘集群中的节点将属于现有流的分组转发到其原始所有者节点,其原始所有者节点仍然维持有状态服务所需的现有流的状态信息。[0009]在一些实施例中,边缘节点的去除在不中断由边缘集群提供的有状态服务的情况下优雅地完成。对于这些实施例中的一些实施例,现有流的有状态处理在节点去除过程期间被保持在其原始所有者节点上。[0010]在一些实施例中,当驻留在第一节点上的第一流的状态信息是分配给第二节点的第二流的必要状态信息时,流的委派也是必需的。在一些实施例中,第一流和第二流是通过一致性散列分配给不同所有者节点的相关流。在一些实施例中,当相同过程的控制流和数据流被分配给不同所有者节点时,会发生这种情况,因为它们具有不同的流标识符。为了确保相关流在相同节点上维护的相同状态信息集合中操作,一些实施例使用流委派来强制相关流被同一节点有状态地进行处理,即使这两个相关流通过一致性散列被散列到不同的所有者节点。[0011]在一些实施例中,根据原始地址的流的所有者节点根据转换的DNAT地址将间接消息推送到流的所有者节点,以便将流的分组保持在同一节点上。结果,由转换的DNAT地址识别出的所有者节点具有用于将流的分组委派给通过原始地址识别出的所有者节点的间接表条目,其具有固定流表条目,以基于DNAT地址接收和处理具有流标识符的分组。在一些其它实施例中,不是进行流委派,而是执行DNAT的边缘集群在不使用可以被转换的目的地地址的情况下确定所有者节点。换句话说,集群只对不受DNAT影响的字段例如,源地址字段、源端口字段、协议字段应用一致性散列。[0012]在SNAT的情况下,集群中的边缘节点改变传出南向分组的源地址。分组的SNAT在通过其流的所有者节点路由之后发生。在一些实施例中,边缘集群中的每个节点在执行地址转换时使用其自己的唯一SNAT地址。返回北向流量基于源地址字段中的那些唯一SNAT地址被转发到相同的所有者节点。所有者节点然后在维护有状态SNAT过程的状态的同时应用逆NAT。[0013]前面的发明内容旨在用作对本发明的一些实施例的简要介绍。它并不意味着是对本文档中公开的所有发明性主题的介绍或概述。以下的具体实施方式和在具体实施方式中提及的附图将进一步描述在本发明内容中描述的实施例以及其它实施例。相应地,为了理解本文档描述的所有实施例,需要对发明内容、具体实施方式和附图进行全面地审查。此夕卜,所要求保护的主题不受发明内容、具体实施方式和附图中的说明性细节的限制,而是要由所附权利要求来限定,因为所要求保护的主题可以在不脱离本主题的精神的情况下以其它特定形式来体现。附图说明[0014]本发明的新颖特征在所附权利要求中阐述。但是,为了解释的目的,在以下图中阐述了本发明的若干实施例。[0015]图1概念性地示出了网络中的节点集群,其中网络流量被分发到用于执行有状态服务的集群中的节点。[0016]图2a-b示出了包括用于处理和或过滤进出网络的流量的多个边缘节点的边缘集群。[0017]图3概念性地示出了基于网络中的流的一致性散列将有状态服务分发到节点集群。[0018]图4示出了基于一致性散列和ECMP在集群中的节点之间转发分组。[0019]图5示出了网络中属于相同流的北向和南向流量的有状态处理。[0020]图6a-b概念性地示出了其中基于所提供的服务流被分配给不同的节点集合的集群。[0021]图7概念性地示出了用于确保使用流的所有者节点一致性地执行流的有状态过程的过程。[0022]图8示出了将分组从流的所有者节点委派给边缘集群内的另一个节点。[0023]图9概念性地示出了用于确定边缘节点是否应该转发接收到的分组或者对接收到的分组执行有状态过程的过程。[0024]图10示出了将状态信息转发到通过一致性散列识别出的所有者节点。[0025]图11示出了边缘集群的成员资格的变化如何改变一致性散列将流分配给边缘节点。[0026]图12a_b示出了由于向边缘集群添加新节点而导致的分组的转发。[0027]图13概念性地示出了在新添加的节点的学习模式期间和之后用于边缘集群的ECMP过程。[0028]图14示出了网络管理器和边缘节点之间的控制消息的示例序列。[0029]图15概念性地示出了用于在集群调整大小期间在边缘节点处管理这些表的过程。[0030]图16-17概念性地示出了用于基于固定流表、间接表和新流表在集群中的边缘节点之间进行分组委派的过程。[0031]图18概念性地示出了其中现有流被锚定到其原始所有者节点的示例节点去除操作。[0032]图19示出了在用于去除节点的学习模式期间和之后的边缘集群的操作。[0033]图20示出了使用流委派在同一节点处处理相关流。[0034]图21概念性地示出了用于建立流委派以便在边缘节点的集群中有状态地处理相关流的过程。[0035]图22a概念性地示出了由边缘集群执行的示例DNAT服务。[0036]图22b示出了由边缘集群使用流委派来提供有状态DNAT服务。[0037]图23a_b示出了当执行DNAT时不使用目的地地址字段用于节点分配的边缘集群。[0038]图24a_b示出了边缘集群中的节点如何提供有状态的SNAT服务。[0039]图25示出了具有被分组成集群或部分的主机机器的数据中心。[0040]图26示出了数据中心,数据中心包括主机机器的集群或部分,其主要托管用作用于其它集群中的计算VM的边缘节点的边缘服务VM。[0041]图27示出了用于不同租户的逻辑网络,其中每个租户由用作逻辑网络的边缘服务集群的一组边缘服务VM服务。[0042]图28示出了正在操作虚拟化软件的示例主机机器。[0043]图29示出了正在主机机器中运行的边缘服务VM。[0044]图30概念性地示出了实现本发明的一些实施例的电子系统。具体实施方式[0045]在以下描述中,出于解释的目的阐述了许多细节。但是,本领域普通技术人员将认识到,本发明可以在不使用这些具体细节的情况下进行实践。在其它情况下,众所周知的结构和设备以框图的形式示出,以便防止用不必要的细节模糊本发明的描述。[0046]为了使得能够在边缘处动态缩放网络服务,一些实施例提供能够添加新节点或去除现有节点,同时保持通过有状态服务的流的紧密度affinity的系统和方法。一些实施例提供可以动态调整大小以操纵和处理利用有状态网络服务的网络流量的网络节点集群。流经边缘的现有流量在集群成员资格更改期间和之后继续工作。在一些实施例中,集群中的所有节点以活动-活动模式操作,即,它们正在接收和处理流量流,从而最大化可用处理能力的利用率。[0047]为了创建在网络或网络段边缘处执行有状态服务的动态可扩展的节点集群,一些实施例将流分发到集群的不同节点,使得集群的所有节点都在主动参与有状态服务。在一些实施例中,流通过一致性散列函数散列到集群的节点中。一致性散列函数是在集群的节点之上(或基于集群的成员资格),使得不同的流将被几乎均匀地分发到集群的不同节点。在这些实施例中的一些实施例中,通过一致性散列函数产生的每个可能的散列值都被映射到集群中的节点,并且每个节点被映射到至少一个可能的散列值。因此,集群的每个节点都在主动处理至少一个流的有状态服务。[0048]为了确保为每个流正确执行有状态服务,在流的生命周期期间,将每个流分配给集群中的节点。分配给流的节点管理和维护与流相关的状态信息。在一些实施例中,流的标识符用于将属于该流的分组引导到所分配的节点。对于一些实施例,图1概念性地示出了网络100中的节点集群110,其中网络流量被分发到用于执行有状态服务的集群中的节点。集群中的流量分发通过使用流标识符支持流与其分配的节点之间的紧密度或对应关系。[0049]如图所示,网络100包括服务集群110,其包括能够向网络提供服务的处理节点111-113。在一些实施例中,由集群110提供的服务包括网络地址转换NAT和防火墙。在一些实施例中,这些服务在网络的边缘处实现,用于处理和或过滤进出网络的流量。因此,这些服务有时被称为边缘服务,并且集群110中执行这些边缘服务的节点被称为边缘节点。在一些实施例中,由集群110中的节点提供的服务是关于流的有状态服务。换句话说,其任务是提供流的有状态服务的节点需要维护和管理流的状态。[0050]—些实施例中的流涉及属于传输层(S卩,层4或L4连接或会话的分组集合。在一些实施例中,处理流的节点包括有状态引擎,以跟踪在传输层连接上发生的协议交换,以便提供有状态服务例如,根据一组规则做出防火墙评估)。在一些实施例中,传输层连接基于传输控制协议TCP,并且因此L4或传输层连接被称为TCP连接。[0051]如图所示,集群110正在接收包括分组150的网络流量,分组150包括用于L2、L3和L4层的报头。在一些实施例中,分组的L2报头包括源和目的地MAC媒体访问控制地址,L3报头包括源和目的地IP地址,并且L4报头包括源端口、目的地端口以及传输协议标识符。在一些实施例中,源IP地址、目的地IP地址、源端口、目的地端口和协议共同形成用于唯一识别流的标识符元组例如,五元组传输连接标识符)。[0052]如所提到的,在一些实施例中,每个流被分配给节点,使得流的状态信息由该节点维护和管理。在一些实施例中,被分配操纵特定流的节点被称为流的所有者节点。为了确保属于流的分组由集群中的相同节点(即,流的所有者节点)处理,一些实施例使用分组中的流标识符来决定服务集群中的哪个节点应该用于处理分组。如图所示,流“xl”、“x2”和“x3”分别基于流xl、x2和x3的流标识符分配给111节点A。流“yl”、“y2”和“y3”分别基于流yl、y2和y3的流标识符分配给112节点B。基于流zl、z2和z3分别基于流“zl”、“z2”和“z3”的流标识符分配给113节点C。这种分配操作通过集群110中的基于流的节点分配模块160概念上示出。在一些实施例中,这种分配操作由实现节点集群的计算设备或由各个节点111-113自身执行。[0053]节点是计算设备或在计算设备上运行的软件,其基于网络分组中的数据执行操作。一些网络节点接收和或转发分组。一些网络节点基于数据分组中的数据执行计算或其它应用(例如,计算节点)。在一些实施例中,节点由独立的物理路由器实现。在一些实施例中,节点是在运行管理程序以用作其主机机器的计算设备上实现的虚拟机。在一些实施例中,一个计算设备托管作为网络中的节点的多个虚拟机。节点111-113是在网络100和外部世界例如,互联网或网络的其它部分之间的分组上提供服务操作例如,NAT或防火墙)的边缘服务节点。[0054]节点111-113中的每一个还能够为属于分配给节点的流的分组提供所需的有状态服务。对于有状态服务,在一些实施例中,节点将为其处理的每个流创建状态。因此,每个流的状态由一个节点(即,流的所有者节点)一致性地维护。如图所示,节点111节点A是流xl、x2和x3的所有者节点并且维护其状态信息用于有状态处理。同样,节点112节点B是流yl、y2和y3的所有者节点并且维护其状态,以及节点113节点C是流zl、z2和z3的所有者节点并且维护其状态。在一些实施例中,相同集群的节点例如,集群110的节点111-113属于相同的L2段,并且可以通过L2级协议向彼此转发分组。[0055]在一些实施例中,边缘集群110由包括一组节点的容器定义。在一些实施例中,在一些实施例中,节点容器(以及因此对应的边缘集群在一些实施例中由网络管理器使用VM模板来定义。网络管理员发送和接收到容器中的节点的事件。网络管理器还管理容器中节点的生命周期。在一些实施例中,为集群面向“北”(与计算节点)的接口定义了“北”容器,以便促进用于南向流量的资源例如,边缘节点的地址)的配置。同样,为集群面向“南”(与外部世界或互联网)的接口定义了“南”容器,以便促进用于北向流量的资源的配置。[0056]下面描述了本发明的若干更详细的实施例。第I部分进一步描述其中基于流的有状态网络服务在集群中的边缘服务节点之间分布的系统。第II部分描述用于动态调整边缘服务节点集群大小的方法。第III部分描述边缘服务节点集群对相关流的处理。第IV部分描述当将有状态服务分发到边缘节点集群时的地址转换处理。第V部分描述被实现为由计算设备托管的虚拟机的边缘服务节点。第VI部分描述用作边缘节点VM的主机机器的示例计算设备。最后,第IV部分描述实现本发明的一些实施例的电子系统。[0057]I.将有状态服务分发到边缘节点[0058]a.ECMP[0059]如所提到的,集群110是在网络100和外部世界之间提供边缘服务的边缘集群。在一些实施例中,来自外部的传入流量使用ECMP等成本多路径路由)分发给任何数量的边缘节点。在一些实施例中,边缘节点通过BGP边界网关协议或OSPF开放最短路径优先路由的通告与相邻路由器一起参与ECMP。进入到外部世界中的传出流量同样可以分发给参与ECMP过程的任何边缘节点。[0060]图2a-b示出了边缘集群210,其包括用于处理和或过滤进出网络或网络段200的流量的多个边缘节点211-214。网络或网络段200是互联的计算和通信资源的集合,其与外部世界290例如,互联网或其它网段)的通信流量被逻辑上位于与外部世界接口的网络200的“边缘”处的边缘集群210控制、监视或过滤。[0061]—些实施例涉及作为南向流量从外部世界进入网络的网络流量和作为北向流量离开网络进入到外部世界中的流量。如图所示,网络包括通过边缘集群210接收来自外部世界290的网络流量并且因此用作北向流量的终点的多个计算节点211-214。计算节点还生成通过边缘集群210去往外部世界290的流量或转发流量),并且因此是南向流量的起源。[0062]图2a示出了通过边缘集群210进入到计算节点221-224中从外部世界290例如,互联网或其它网络段进入到网络200中的向北流量。如图所示,北向流量由ECMP路由器240分发给边缘集群210中的边缘节点211-214进行有状态处理。经处理的北向流量然后通过L2交换或L3路由被转发到计算节点221-224。图2b示出了来自计算节点221-224通过边缘集群210到外部世界290的南向流量。南向流量由ECMP路由器240域网络200中的另一个ECMP路由器分发到边缘集群210中的边缘节点211-214进行有状态处理。经处理的南向流量然后被转发到外部世界290例如,互联网或其它网段)。[0063]b.所有者节点[0064]在一些实施例中,流的两个方向上的流量被分配为由同一节点操纵,以便确保有状态网络服务正确工作。一些实施例基于流标识符将分组分配给边缘节点。在一些实施例中,ECMP是独立于流标识的操作。不能保证ECMP会一致性地将相同流的分组分发到同一边缘节点进行有状态处理。因此,一些实施例将无状态一致性散列函数应用到每个分组的流标识符,以便识别其流的所有者节点。对于每个给定的流,一致性散列为流的所有分组产生一致性散列值。这确保了属于相同流的分组始终由同一节点(即,流的所有者节点)进行有状态地处理,即使使用了ECMP来分发分组。[0065]图3概念性地示出了基于网络300中的流的一致性散列将有状态服务分发到节点的集群310。集群300包括节点311-314。如图所示,网络300中的分组350基于ECMP过程320被分发到节点311。但是,这些分组350所属的流根据一致性散列函数330被分配给四个节点311-314。如图所示,流Fl被散列到节点311、流F2被散列到节点312、流F3被散列到节点313并且流F4被散列到节点314。但是,在一些实施例中,不能保证ECMP过程320将把分组路由到分组的流被散列到的节点。例如,即使一致性散列330将把流F2散列到节点312,也不能保证属于流F2的分组被ECMP320路由到节点312。[0066]在从ECMP过程接收到分组时,在一些实施例中,节点识别流的所有者节点,并将分组转发到识别出的所有者节点。在一些实施例中,边缘集群中的每个节点对分组中的流标识符执行一致性散列(例如,源(IP地址、源端口、目的地(IP地址、目的地端口、传输协议的五元组)以便识别流的所有者节点。图4示出了在ECMP路由之后根据流的一致性散列来转发分组。[0067]图4示出了基于一致性散列和ECMP在集群310中的节点311-314之间转发分组。节点311-314分别是流Fl、F2、F3和F4的所有者节点。ECMP将分组451-454分发到集群310的节点。在四个阶段401-404中,该图分别示出了分组451-454的转发。[0068]在第一阶段401,ECMP过程将分组451路由到节点311节点A。分组451属于流F2。节点311对分组451的流标识符执行一致性散列,并且确定流F2的所有者节点是节点312节点B。基于该确定,节点311将分组451转发到节点312进行有状态处理,其中流F2的状态被保持。如图所示,在节点312处保持的流F2的状态变为“S1”。[0069]在第二阶段402,ECMP过程将分组452路由到节点312节点B。分组451也属于流F2。节点312对分组452的流标识符执行一致性散列,并确定流F2的所有者节点是节点312本身。基于该确定,节点312保持分组452用于有状态处理。如图所示,由于分组452的有状态处理,流F2在节点312处的状态已被更新为“S2”。[0070]在第三阶段403,ECMP过程将分组453路由到节点313节点C。分组453属于流程F4。节点313对分组453的流标识符执行一致性散列,并确定流F4的所有者节点是节点314节点D。基于该确定,节点313将分组453转发到节点314进行有状态处理,其中流F4的状态被保持。如图所示,保持在节点312处的流F4的状态变为“S1”。另一方面,流F2的状态在节点312处仍然保持为“S2”。[0071]在第四阶段404,ECMP过程将分组454路由到节点314节点D。分组454属于流F2。节点314对分组454的流标识符执行一致性散列,并确定流F2的所有者节点是节点312。基于该确定,节点314将分组454转发到节点432进行有状态处理,其中F2的状态被保持。如图所示,流F2的状态已变为“S3”。[0072]如所提到的,在一些实施例中,边缘集群操纵进入到网络中的北向流量以及离开网络的南向流量。不管流量的方向和所采用的ECMP过程如何,都使用一致性散列来一致性地识别流的所有者节点。换句话说,不管流量的方向如何,属于同一流的分组将在同一所有者节点处被有状态地进行处理。[0073]图5示出了属于网络300中的相同流的北向和南向流量的有状态处理。图5示出了北向分组551的转发路径和南向分组552的转发路径。分组551和552两者都属于流F2,其所有者节点是节点B312。[0074]如图所示,北向分组551由ECMP路由到节点C313。节点C又通过一致性散列将北向分组551转发到节点B312。南向分组552由ECMP路由到节点A311。节点A311然后通过一致性散列将分组552转发到节点B312。通过使用一致性散列,即使分组551和552是不同的方向,节点C和节点A两者也识别流F2的同一所有者节点节点B312。[0075]—些实施例允许集群中的异构服务支持。在这些实施例中的一些实施例中,一致性散列函数是基于被调用以服务流的服务的类型。具体而言,在一些实施例中,不同的节点集合用于不同的服务,即,不同的服务基于不同的节点集合具有不同的一致性散列函数。例如,一些实施例具有用于ALG的第一节点集合、用于NAT的第二节点集合和用于防火墙的第三节点集合。因此当分组到达时,节点将分组的流映射到服务,比如NAT,并且使用(为NAT供给的)输入节点集进行一致性散列、照顾NAT服务、并且根据散列结果将分组转发到所有者节点。在一些实施例中,基于例如服务是“慢路径”服务例如,ALG还是“快路径”服务例如,防火墙),不同的服务在集群中被分配不同的节点集合。[0076]图6a_b概念性地示出了其中基于所提供的服务流该分配给不同的节点集合的集群600。具体而言,传入分组的流的所有者节点由特定于所提供的服务的一致性散列来识另IJ。如图6a所示,使用第一一致性散列函数621将流分配到集群600中用于第一边缘服务例如,ALG的节点,而使用第二一致性散列函数622将流分配到集群600中用于第二边缘服务例如,防火墙的节点。[0077]集群600具有节点611-617节点A至G。如图所示,第一一致性散列函数621是在节点611、612、614和615节点六3、:4上的散列函数。第二一致函数622是在节点612、613、615、616、617节点匕:4、?、6上的散列函数。换句话说,使用第一边缘服务的流只分配给节点A、B、C和E,并且使用第二边缘服务的流只分配给节点B、C、E、F和G。因此,如图6b所示,节点A、B、D和E正在维护使用第一边缘服务的流的状态,而节点B、C、E、F和G正在维护使用第二边服务的流的状态。在一些实施例中,集群中的一些节点可以提供多种不同的边缘服务。例如,节点612和615B和E向第一边缘服务和第二边缘服务两者提供有状态的边缘服务,并且因此可以通过第一一致性散列函数621或第二一致性散列函数622来选择。在未示出的一些实施例中,集群中的每个节点只能提供一种类型的边缘服务。[0078]对于一些实施例,图7概念性地示出了用于确保使用流的所有者节点一致性地执行流的有状态过程,而不管流的分组最初例如,由ECMP路由到哪里的过程700。在一些实施例中,过程700由边缘服务集群中的边缘节点执行。过程700在当它在网络边缘处接收到或者南向离开到外部世界或者北向进入到网络中的分组时开始。在一些实施例中,该分组最初由ECMP分发给边缘节点。[0079]该过程识别(在710处传入分组的流。在一些实施例中,这种识别是基于分组中的流标识符,诸如源目的地地址、源目的地端口和在分组的L3和L4报头中的协议字段。[0080]然后,该过程通过例如将流标识符散列成一致性散列值来计算在720处识别出的流的一致性散列。在一些实施例中,不同的一致性散列函数用于不同的服务,如以上参考图6描述的。在这些实施例中的一些实施例中,该过程使用传入分组的流标识符来识别特定的边缘服务,并且然后对识别出的边缘服务应用对应的一致性散列函数。[0081]然后,该过程映射在730处一致性散列值,以识别流的所有者节点。接下来,该过程确定在740处运行过程700的边缘节点是否是流的所有者节点。如果边缘节点本身是流的所有者节点,则过程进行到750,以基于流来本地执行对分组的有状态服务。如果边缘节点本身不是流的所有者节点,则过程进行到760,以将分组转发到识别出的所有者节点,使得所有者节点可以基于流执行有状态服务。然后过程700结束。[0082]c.委派流[0083]在一些实施例中,由特定流的一致性散列识别出的所有者节点不是对流执行有状态服务最合适的边缘节点。当通过一致性散列识别出的流的所有者节点不具有正确处理流所需的必要状态信息,而是这种状态信息被保持在集群中的另一个节点处时,情况就是这样。该另一个节点可以是流的前所有者节点,或者可以是需要其状态信息来正确处理该流的相关流的所有者节点,为了提供一致性有状态服务,在一些实施例中,通过一致性散列识别出的所有者节点将分组委派给其中保持状态信息的节点。[0084]在一些实施例中,流委派是基于驻留在边缘集群的节点中的固定流表和间接表。间接表和固定流表中的每个条目对应于流。每个间接表条目指示其边缘节点根据条目转发或委派属于流的分组。用于流的固定流表中的每个条目指示其边缘节点本地处理流(因此固定或锚定流并且为流提供有状态服务,而不管节点是否是流的所有者节点。[0085]图8示出了将分组从流的所有者节点委派给边缘集群810内的另一个节点。边缘集群包括边缘节点811-814分别为节点A、B、C和D,每个节点可以在边缘处为流提供有状态服务。边缘节点812节点B通过一致性散列被分配作为流“F2”的所有者节点。但是,所有者节点B812已经将流F2委派给作为被委派节点的节点D814,使得节点D而不是节点B将处理流F2的有状态处理。[0086]如图所示,流F2的委派是根据分别在所有者节点B流F2的所有者节点)和节点D被委派节点)中实现的间接表820和固定流表830完成的。节点B的间接表820具有指向节点D的用于流F2的条目821。该条目821指示节点B将属于流F2的分组转发到节点D。节点D的固定流表830具有指示节点D对属于流F2的分组执行有状态服务的条目831,即使节点D不是F2的所有者节点。节点D814还具有跟踪其正在处理的流包括固定流F2的状态的本地流表840。在一些实施例(未示出)中,本地流表和固定流表被实现为一个表,使得边缘节点可以使用本地流表中的条目来确定哪些流被固定到节点。[0087]图8还示出了边缘集群810中的示例分组转发和流委派操作。该示例示出了属于流“F2”的分组851的转发。[0088]如图所示,ECMP过程851将分组851转发到节点C813。但是,节点C既不是流F2的所有者节点,也不是具有作为固定流的F2的节点。由于节点B是根据一致性散列的F2的所有者节点,所以分组851被转发到节点B。但是,节点B的间接表820具有指向节点D的用于流F2的条目821,因此节点B将分组851转发到节点D。节点D虽然根据一致性散列不是F2的所有者节点,但是仍然接受和执行对分组851的有状态服务。这是因为节点D的固定流表830具有用于流F2的条目831。(虽然未示出,但是如果ECMP过程直接将F2分组路由到节点D,则节点D将基于其用于F2的固定流表条目立即执行有状态服务,而不是基于一致性散列来转发分组。)[0089]对于一些实施例,图9概念性地示出了用于确定边缘节点是否应该转发接收到的分组或者对接收到的分组执行有状态过程的过程900。当边缘节点接收到传入的分组时,过程900开始。这种分组可以是进入到网络中的北向流量或离开到外部世界例如,互联网、数据中心的其它部分或网络的其它段的南向流量的一部分。[0090]该过程识别(在910处传入分组所属的流。在一些实施例中,分组的流可从分组的L2-L4报头中的地址端口字段识别(例如,五元组)。然后,该过程确定在915处)识别出的流是否在边缘节点的固定流表中。固定流表中的对应条目向边缘节点指示该流要在本地进行有状态地处理,而不管一致性散列。如果识别出的流是在固定流表中(即,具有对应的条目),则该过程进行到950,以对传入的分组执行有状态服务。否则,该过程进行到920。[0091]在920处,该过程执行一致性散列并计算用于流的散列值。然后使用计算出的散列值来确定或识别流的所有者节点。一致性散列只限于边缘集群中的节点,因此每个流将映射到集群中的仅一个节点。[0092]然后,该过程在930处)确定执行该过程的边缘节点本身是否是识别出的流的所有者节点。如果是,则该过程进行到940。如果该边缘节点不是识别出的流的所有者,则该过程进行到970。[0093]在940处,该过程确定识别出的流是否在边缘节点的间接表中。在该操作中,该过程已经确定运行该过程的边缘节点是通过一致性散列识别出的流的所有者节点。但是,间接表中的对应条目将向边缘节点指示流必须被转发到别处进行有状态处理。如果识别出的流在间接表中具有对应的条目,则该过程进行到960。否则,该过程进行到950,以作为识别出的流的所有者节点对传入分组执行有状态服务。[0094]在950处,该过程对分组执行所需的有状态服务例如,防火墙、NAT。在一些实施例中,该操作是基于由边缘节点维护的状态信息。然后,基于分组例如,在TCP连接开始时的SYN、ACK分组的内容或类型,维护的状态信息被相应地更新。然后过程900结束。[0095]在960处,该过程将分组转发到集群中的被委派节点进行有状态处理(即使运行该过程的边缘节点是流的所有者节点)。在一些实施例中,被委派节点由用于识别出的流的间接表中的条目(例如,识别用于F2的节点D的间接表820中的条目821来识别。然后过程900结束。[0096]在970处,该过程将分组转发到流的所有者节点。在一些实施例中,集群的节点处于相同的L2段中,使得该转发基于L2协议。然后过程900结束。[0097]d.传送状态信息[0098]如上所述,在一些实施例中,通过一致性散列被确定为流的所有者节点的节点不具有必要的状态信息来正确处理流。以上部分I.c描述了其中所有者节点将属于流的分组委派给正在维护必要的状态信息的节点(例如,先前的所有者节点)的方法。不是所有者节点将分组转发到保持流的状态信息的委派节点,而是一些实施例将状态信息转发到所有者节点。[0099]对于一些实施例,图10示出了将状态信息转发到通过一致性散列识别出的所有者节点。该图示出了在三个阶段1001-1003中在边缘集群810中转发状态信息。[0100]第一阶段1001示出了在其原始所有者节点814节点D处维护的流F4的状态信息。因为节点814已经为流F4执行有状态服务,因此它具有用于该流的状态信息。[0101]第二阶段1002示出了通过一致性散列选择不同的节点,即节点B812作为流F4的所有者节点。所有者节点分配中的这种改变可以由于边缘集群的成员资格的变化例如,节点添加或去除)或由于所有者节点分配覆盖例如,相关流而发生。但是,用于F4的状态信息仍然被保持在节点D处,因此节点B不能在没有状态信息的情况下向流F4正确提供有状态服务。[0102]第三阶段1003示出了用于流F4的状态信息的转发。在一些实施例中,这种转发是通过集群中的节点之间的控制平面消息,或者通过利用网络管理器的控制消息。F4的状态信息从节点D传送或复制到节点B,因此该信息将可用于节点B为流F4提供有状态服务。[0103]II.动态调整边缘节点集群的大小[0104]在一些实施例中,所有者节点的标识不仅基于所使用的散列函数,而且还基于集群中的边缘节点的成员资格。换句话说,确定哪个边缘节点是给定流的所有者节点部分地基于边缘集群中有多少边缘节点能够提供有状态服务。因此,边缘集群中的成员资格的任何变化将更改一致性散列的结果。例如,当边缘集群中存在M个节点时,一致性散列将识别第一节点作为流的所有者节点,但是当集群中存在N个节点时,将标识不同的第二节点作为流的所有者节点。[0105]如上所述,边缘集群的大小可以被改变以添加新节点或去除现有节点。一些实施例允许这种动态地,即,在边缘集群正在主动处理利用有状态网络服务的网络流量的同时,调整边缘集群的大小。流经边缘的现有流量在集群的成员资格改变期间和之后继续被处理。为了通过调整边缘集群的大小不间断地提供有状态服务,一些实施例在其原始所有者节点处为现有流锚定有状态服务,直到这些现有流完成。在一些实施例中,边缘集群中的节点将属于现有流的分组转发到其原始所有者节点,其原始所有者节点仍然维护有状态服务所需的现有流的状态ig息。[0106]a.添加边缘节点[0107]图11示出了边缘集群810的成员资格的变化如何改变一致性散列将流分配给边缘节点。具体而言,该图示出了在两个阶段1101-1102中将新的第五节点E815添加到图8的集群810的效果。边缘集群810最初具有四个节点811-814节点A、B、C、D。[0108]第一阶段1101示出了在添加节点E之前通过一致性散列的所有者节点的分配。如图所示,在添加节点E之前,流的一致性散列是在节点A、B、C和D之上以便从这四个节点当中识别所有者节点。在这种一致性散列函数下,流Fl和F5被分配给节点ASll,流F2和F6被分配给节点B812,流F3和F7被分配给节点C813,并且流F4和F8被分配给节点D814。对于该示例,假定流Fl-F8是由节点A、B、C和D有状态处理的活动的、正在进行的流。[0109]第二阶段1101示出了新节点E的添加及其对一致性散列的影响。随着添加节点E,一致性散列在节点A、B、C、D和E之上,以便从这五个节点当中识别所有者节点。因此,流Fl-F8中的一些被重新分配给不同的所有者节点。在这个示例中,除F8之外的每个流都通过一致性散列分配不同的所有者节点。节点A现在是F3的所有者节点,节点B现在是Fl的所有者节点,节点C现在是F4和F6的所有者节点,并且节点D现在是F7和F8的所有者节点。新添加的节点被分配为F2和F5的所有者节点。[0110]虽然新节点的添加已经使现有流F1-F8被分配给新的所有者节点,但是现有流的状态信息仍然被保持在其原始所有者节点处。为了对这些流正确继续有状态服务,一些实施例使用间接表和固定流表来委派分组,因此属于现有流的分组用正确的状态信息被处理。[0111]图12a-b示出了由于将新节点815添加到边缘集群810而导致的分组的转发。这种添加发生在节点B812仍然为流F2执行有状态服务的同时,在添加新节点之前,节点B是流F2的原始所有者节点。该图示出了在四个阶段1201-1204中对节点添加的处理。[0112]第一阶段1201示出了在添加节点E815之前边缘集群810的状态。如图所示,节点B812是通过一致性散列的流F2的所有者节点。它正在维护与F2相关的状态信息,并且即使当ECMP最初将分组路由到其它地方,属于F2的分组也被转发到节点B进行有状态处理。[0113]第二阶段1202示出了在添加新节点(节点E815之后立即由集群810处理流F2。节点815节点E的添加使得一致性散列将新节点815识别为流F2的所有者,而不是节点B812F2的原始所有者节点)。但是,用于F2的状态信息仍然被保持在节点B处。节点E815通过一致性散列的F2的新所有者节点)因此将流F2中的分组转发到节点B812F2的原始所有者节点)用于有状态服务,而不是自身执行有状态服务。[0114]如图所示,节点E具有间接表1220,其具有用于F2的指向节点B的条目1221。到达节点E处属于F2的任何分组无论是通过ECMP还是通过一致性散列都将根据该间接表条目被转发委派给节点B。此外,节点B具有固定流表1230,其具有用于流F2的条目1231。该条目指示节点B保持属于F2的任何分组用于处理,而不是将其转发到其它地方,即使它不再是通过一致性散列的所有者节点。[0115]第三阶段1203示出了在添加节点E期间新流F9的处理。新流例如,F9是在调整集群大小之后开始的流。这样的流没有原始所有者节点,并且它没有正确的有状态处理所需的现有状态信息。因此,新流可以由其所有者节点在没有委派的情况下根据一致性散列进行处理。在一些实施例中,每个节点保持新的流表例如,1240以跟踪在调整集群大小期间被添加的新流。这是必要的,因为在一些实施例中,新添加的节点不被ECMP过程识别,并且不能直接从ECMP接收分组。从ECMP接收分组的节点可以参考新的流表,并且直接将分组转发到所有者节点,即使该所有者节点是新添加的节点。在该示例中,节点C813从ECMP接收分组1253,并且基于节点C的新流表1240将分组直接转发到节点E,其中新流表1240具有对应于新流F9的条目1241。虽然节点E是集群中的新节点,但是它能够作为F9的所有者节点立即处理流F9,因为F9是可以在不考虑现有状态信息的情况下进行处理的新流。[0116]第四阶段1204示出了由节点B完成流F2。由于F2是自从添加节点E之前的现有流,因此其完成还使得节点E不必基于其间接表1220将F2分组委派给节点B。节点B同样也不必在其用于F2的固定流表1230中保持条目。因此,新节点的添加被认为是完整的。但是,新流F9将继续由节点E处理直到其完成。但是,在一些实施例中,当F9的所有者节点(节点E加入ECMP并且因此不再被认为是新节点时,集群中的新流表例如,节点C中的新流表1240将清除其与F9相关的条目。[0117]在添加新节点之后,边缘集群被认为处于新节点的学习模式,直到新节点已加入ECMP过程并开始直接从ECMP接收分组。一旦出现这种情况,新的流表就不再需要,因为集群中的节点包括新添加的节点)可以接收ECMP分组,并且可以基于集群中所有节点上的一致性散列将分组转发到其流的合法所有者节点。固定流表和间接表可以保持操作,直到那些预先存在的流在节点添加之前的流完成其操作。图13概念性地示出了在新添加的节点的学习模式期间和之后用于边缘集群810的ECMP过程。该图示出了在四个阶段1301-1304中添加节点E。[0118]在集群被调整大小之前(S卩,稳定状态,图中未示出),节点A正在为流Fl和F5提供有状态服务,而节点B正在为流F2提供有状态服务,这是因为根据节点A、B、C和D上的一致性散列,节点A和B是Fl、F5和F2的所有者节点。ECMP过程正在将分组分发到集群中的所有四个节点。[0119]第一阶段1301示出了紧接着在添加节点E之后的边缘节点,S卩,集群810刚刚进入节点E的学习模式。在节点A、B、C、D和E上的新一致性散列下,流Fl的新所有者是节点B,而流F2和F5的新所有者是节点E。作为在添加节点E之前开始的现有流,流F1、F2和F5通过固定流表和间接表被锚定到其原始所有者节点。ECMP过程同时继续将分组分发到仅节点A、B、C和D。新节点E在学习模式期间将不会直接从ECMP过程接收分组。[0120]第二阶段1302示出由节点A完成流F5。这意味着节点A不再需要将F5作为固定流处理,并且节点E不再需要根据其间接表将F5的分组委派给节点A。[0121]第三阶段1303示出了新流F9的添加,其所有者节点是新添加的节点E。如图所示,在该阶段的ECMP过程仍然不向新添加的节点E分发分组,因此集群中的其它节点节点A、B、C、D将必须基于新流表中用于F9的条目将F9的ECMP分组转发到节点E进行有状态处理。[0122]第四阶段1304示出了在节点E的学习模式已经完成之后新稳定状态下的集群810。ECMP过程现在包括节点E,使得传入分组可以被分发到集群中的所有节点,包括新添加的节点E。新流F9还继续由节点E处理,但是集群810中的新流表中的F9的条目不再需要并且因此被清除。诸如Fl和F2的固定流S卩,在添加节点E之前预先存在的流继续通过间接表和固定流表在其原始所有者节点中被有状态地服务,直到那些流完成。[0123]在一些实施例中,将新节点添加到集群中由网络管理器控制。在一些实施例中,网络管理器通过与边缘集群中的节点交换控制平面消息来控制边缘集群的调整大小。图14示出了用于将新节点815节点E添加到边缘集群810中的、在网络管理器1499与边缘节点811-815节点A、B、C、D和E之间的控制消息1401-1414的示例序列。在消息交换序列之前,在集群810中只有节点811-814节点A、B、C和D是活动的。[0124]管理器1499分别将消息1401-1404发送到节点811-814,向这些节点通知新节点节点E要被添加到集群。管理器1499还将消息1405发送到新添加的节点815节点E。它用于向新节点节点E通知哪些节点在集群中,哪个将包括节点A、B、C、D和E。[0125]接下来,节点A向节点E发送消息1406,指示节点E将流F5中的分组转发到节点A例如,通过在其间接表中创建条目)。另一方面,节点B向节点E发送消息1407,指示节点E将流F2中的分组转发到节点B。生成消息1406和1407是因为新节点E的添加已使得流F5和F2的所有者节点分配从节点A和B转移到节点E,如参考以上图11-13的示例所讨论的。节点A和B然后继续将F5和F2作为固定流处理。[0126]当节点A已经完成固定流F5时,它向管理器1499发送消息1408以指示它已经完成固定流F5。同样,当节点B已经完成固定流F2时,它向管理器1499发送消息1409以指示它已经完成固定流F2。由于流F2和F5是其所有者节点是新添加的节点(节点E的固定流,因此管理器将理解节点E的学习模式是完整的,并且节点E可以参与ECMP。因此,管理器1499将消息1410发送到节点E,通知它开始ECMP过程。[0127]在这个示例(S卩,图11-13的示例)中,新的流F9在学习模式期间被散列到新节点节点E,并且因此当新流被散列到新节点时,每个现有节点具有用于流F9的新流表条目。在节点E的学习模式完成之后,管理器1499分别向节点811-814发送消息1411-1414,以清除其新流表中用于流F9的任何条目。[0128]如所提到的,通过调整边缘集群的大小,活动流的连续、不间断的有状态服务依赖于在被选择作为那些流的所有者节点的节点和仍然保持那些流的状态信息的节点之间的分组的委派。在一些实施例中,这些分组转发操作依赖于一组表,诸如间接表、固定流表和新流表,如以上参考图8和12所讨论的。对于一些实施例,图15概念性地示出了用于在集群调整大小期间在边缘节点处管理这些表的过程1500。[0129]当过程1500检测到(在1510处边缘集群中的成员资格的变化时,过程1500开始。成员资格的这种改变导致经由一致性散列的流到节点分配的变化。在一些实施例中,边缘节点知道这样的改变,因为它已经从网络控制器接收到新节点已被添加到集群的控制平面消息(例如,消息1401-1405。[0130]然后,该过程识别(在1520处在该边缘节点中不完整(S卩,仍然活动)但由于一致性散列变化而被分配给其它节点的活动流。接下来,该过程将识别出的流作为条目添加在1530处到其固定流表。这通知边缘节点对识别出的流的分组执行有状态服务,即使它不再是流的所有者节点。然后,该过程向识别出的流的所有者节点发送间接消息在1540处),使得所有者节点将知道把该流委派给这个边缘节点。[0131]接下来,该过程识别(在1550处不完整(S卩,在其它节点中仍然活动但是被散列到该节点的活动流。在一些实施例中,这是基于接收到的间接消息(例如,图14的消息1406和1407,间接消息由边缘节点生成,边缘节点具有已经被重新分配给该边缘节点的不完整流。然后,该过程将这些标识出的流作为条目添加在1560处到间接表。运行该过程的边缘节点将必须根据间接表中的那些条目委派这些流的分组。[0132]随着固定流表和间接表被更新,该过程接下来通过参考间接表、固定流表和新流表中的条目转发在1570处分组或者对分组执行有状态服务。在一些实施例中,当边缘节点遇到新开始的流时,新流表中的条目被更新。新流表的管理将在下面参考图16进一步描述。该过程然后报告(在1580处完成的固定流,并且在固定流表和间接表中去除(在1590处)用于那些已完成流的对应条目。在一些实施例中,完成固定流的边缘节点通过控制平面消息报告流完成,因此在其间接表中具有对应条目的边缘节点将知道去除那些条目并停止委派那些流。一些实施例包括在对应流不活动一段时间之后自动去除间接表和固定流表中的条目的超时机制。然后过程1500结束。[0133]图16-17概念性地示出了用于基于固定流表、间接表和新流表在集群中的边缘节点之间进行分组委派的过程1600和1700。图16的过程1600在新添加的节点的学习模式期间由现有边缘节点执行,而图17的过程1700在对应的学习模式期间由新添加的节点执行。[0134]图16的过程1600通过识别(在1610处传入分组的流开始。在一些实施例中,分组的流可从分组的L2-L4报头中的地址端口字段识别(例如,五元组)。然后,该过程确定在1615处识别出的流是否在边缘节点的固定流表中。固定流表中的对应条目向边缘节点指示流要在本地进行有状态地处理,而不管一致性散列。如果识别出的流在固定流表中(即,具有对应的条目),则该过程进行到1650以对传入分组执行有状态服务。否则,该过程进行到1620。[0135]在1620处,该过程执行一致性散列并产生用于流的散列值。然后使用计算出的散列值来确定或识别流的所有者节点。一致性散列包括新添加的节点,因此散列结果可以包括新添加的节点。[0136]然后,该过程确定在1630处执行该过程的边缘节点本身是否是识别出的流的所有者节点。如果是,则该过程进行到1640。如果该边缘节点不是识别出的流的所有者,则该过程进行到1670。[0137]在1640处,该过程确定识别出的流是否在边缘节点的间接表中。在这个操作中,该过程已经确定运行该过程的边缘节点是通过一致性散列识别出的流的所有者节点。但是,间接表中的对应条目将向边缘节点指示流必须被转发到其它地方进行有状态处理。如果识别出的流在间接表中具有对应的条目,则该过程进行到1660。否则,该过程进行到1650,以作为识别出的流的所有者节点对传入分组执行有状态服务。[0138]在1650处,该过程对分组执行所需的有状态服务例如,防火墙、NAT。在一些实施例中,这种操作是基于由边缘节点维护的状态信息。所维护的状态信息然后基于分组的内容相应地更新。然后过程1600结束。[0139]在1660处,该过程将分组转发到集群中的被委派节点进行有状态处理(即使运行该过程的边缘节点是流的所有者节点)。在一些实施例中,被委派节点由用于识别出的流的间接表中的条目来识别。然后过程1600结束。[0140]在1670处,该过程确定基于一致性散列的所有者节点是否是新添加的节点。如果所有者节点是新添加的节点,则处理进行到1680。否则,过程1600进行到1675以将分组转发到流的所有者节点。[0M1]在1680处,该过程确定流是否是分配给新节点的新流。与具有存储在其原始所有者节点中的现有状态信息的现有流不同,新流没有原始所有者节点或预先存在的状态信息,并且因此可以随便在其所有者节点处开始有状态处理,无论是新添加的节点还是现有节点。在一些实施例中,该过程通过检查其新流表中的条目来确定流是否为新流。如果分组的流是新添加的流,则该过程进行到1685。如果流不是新添加的流(S卩,预先存在的流),则该过程进行到1690。[0M2]在1685处,该过程更新边缘节点处的新流表,S卩,如果新流表中没有用于该流的条目,则该过程将对应的条目添加到新流表中。然后,该过程进行到1675以将分组转发到新流的所有者节点。[0143]在1675处,该过程将分组转发到流的所有者节点,所有者节点是根据包括新添加的节点的一致性散列识别出的节点。然后过程1600结束。[0144]在1690处,该过程仅计算现有节点上的流的散列(S卩,通过排除新添加的节点)。该散列产生流的原始所有者节点。如果流是现有流并且边缘节点在其间接表中还没有对应的条目,则需要此操作。因此,该过程必须基于集群中的现有节点不包括新添加的节点来计算散列值,以便确定重构哪个节点是流的原始所有者。然后,该过程基于该计算出的散列将分组转发到这个原始所有者。然后过程1600结束。[0145]图17的过程1700通过识别(在1710处传入分组的流开始。在一些实施例中,分组的流可从分组的L2-L4报头中的地址端口字段识别(例如,五元组)。[0M6]在1720处,该过程执行一致性散列并计算用于流的散列值。然后使用计算出的散列值来确定或识别流的所有者节点。一致性散列包括新添加的节点,因此散列结果可以包括新添加的节点。然后,该过程确定在1730处新添加的节点自身是否是识别出的流的所有者节点。如果是,则该过程进行到1740。如果该新添加的节点不是识别出的流的所有者,则过程1700结束,因为这是错误状况。新添加的节点不应该接收新添加的节点不是其所有者的流的任何分组。[0147]在1740处,该过程确定流是否是分配给新节点的新流。与具有存储在其原始所有者节点中的现有状态信息的现有流不同,新流没有原始所有者节点或预先存在的状态信息,并且因此可以随便在其所有者节点处开始有状态处理,无论是新添加的节点还是现有节点。在一些实施例中,该过程通过检查其新流表中的条目来确定流是否为新流。如果分组的流是新添加的流,则该过程进行到1745。如果流不是新添加的流(S卩,预先存在的流),则该过程进行到1750。[0148]在1750处,该过程确定识别出的流是否在边缘节点的间接表中。在这个操作中,该过程已经确定运行该过程的新添加的节点是通过一致性散列识别出的流的所有者节点。但是,间接表中的对应条目将向新添加的节点指示流必须被转发到其它地方进行有状态处理。如果识别出的流在间接表中具有对应的条目,则该过程进行到1755。否则,过程1700结束,因为新添加的节点不应该在间接表中没有对应条目的情况下接收现有流的分组。[0149]在1755处,该过程将分组转发到集群中的被委派节点进行有状态处理(即使运行该过程的新添加的节点是流的所有者节点)。然后过程1700结束。[0150]—些实施例允许将多个边缘节点同时添加到集群。在这些实施例中的一些实施例中,集群立即进入多个边缘节点的学习模式,同时固定流表和间接表同样用于委派锚定固定到其原始所有者节点的流的分组。一些实施例通过每次添加一个边缘节点将多个边缘节点添加到集群,其中使用多轮学习模式来添加多个新的边缘节点。[0151]b.去除边缘节点[0152]在一些实施例中,边缘节点的去除在不中断由边缘集群提供的有状态服务的情况下优雅地完成。对于这些实施例中的一些实施例,以上部分II.a中描述的用于添加新节点的方法也适用于通过去除现有节点来动态调整边缘集群的大小,即,在节点去除过程期间在其原始所有者节点上保持现有流的有状态处理。如所提到的,边缘集群中的成员资格的变化导致通过一致性散列的流到节点的分配的变化。因此,节点的去除导致现有流改变所有者节点,就像节点的添加一样。因此,一些实施例也在节点去除过程期间在其原始所有者节点处锚定现有流。[0153]图18概念性地示出了其中现有流被锚定到其原始所有者节点的示例节点去除操作。如图所示,边缘集群810最初具有节点811-814节点A、B、C和D,并且流的所有者节点的分配基于所有这四个节点的一致性散列。该图示出了用于在两个阶段1801和1802从集群810中去除节点C813的过程。[0154]第一阶段1801示出了在去除节点C之前通过一致性散列的所有者节点的分配。如图所示,在去除节点C之前,流的一致性散列是在节点A、B、C和D之上以便从这四个节点当中识别所有者节点。在这种一致性散列函数下,流Fl和F5被分配给节点ASll,流F2和F6被分配给节点B812,流F3和F7被分配给节点C813,并且流F4和F8被分配给节点D814。对于该示例,假定流Fl-F8是在阶段1801期间由节点A、B、C和D有状态处理的活动的、正在进行的流。[0155]第二阶段1802示出了新节点C的去除以及该去除对通过一致性散列的所有者节点分配的影响。随着去除节点C,一致性散列仅在节点A、B和D之上,以便从这三个节点当中识别所有者节点。因此,流F1-F8中的一些或全部被重新分配给不同的所有者节点。在这个示例中,除F5和F6之外的所有流都通过一致性散列分配给不同的所有者节点。节点A现在是F3、F5和F8的所有者节点。节点B现在是Fl、F4和F6的所有者节点。节点D现在是F2和F7的所有者节点。去除的节点节点C不是任何流的所有者节点。[0156]由于流Fl-F8是正在由边缘集群处理的活动的、正在进行的流,因此这些节点必须被锚定到其原始所有者节点,以便用正确的状态信息对流进行有状态地处理。因此,流Fl被固定到节点A,流F2被固定到节点B,流F3和F7被固定到节点C,并且流F4和F8被固定到节点D。被固定或锚定到其原始所有者节点的流将在那里进行有状态地处理,直到那些流完成。这也适用于去除节点C,其中出于处理固定到节点C的流F3和F7的目的,节点C仍将保持活动状态,即使节点C不能再是任何流的所有者节点。[0157]另一方面,现有流的新所有者节点使用其间接表中的条目将这些流委派给其原始所有者。以上的部分II.a描述了通过间接表和固定流表来委派流。在这个示例中,节点A分别将流F3和F8委派给节点C和DF5在节点A处被本地处理),节点B分别将流Fl和F4委派给节点A和DF6在节点B处被本地处理),并且节点D分别将F2和F7委派给节点B和C。[0158]如所提到的,去除节点在其完成先前分配给它的流的处理之前不会离线。这确保了在不中断由边缘集群810提供的有状态服务的情况下优雅地去除或关闭节点。在一些实施例中,边缘集群被认为处于用于去除集群中的边缘节点的学习模式。在一些实施例中,用于去除边缘节点的学习模式在去除节点完成其所有固定流并可安全离线(因此将不会中断有状态过程之前不会结束。[0159]在一些实施例中,一旦节点被标记为去除,它就停止参与ECMP。图19示出了在用于去除节点813的学习模式(S卩,学习节点C要被去除)期间和之后的边缘集群810的操作。去除节点813—旦被标记为去除,它就停止参与ECMP,但是在所有固定到去除节点的流完成之前,该节点不会离线。该图示出了在四个阶段1901-1904中的节点去除过程。[0160]第一阶段1901示出了在去除节点C813之前的边缘集群810。如图所示,边缘集群810具有正在参与ECMP过程并提供有状态服务的四个节点811-814节点A、B、C和D。如图所示,节点813是通过一致性散列的F3和F7的所有者节点,并且正在维护这些流的状态信息。[0161]第二阶段1902示出了紧接着节点C813被标记为去除之后的边缘集群810。一旦节点C被标记为去除,ECMP过程就停止向其分发分组。此外,一致性散列不再将节点C包括在其散列函数中,并且节点A811变为流F3的新所有者节点,并且节点D变为F7的新所有者节点。但是,F3和F7也被固定或锚定到节点C813,因为它们被节点C主动地处理,并且它们的状态信息被节点C保持。节点A在其间接表图中未示出)中具有用于将流F3的分组委派给节点C的条目,并且节点D在其间接表(图中未示出)中具有用于将流F7的分组委派给节点C的条目。[0162]第三阶段803示出了固定流(S卩,F3和F7的完成。当这些流完成时,去除节点C813可以离线。最后的阶段804示出了处于新稳定状态的集群810,其中节点C在不中断任何有状态服务的情况下被优雅地去除。[0163]III.相关流[0164]当必要状态信息不在通过一致性散列的流的所有者节点中时,流的委派或状态信息的传送是必需的。如以上部分II中所描述的,当边缘集群中存在改变所有者节点分配的成员资格变化例如,节点的添加或去除)时,是这样。在一些实施例中,当驻留在第一节点上的第一流的状态信息是分配给第二节点的第二流的必要状态信息时,也需要流的委派。在一些实施例中,第一流和第二流是通过一致性散列分配给不同所有者节点的相关流。在一些实施例中,当相同过程的控制流和数据流由于它们具有不同的流标识符而被分配给不同的所有者节点时,会发生这种情况。为了确保相关流在相同节点上维护的相同的一组状态信息上操作,一些实施例使用流委派来强制相关流被相同节点(有状态地处理,即使这两个相关流通过一致性散列被散列到不同的所有者节点。[0165]存在需要ALG支持以通过防火墙和NAT功能工作的、诸如FTP、SIP或RTSP的协议。这些协议使用多个流,并且相同的节点通常应该处理相关流,因为它们经常共享状态。因此,节点的数据平面需要查看应用协议来确定相关流。在集群服务中,在协议中使用的相关流必须由同一节点一致性地和高效地操纵。对于FTP文件传输协议),在一些实施例中,首先建立控制流程。关于数据流的信息经由控制流传送。因此,必须监视控制流以了解数据流信息(即,控制流上的PORT或PASV命令)。[0166]图20示出了使用流委派来在同一节点处处理相关流。如图所示,集群810的节点813节点C和节点814节点D分别通过一致性散列被分配流F15和F16。流F15和F16是相关流例如,相同传输层交换的控制流和数据流)。该图示出了在两个阶段2001和2002中的集群810中的相关流委派。[0167]第一阶段2001示出了通过一致性散列的F15和F16的原始分配。作为F15的所有者节点的节点C将具有流F15的状态信息,而作为F16的所有者节点的节点D将具有流F16的状态ί目息。但是,Fl5和F16是相关流。在一些实施例中,相关流是共孚同一组状态ί目息的流。在一些实施例中,相关流是必须被依次处理的流。例如,F16的有状态服务需要流F15的最终状态信息,并且F16是在F15之后的流,使得流F16的分组仅在流F15完成之后才出现。[0168]第二阶段2002示出了用于处理相关流的分组的委派流。如图所示,流F15仍然由其所有者节点节点C处理,但是流F16的分组由节点DF16的所有者节点委派给节点C。节点D基于间接表2040的条目2041将F16的分组转发到节点C,该条目对应于指向节点C的流F16。节点C基于固定流表2030的条目2031接受流F16的委派分组。换句话说,即使节点D是F16的所有者节点,流F16也已成为节点D处的间接委派流。即使节点C永远都不是F16的所有者节点,流F16也已成为固定锚定到节点C的流。因此,流F15和F16两者都由同一节点节点C有状态地处理。[0169]对于一些实施例,图21概念性地示出了用于建立流委派以便在边缘节点的集群中有状态地处理相关流的过程2100。在一些实施例中,该过程由边缘集群中的节点执行。该过程通过确定在2110处这个边缘节点(运行过程2100的边缘节点)上当前活动的流是否具有相关流开始。例如,FTP的控制流具有相关的数据流,因此处理FTP的控制流的边缘节点将知道有即将到来的相关数据流。如果在该边缘节点上主动运行的流都没有相关流,则过程2100结束。如果在该边缘节点中运行的流中至少一个流具有相关流,则该过程识别在2120处相关流和相关流的所有者节点。在一些实施例中,边缘节点基于由网络管理器或其它边缘节点经由控制平面消息提供的信息来识别相关流。[0170]接下来,该过程在自己的固定表中为相关流创建在2130处条目,并且向相关流的所有者节点发送在2140处消息,以在其间接表中创建条目。在图20的示例中,节点C是正在处理流F15的边缘节点,流F15具有其所有者节点是节点D的相关流F16。因此,节点C在其固定流表2030中为流F16创建了固定流入口(2031。节点C还向节点D发送消息,因此节点D将在其间接表2040中为流F16创建间接条目(2041。[0171]在发送消息以建立间接条目之后,过程2100结束,并且集群中的边缘节点基于间接表和固定流表继续处理相关流的传入分组。[0172]IV.地址转换[0173]在一些实施例中,由边缘集群提供的有状态服务包括网络地址转换NATAAT是当互联网协议IP数据报分组报头跨流量路由设备传输时,为了将一个IP地址空间重新映射到另一个IP地址空间而修改它们中的网络地址信息的方法。在DNAT的情况下,目的地地址例如,经常是VIP地址端口)被替换为南向地址和端口。这创建与DNAT服务相关联的两个流:一个使用原始目的地地址,并且一个使用转换地址。这两个流实际上是相同的流,但是它们仍然具有不同的流标识符,并且将被散列到不同的边缘节点。换句话说,每个流具有两个所有者节点,一个通过流的原始目的地地址识别,另一个通过流的转换地址识别。[0174]在一些实施例中,根据原始地址的流的所有者节点根据转换的DNAT地址将间接消息推送到流的所有者节点,以便将流的分组保持在同一节点上。结果,由转换的DNAT地址识别出的所有者节点具有用于将流的分组委派给通过原始地址识别出的所有者节点的间接表条目,其具有基于DNAT地址接受并处理具有流标识符的分组的固定流表条目。(相反,在一些其它实施例中,由DNAT地址识别出的所有者节点将间接消息推送到由原始地址识别出的所有者节点,因此由原始地址识别出的所有者节点将流的分组委派给由DNAT地址识别出的所有者节点)。换句话说,在一些实施例中,如由其原始地址识别出的流和如由其DNAT地址识别出的流作为相关流被边缘集群处理。[0175]图22a概念性地示出了由边缘集群810执行的示例DNAT服务。该图示出了具有不同流标识符的四个示例流F1-F4。由边缘集群810执行的DNAT将南向流的目的地地址从其原始地址转换为DNAT地址。例如,边缘集群810将南向Fl的目的地地址从“2.2.10.10”转换为“1.2.3.4”,并且将南向F2的目的地地址从“3.2.10.11”转换为“5.6.7.8”,等等。[0176]DNAT还对北向流量执行逆DNAT服务。逆DNAT服务将北向流的DNAT地址转换回其原始地址。例如,边缘集群810将北向Fl的目的地地址从“1.2.3.4”转换为“2.2.10.10”,将北向F2的目的地地址从“5.6.7.8”转换为“3.2.10.1Γ,等等。虽然北向流和南向流是相同的流,但是它们具有不同的流标识符,并且将通过一致性散列被散列到集群810内的不同边缘节点。[0177]图22b示出了当边缘集群810中的节点正在执行DNAT服务时边缘集群810如何分配所有者节点。如图所示,对于其中流标识符是基于原始地址的南向流量,流F1-F4被分别散列到节点A、B、C和D节点811-814。但是,对于其中流标识符是基于转换的DNAT地址(即,DNATFl、DNATF2、DNATF3和DNATF4的北向流量,流Fl被散列到节点D,流F2被散列至IJ节点B,流F3被散列到节点A,并且流F4被散列到节点C。在该图中,“散列F1”表示基于具有原始目的地地址的流标识符对Fl进行散列,而“散列DNATFl”表示基于具有转换的目的地地址的流标识符对Fl进行散列。[0178]图22b还示出了由边缘集群810使用流委派来提供有状态DNAT服务。如图所示,节点A向节点D发送用于DNATFl的间接消息,通知节点D基于DNATFl将具有流标识符的分组委派给节点A。节点C向节点A发送用于DNATF3的间接消息,通知节点A基于DNATF3将具有流标识符的分组委派给节点C。节点D向节点C发送用于DNATF4的间接消息,通知节点C基于DNATF4将具有流标识符的分组委派给节点DJ2和DNATF2两者都被散列到节点B,因此节点B不向外发送间接消息。[0179]因此,节点A接收具有DNATFl的委派分组,因此节点A可以有状态地处理流Fl的所有分组,既包括北向分组又包括南向分组。同样,节点C接收具有DNATF3的委派分组以有状态地处理流F3的所有分组,并且节点D接收具有DNATF4的委派分组以有状态地处理流F4的所有分组。(在这个示例中,节点B已经接收到F2和DNATF2两者的分组)。[0180]在一些其它实施例中,代替流委派,执行DNAT的边缘集群在不使用可以被转换的目的地地址的情况下确定所有者节点。换句话说,集群仅对不受DNAT影响的字段例如,源地址字段、源端口字段、协议字段应用一致性散列。图23a-b示出了当执行DNAT时不使用目的地地址字段用于节点分配的边缘集群。[0181]图23a示出了其中目的地地址是从其原始地址DNAT到该转换地址的南向流量。南向分组2311是流Fl的分组,分组2312是流F2的分组,分组2313是流F3的分组,分组2314是流F4的分组。分组2311-2314分别被散列到边缘集群810的节点811-814。散列仅基于分组的源地址和源端口。当应用一致性散列来确定流的所有者节点时,不使用那些分组的目的地地址。边缘集群810中的节点对那些分组执行DNAT服务以产生分组2321-2324。这些分组具有相同的原始源地址,但是其目的地地址是从DNAT转换的地址。[0182]图23b示出了其中目的地地址从其转换的地址返回到其原始地址的北向流量。北向分组2331-2334分别是流Fl-F4的分组。这些北向分组的目的地地址是由DNAT转换的地址,但是其源地址和端口是不受DNAT影响的原始地址。分组2331-2334基于那些未受影响的源端口和地址被散列到节点A、B、C和D。因此,流F1-F4的分组仍然分别被节点A、B、C和D处理,并且该DNAT对所有者节点分配没有影响。因此,无论目的地地址字段是转换的还是原始的,每个流都被相同的节点有状态地处理。[0183]在SNAT的情况下,集群中的边缘节点改变传出南向分组的源地址。分组的SNAT在通过其流的所有者节点路由之后发生。在一些实施例中,边缘集群中的每个节点在执行地址转换时使用其自己的唯一SNAT地址。基于源地址字段中的那些唯一SNAT地址,返回的北向流量被转发到相同的所有者节点。所有者节点然后在维护有状态SNAT过程的状态的同时应用逆NAT。如果有防火墙服务,则在SNAT反向映射之后,流状态通过元组识别。[0184]图24a_b示出了边缘集群中的节点如何为一些实施例提供有状态SNAT服务。如图所示,集群810的边缘节点811-814节点A、B、C和D正在提供SNAT服务,其中当执行SNAT时,每个节点具有其自己的唯一源地址。具体而言,节点A的SNAT地址是“1.1.1.Γ,节点B的SNAT地址是“2.2.2.2”,节点C的SNAT地址是“3.3.3.3”,并且节点D的SNAT地址是“4·4·4·4,,。[0185]图24a示出了分别属于流Fl、F2、F3和F4的南向流量分组2411-2414。流FI-F4的分组根据分组的流标识符的一致性散列被散列到节点A、B、C和D中。节点A依次对属于Fl的分组执行SNAT,并将源地址转换为其自己的SNAT地址“1.1.1.Γ。类似地,节点B对F2分组执行SNAT,并将源地址转换为其自己的“2.2.2.2”,节点C对F3分组执行SNAT,并将源地址转换为其自己的“3.3.3.3”,并且节点D对F4分组执行SNAT,并将源地址转换为其自己的“4·4·4·4,,。[0186]图24b示出了将北向流量返回到集群2410。如图所示,北向流量中的每个分组基于源地址字段中的唯一SNAT地址找到其返回执行SNAT的边缘节点的路径。具体而言,Fl的北向分组2431基于源地址“1.1.1.Γ到达节点A,F2的北向分组2432基于源地址“2.2.2.2”到达节点B,F3的北向分组2433基于源地址“3.3.3.3”到达节点C,并且F4的北向分组2434基于源地址“4.4.4.4”到达节点D。每个节点又通过识别分组的流并将节点的唯一SNAT地址转换回流的原始源地址对北向分组执行逆SNAT。因此,流Fl-F4的分组始终分别由节点A、B、C和D处理,并且SNAT对所有者节点分配没有影响。无论源地址字段是转换的还是原始的,每个流都被相同的节点有状态地处理。[0187]V.作为边缘节点的虚拟机[0188]如所提到的,在一些实施例中,边缘集群中的边缘节点中的一些或全部被实现为由运行虚拟化软件或管理程序的计算设备托管的虚拟机。在一些实施例中,这些计算设备或主机机器位于容纳许多这样的主机机器的数据中心中。图25示出了具有被分组成集群或部分集群2510、2520、2530和2540的主机机器的数据中心2500。每个集群包括正在托管虚拟机的一个或多个主机机器。虚拟机中的一些是为数据中心的客户端或租户执行计算任务的计算VM。虚拟机中的一些是提供诸如NAT或防火墙的边缘服务的边缘VM。虚拟机中的一些是向数据中心中的其它VM主机机器提供控制的管理VM。一些主机机器托管不同类型的VM。例如,主机机器2511托管计算VM和管理VM,以及主机机器2512托管计算VM和边缘VM。[0189]在一些实施例中,每个VM的集群或部分具有用作其边缘集群的其自己的边缘服务VM集合,边缘集群以以上部分I-IV中描述的方式提供有状态服务。[0190]在一些实施例中,数据中心具有专门的集群或部分,诸如计算集群或管理集群。在一些实施例中,数据中心包括主机机器的集群或部分,其主要托管用作用于其它集群中的计算VM的边缘节点的边缘服务VM。图26示出了包括边缘集群2610、若干计算集群2651-2652和管理集群2680的数据中心2600。边缘集群2610托管用作用于计算集群2651-2652中的VM的边缘节点的VM。管理集群2680中的VM执行控制和管理功能。[0191]不管VM的物理拓扑和实际物理放置如何,在一些实施例中,计算VM在逻辑上被组织成用于不同租户的不同逻辑网络,并且边缘服务VM在逻辑上被组织成用于不同逻辑网络的边缘服务集群。图27示出了用于不同租户的逻辑网络,其中每个租户由用作逻辑网络的边缘服务集群的一组边缘服务VM服务。该图分别示出了用于租户1、2和3的逻辑网络2701-2703。逻辑网络2701使用边缘服务集群2711,逻辑网络2702使用边缘服务集群2712,并且逻辑网络2703使用边缘服务集群2713。每个边缘服务集群包括多个边缘服务VM作为边缘节点。在一些实施例中,边缘集群的边缘节点处于相同的L2段中,使得边缘集群的分组转发和流委派操作通过L2层流量进行(S卩,相同边缘集群通信中的边缘节点可通过L2MAC地址彼此寻址)。[0192]VI.计算设备[0193]如前面所提到的,本发明的一些实施例由在用作主机机器的计算设备上运行的虚拟化软件或管理程序实现。对于一些实施例,图28示出了操作虚拟化软件2805的示例主机机器2800。虚拟化软件2805允许主机机器托管虚拟机2811-2814以及将虚拟机连接到物理网络2890。该物理网络2890可以跨越一个或更多数据中心,并且包括各种物理交换机和路由器。[0194]如图所示,主机2800能够通过物理NICPNIC2895访问物理网络2890。虚拟化软件2805用作托管的VM2811-2814与物理NIC2895以及其它物理资源,诸如处理器和存储器)之间的接口。每个VM包括用于通过虚拟化软件2805访问网络的虚拟NICVNIC中的每个VNIC负责在VM和虚拟化软件2805之间交换分组。在一些实施例中,VNIC是由虚拟NIC仿真器实现的物理NIC的软件抽象。[0195]虚拟化软件2805管理VM2811-2814的操作,并且包括用于管理VM对物理网络的访问(在一些实施例中通过实现VM连接到其的逻辑网络)的若干组件。如图所示,虚拟化软件2805包括物理交换元件2820、物理路由元件2830、控制器接口2840、上行链路模块2870。[0196]控制器接口2840从控制器或控制器集群2860接收控制平面消息。在一些实施例中,这些控制平面消息包括用于配置虚拟化软件和或虚拟机的各种组件诸如物理交换元件2820和物理路由元件2830的配置数据。在一些实施例中,控制平面消息还包括来自中央网络管理器或本地网络管理器的用于动态调整边缘集群大小的消息。[0197]物理交换元件2820或受管理的物理交换元件MPSE向和从与物理网络2890接口的物理NIC2895传递网络数据。物理交换元件还包括多个虚拟端口(vPorts,其将物理NIC与VM2811-2814、物理路由元件2830和控制器接口2840通信地互连。在一些实施例中,每个虚拟端口与唯一的L2MAC地址相关联。物理交换元件在连接到其虚拟端口的任何两个网络元件之间执行L2链路层分组转发。物理交换元件还在连接到其虚拟端口中的任何一个端口的任何网络元件与物理网络2890上可达的L2网络元件(例如,在另一个主机上运行的另一个VM之间执行L2链路层分组转发。[0198]物理路由元件2830或受管理的物理路由元件MPRE对从物理交换元件2820上的虚拟端口接收到的数据分组执行L3路由(例如,通过执行L3IP地址到L2MAC地址解析)。在一些实施例中,物理路由元件2830附接到其的虚拟端口是宿端口(sinkport。然后,每个路由数据分组被发送回到物理交换单元2820,以根据解析的L2MAC地址转发到其目的地。该目的地可以是连接到物理交换元件2820上的虚拟端口的另一个VM,或物理网络2890上可达的L2网络元件例如,在另一个主机上运行的另一个VM、物理非虚拟化机器等)。[0199]上行链路模块2870在物理交换元件2820和物理NIC2895之间中继数据。在一些实施例中,上行链路模块2870允许主机机器2800用作诸如VXLAN和VLAN之类的封装覆盖网络的隧道端点。VXLAN是覆盖网络封装协议。由VXLAN封装创建的覆盖网络有时被称为VXLAN网络,或简称为VXLAN。当主机2800上的VM将数据分组例如,以太网帧发送到相同VXLAN网络中但在不同主机上的另一个VM时,在将分组发送到物理网络之前,上行链路模块2870使用VXLAN网络的VNI和VTEP的网络地址来封装数据分组。分组通过物理网络(S卩,封装使得底层分组对于中间网络元件透明)被隧道化到目的地主机。上行链路模块2870还对传入的VXLAN分组进行解封装,并只将原始的内部数据分组转发到目的地VM。[0200]图29示出了在主机机器2800中运行的边缘服务VM2900例如,作为VM2811-2814之一)。边缘VM2900与物理交换元件2820交换数据平面分组以及与控制器接口2840交换控制平面消息。如图所示,边缘服务VM2900包括有状态服务引擎2910、分组转发引擎2920、一致性散列引擎2930以及流信息存储2940。[0201]有状态边缘服务引擎2910是用于基于来自物理交换分组的传入分组以及存储在流信息存储2940中的流的状态来提供有状态边缘服务例如,防火墙、NAT。在一些实施例中,有状态服务引擎2910向到转发引擎2920的分组提供必要的数据。[0202]转发引擎2920经由物理交换元件2820接收和转发网络分组。在一些实施例中,转发引擎基于由有状态边缘服务引擎2910提供的信息、诸如地址转换或防火墙决定的信息做出其转发决定或更改分组。在一些实施例中,转发引擎2920将每个传入分组的流标识符发送到一致性散列引擎2930,以便确定其所有者节点。转发引擎2920还使用流信息存储2940中的信息来决定是否转发分组或将分组转发到哪里。在一些实施例中,转发引擎2920执行诸如700、900、1500、1600和1700的过程。[0203]一致性散列引擎2930对分组的流标识符执行一致性散列函数,以便识别其所有者节点。在一些实施例中,散列结果还基于由网络管理器经由控制器接口2830提供的边缘集群的成员资格例如,集群中边缘节点的数量)。[0204]在一些实施例中,流信息存储2940存储用于实现流委派所需的表,诸如固定流表2950和间接表2955。在一些实施例中,流信息存储2940还包括本地流表2960,其维护边缘VM正在处理的流的状态信息。在一些实施例中,固定流表2950和本地流表2960被实现为跟踪边缘VM2900正在处理的所有流的一个表。存储的状态被提供给有状态服务引擎2910用于执行有状态服务。[0205]在本文档中,术语“分组”是指跨网络发送的特定格式的位集合。本领域普通技术人员将认识到,术语分组在本文中可以用于指可跨网络发送的各种格式化的位集合,诸如以太网帧、TCP段、UDP数据报、IP分组等。[0206]贯穿本说明书提到包括虚拟机VM的计算和网络环境。但是,虚拟机只是数据计算节点DCN或数据计算端节点也被称为可寻址节点)的一个示例。DCN可以包括非虚拟化物理主机、虚拟机、在主机操作系统之上运行而不需要管理程序或单独的操作系统的容器、以及管理程序内核网络接口模块。[0207]在一些实施例中,VM使用由虚拟化软件例如,管理程序、虚拟机监视器等虚拟化的主机的资源与在主机上其自己的客户操作系统一起操作。租户(即VM的所有者可以选择在客户操作系统之上要操作哪些应用。另一方面,一些容器是在主机操作系统之上运行而不需要管理程序或单独的客户操作系统的结构。在一些实施例中,主机操作系统使用名称空间将容器彼此隔离,并且因此提供在不同容器内操作的不同应用组的操作系统级隔离。这种隔离类似于在虚拟化系统硬件的管理程序虚拟化环境中提供的VM隔离,并且因此可以被视为隔离在不同容器中操作的不同应用组的一种虚拟化形式。这种容器比VM更轻巧。[0208]在一些实施例中,管理程序内核网络接口模块是包括具有管理程序内核网络接口和接收发送线程的网络堆栈的非-VMDCN。管理程序内核网络接口模块的一个示例是作为VMware公司的ESXi™管理程序的一部分的vmknic模块。[0209]本领域普通技术人员将认识到,虽然本说明书提到VM,但是给出的示例可以是任何类型的DCN,包括物理主机、VM、非-VM容器和管理程序内核网络接口模块。事实上,在一些实施例中,示例网络可以包括不同类型的DCN的组合。[0210]VII.电子系统[0211]许多上述特征和应用被实现为软件过程,其被指定为记录在计算机可读存储介质也被称为计算机可读介质上的一组指令。当这些指令被一个或多个处理单元例如,一个或多个处理器、处理器核心、或其它处理单元执行时,它们使得该(一个或多个处理单元执行在指令中指示的动作。计算机可读介质的示例包括,但不限于,CD-ROM、闪存驱动器、RAM芯片、硬盘驱动器、EPROM等。计算机可读介质不包括无线或通过有线连接传递的载波和电子信号。[0212]在本说明书中,术语“软件”是指包括驻留在只读存储器中的固件或者可以被读入到存储器中用于被处理器处理的存储在磁存储中的应用。此外,在一些实施例中,若干软件发明可以被实现为更大程序的子部分,同时保持明显的软件发明。在一些实施例中,若干软件发明也可以被实现为单独的程序。最后,一起实现本文所描述的软件发明的单独程序的任意组合是在本发明的范围之内。在一些实施例中,当软件程序被安装,以在一个或多个电子系统上操作时,软件程序定义执行该软件程序的操作的一个或多个特定的机器实现。[0213]图30概念性地示出了实现本发明的一些实施例的电子系统3000。电子系统3000可以用于执行任何控制、虚拟化或上述操作系统应用。电子系统3000可以是计算机例如,台式计算机、个人计算机、平板计算机、服务器计算机、大型机、刀片计算机等)、电话、PDA或任何其它种类的电子设备。这种电子系统包括用于各种其它类型的计算机可读介质的各种类型的计算机可读介质和接口。电子系统3000包括总线3005、(一个或多个处理单元3010、系统存储器3025、只读存储器3030、永久存储设备3035、输入设备3040、以及输出设备3045。[0214]总线3005统一地表示通信连接电子系统3000的众多内部设备的所有系统、外设和芯片组总线。例如,总线3005将一个或多个处理单元3010与只读存储器3030、系统存储器3025、永久存储设备3035通信地连接。[0215]从这些各种存储器单元中,(一个或多个处理单元3010检索要执行的指令和要处理的数据,以便执行本发明的过程。(一个或多个处理单元在不同实施例中可以是单个处理器或多核心处理器。[0216]只读存储器Φ0Μ3030存储由(一个或多个处理单元3010和电子系统的其它模块所需的静态数据和指令。另一方面,永久存储设备3035是读和写存储器设备。这个设备是即使当电子系统3000关闭时也存储指令和数据的非易失性存储单元。本发明的一些实施例使用大容量存储设备诸如磁或光盘及其对应的盘驱动器作为永久存储设备3035。[0217]其它实施例使用可移除存储设备诸如软盘、闪存驱动器等作为永久存储设备。与永久存储设备3035—样,系统存储器3025是读和写存储器设备。但是,与存储设备3035不同,系统存储器是易失性读和写存储器,诸如随机存取存储器。系统存储器存储处理器在运行时需要的一些指令和数据。在一些实施例中,本发明的过程被存储在系统存储器3025、永久存储设备3035和或只读存储器3030中。从这些各种存储器单元中,(一个或多个处理单元3010检索要执行的指令和要处理的数据,以便执行一些实施例的过程。[0218]总线3005还连接到输入和输出设备3040和3045。输入设备使用户能够传递信息和选择到电子系统的命令。输入设备3040包括字母数字键盘和定点设备也称为“光标控制设备”)。输出设备3045显示由电子系统生成的图像。输出设备包括打印机和显示设备,诸如阴极射线管CRT或液晶显示器LCD。一些实施例包括诸如用作输入和输出设备两者的触摸屏的设备。[0219]最后,如在图30中所示,总线3005还通过网络适配器未示出)将电子系统3000耦合到网络3065。以这种方式,计算机可以是计算机的网络(诸如局域网(“LAN”)、广域网“WAN”)、或内联网、或诸如互联网的网络的网络)的一部分。电子系统3000的任何或所有组件可以与本发明结合使用。[0220]一些实施例包括电子组件,诸如微处理器、在机器可读或计算机可读介质(可替代地称为计算机可读存储介质、机器可读介质或机器可读存储介质)中存储计算机程序指令的存储设备和存储器。这种计算机可读介质的一些示例包括RAM、R0M、只读压缩盘(CD-R0M、可记录压缩盘CD-R、可重写压缩盘CD-RW、只读数字多功能盘例如,DVD-ROM,双层DVD-ROM、各种可记录可重写DVD例如,DVD-RAM、DVD-RW、DVD+RW等)、闪存存储器(例如,SD卡、小型SD卡、微型SD卡等)、磁和或固态硬盘驱动器、只读和可记录Blu-Ray®盘、超密度光盘、任何其它光或磁介质、以及软盘。计算机可读介质可以存储可由至少一个处理单元执行的并且包括用于执行各种操作的指令集的计算机程序。计算机程序或计算机代码的示例包括诸如由编译器产生的机器代码,以及包括由计算机、电子组件、或利用解释器的微处理器执行的更高级代码的文件。[0221]虽然以上讨论主要指执行软件的微处理器或多核处理器,但是一些实施例通过一个或多个集成电路来执行,诸如专用集成电路ASIC或现场可编程门阵列FPGA。在一些实施例中,这种集成电路执行在该电路自身上存储的指令。[0222]如在本说明书中所使用的,术语“计算机”、“服务器”、“处理器”、以及“存储器”都是指电子或其它技术设备。这些术语不包括人或人群。为了本说明书的目的,术语显示或正在显示意味着在电子设备上显示。如本说明书中所使用的,术语“计算机可读介质”、“多个计算机可读介质”和“机器可读介质”被完全限制为以由计算机可读的形式存储信息的、有形的、物理的对象。这些术语不包括任何无线信号、有线下载信号、以及任何其它短暂信号。[0223]虽然本发明已经参考许多特定细节进行了描述,但是本领域普通技术人员将认识至IJ,在不脱离本发明的精神的情况下,本发明可以以其它特定形式体现。此外,多个图(包括图7、9、15、16、17a-b概念性地示出了过程。这些过程的特定操作可能没有以与所示出和描述的确切顺序执行。特定操作可能没有在一系列连续的操作中执行,并且不同的特定操作可能在不同的实施例中执行。此外,过程可以利用几个子过程来实现,或者作为较大的宏过程的一部分来实现。因此,本领域普通技术人员将理解,本发明不受上述说明性细节的限制,而是由所附权利要求来限定。

权利要求:1.一种方法,包括:将属于多个流的多个分组分发到向网络提供边缘服务的边缘集群中的多个节点,其中每个流被分配给集群中的一个节点,并且每个节点被分配来对至少一个流执行有状态处理;以及根据所述流的分配在节点的集群处对所述多个分组执行有状态处理。2.如权利要求1所述的方法,其中将分组分发到集群中的节点包括识别分组的流,其中所述识别基于分组中的一组流标识符。3.如权利要求2所述的方法,其中将分组分发到集群中的节点还包括基于所述一组流标识符来计算散列值,其中散列值用于识别被分配来对分组的流执行有状态处理的节点。4.如权利要求3所述的方法,其中每个可能的散列值被映射到集群中的节点。5.如权利要求1所述的方法,其中所述有状态处理包括网络地址转换NAT。6.如权利要求1所述的方法,其中所述有状态处理包括用于有状态防火墙的防火墙处理。7.如权利要求1所述的方法,其中分配给流的节点维护流的状态。8.如权利要求1所述的方法,其中所述集群中的每个节点是由在主机机器中运行的虚拟化软件提供的虚拟机。9.一种方法,包括:在包括多个节点的集群中的第一节点处接收分组,其中第一节点根据等成本多路径ECMP算法选自所述多个节点;识别分组的流和流的所有者节点;当第一节点是所有者节点时,对第一节点处的分组执行有状态处理;以及当与第一节点不同的第二节点是所有者节点时,将所述分组转发到第二节点。10.如权利要求9所述的方法,其中识别流的所有者节点包括对分组中的一组流标识符执行散列函数。11.如权利要求10所述的方法,其中所述流标识符包括分组的L3和L4报头中的参数。12.如权利要求9所述的方法,其中所述集群是向网络提供边缘服务的边缘集群。13.如权利要求9所述的方法,其中所述集群中的每个节点是由在主机机器中运行的虚拟化软件提供的虚拟机。14.如权利要求9所述的方法,其中新添加的节点在用于新添加的节点的学习模式完成之前不从ECMP接收分组。15.一种方法,包括:在节点的集群处提供有状态服务,其中第一服务由集群中的第一组节点提供,并且第二服务由集群中的第二组节点提供;根据第一一致性散列函数将需要第一服务的第一组流分发到第一组节点;以及根据第二一致性散列函数将需要第二服务的第二组流分发到第二组节点。16.如权利要求15所述的方法,其中将第一组流分发到第一组节点包括(i识别属于第一组流的传入分组,以及(ii将第一一致性散列函数应用于被识别为属于第一组流的分组中的流标识符。17.如权利要求16所述的方法,其中流的第一一致性散列产生识别被分配给流的第一组节点中的第一节点的散列值,其中流的第二一致性散列产生识别被分配给流的第二组节点中的第二节点的散列值,其中分配给流的节点维护流的状态。18.如权利要求15所述的方法,其中第一一致性散列的每个可能的散列值被映射到第一组节点中的节点,其中第二一致性散列的每个可能的散列值被映射到第二组节点中的节点。19.如权利要求15所述的方法,其中第一服务是网络地址转换NAT并且第二服务是防火墙。20.如权利要求15所述的方法,其中所述集群是向网络提供边缘服务的边缘集群。21.—种方法,包括:在第一节点处对特定流执行有状态服务,其中第一节点基于特定流的第一散列选自第一组节点;在第一节点处接收来自第二节点的属于特定流的分组以执行有状态服务,其中第二节点基于特定流的第二散列选自第二组节点。22.如权利要求21所述的方法,其中第一组节点是节点的特定集群中的节点,其中第二组节点是在至少一个节点被添加到集群或从集群中去除之后的特定集群中的节点。23.如权利要求22所述的方法,其中第一节点维护所述特定流的状态信息。24.如权利要求22所述的方法,其中所述节点的特定集群是提供有状态服务的边缘服务集群。25.如权利要求21所述的方法,其中转发来自第二节点的分组包括使用将所述特定流与第一节点相关联的间接表中的条目。26.如权利要求21所述的方法,其中第一节点具有固定流表,其包括对应于所述特定流的条目,所述条目用于防止第一节点转发属于所述特定流的分组。27.如权利要求26所述的方法,还包括当所述特定流的有状态处理完成时,从固定流表中去除所述条目。28.一种方法,包括:在节点的集群处对特定流执行有状态服务,其中特定流的状态由集群中的第一节点维护;在所述节点的集群正在对特定流执行有状态服务时,将节点添加到所述节点的集群;以及在节点被添加之后,通过所述节点的集群上的特定流的流标识符的一致性散列识别第二节点;以及将属于特定流的分组从第二节点转发到第一节点。29.如权利要求28所述的方法,其中在节点的添加之前,第一节点通过所述节点的集群上的特定流的流标识符的一致性散列来识别。30.如权利要求28所述的方法,其中将节点添加到所述节点的集群还包括将用于所述特定流的条目添加到第二节点中的间接表,其中间接表中为所述特定流所添加的条目是用于指示第二节点将属于所述特定流的分组转发到第一节点。31.如权利要求28所述的方法,其中将节点添加到所述节点的集群还包括将用于所述特定流的条目添加到第一节点中的固定流表,其中添加到固定流表的用于特定流的条目是用于将所述特定流的分组锚定在第一节点处。32.如权利要求31所述的方法,还包括当所述特定流的有状态处理完成时,从固定流表中去除所述条目。33.如权利要求28所述的方法,其中所述节点的集群是提供有状态服务的边缘服务集群。34.如权利要求28所述的方法,其中所述特定流是第一流,所述方法还包括当新添加的节点由第二流的一致性散列识别时,将属于第二流的分组转发到新添加的节点,其中第二流是其状态ig息被保持在新添加的节点处的新流。35.一种方法,包括:配置节点的集群以对特定流执行有状态服务,其中特定流的状态由集群中的第一节点维护;在集群正在对特定流执行有状态服务时,配置集群以添加节点;以及配置所述节点的集群以将属于特定流的分组从第二节点转发到第一节点,其中在节点的添加之后,第二节点通过所述节点的集群上的特定流的流标识符的一致性散列来识别。36.如权利要求35所述的方法,其中在添加所述节点之前,第一节点通过所述节点的集群上的所述特定流的流标识符的一致性散列来识别。37.如权利要求35所述的方法,其中将节点添加到所述节点的集群还包括配置第二节点以将用于所述特定流的条目添加到第二节点中的间接表,其中在间接表中为所述特定流所添加的条目是用于指示第二节点将属于所述特定流的分组转发到第一节点。38.如权利要求35所述的方法,其中将节点添加到所述节点的集群还包括配置第一节点以将用于所述特定流的条目添加到第一节点中的固定流表,其中添加到固定流表的用于所述特定流的条目是用于将所述特定流的分组锚定在第一节点处。39.如权利要求38所述的方法,还包括当所述特定流的有状态处理完成时,配置第一节点以从固定流表中去除所述条目。40.如权利要求35所述的方法,其中所述节点的集群是提供有状态服务的边缘服务集群。41.如权利要求35所述的方法,其中第二节点是添加到集群的节点。42.一种方法,包括:在节点的集群中的第一节点处执行对第一流的第一有状态服务,其中第一流的状态信息由第一节点维护;在第一节点处接收来自集群中的第二节点的属于第二流的分组,其中一致性散列函数将第一流分配给第一节点,并且将第二流分配给第二节点;以及通过使用第一流的状态信息在第一节点处执行对第二流的第二有状态服务,其中对第二流的第二有状态服务需要第一流的状态信息。43.如权利要求42所述的方法,其中第一流和第二流是相关流。44.如权利要求42所述的方法,其中第一流是控制流,并且第二流是相同文件传输协议FTP会话的数据流。45.如权利要求42所述的方法,还包括使用具有用于将第二流的分组从第二节点转发到第一节点的条目的间接表。46.如权利要求45所述的方法,还包括使用具有用于在第一节点处保持和处理第二流的分组的条目的固定流表。47.如权利要求42所述的方法,其中所述一致性散列函数是基于分组中的流标识符。48.如权利要求42所述的方法,其中所述节点的集群是提供有状态服务的边缘服务集群。49.一种方法,包括:在节点的集群中的第一节点处对第一流执行第一有状态服务,其中第一流的状态信息由第一节点维护;识别集群中的用于对第二流执行第二有状态服务的第二节点,其中第二流需要第一流的状态信息;以及将第一流的状态信息从第一节点转发到第二节点以执行第二有状态服务。50.如权利要求49所述的方法,其中第一流和第二流是相关流。51.如权利要求49所述的方法,其中第一流是控制流,并且第二流是相同文件传输协议FTP会话的数据流。52.如权利要求49所述的方法,还包括使用具有用于将第二流的分组从第二节点转发到第一节点的条目的间接表。53.如权利要求52所述的方法,还包括使用具有用于在第一节点处保持和处理第二流的分组的条目的固定流表。54.如权利要求49所述的方法,其中流的流标识符的散列最初识别流的所有者节点,其中第一节点是第一流的所有者节点,并且第二节点是第二流的所有者节点。55.—种用于处理属于特定流的分组的方法,所述方法包括:基于所述特定流的原始的流标识符集合来识别节点的集群中的第一节点;以及通过i维护所述特定流的状态信息和(ii从集群中的第二节点接收具有所述特定流的转换后的流标识符集合的分组,在第一节点处对所述特定流执行有状态处理,其中第二节点基于所述特定流的转换后的流标识符集合来识别。56.如权利要求55所述的方法,其中对所述特定流执行的有状态处理是网络地址转换NAT〇57.如权利要求56所述的方法,其中所述NAT处理将所述特定流的原始的流标识符集合转换为所述特定流的转换后的流标识符集合。58.如权利要求55所述的方法,其中第一节点由原始的流标识符集合的散列来识别,而第二节点由转换后的流标识符集合的散列来识别。59.如权利要求55所述的方法,还包括使用间接表,该间接表具有用于将具有转换后的流标识符集合的分组从第二节点转发到第一节点的条目。60.如权利要求59所述的方法,还包括使用固定流表,该固定流表具有用于在第一节点处保持和处理具有转换后的流标识符集合的分组的条目。61.如权利要求55所述的方法,其中流标识符的散列最初识别流的所有者节点,其中第一节点是根据原始的流标识符集合的散列的所述特定流的所有者节点,并且第二节点是根据转换后的流标识符集合的散列的所述特定流的所有者节点。62.一种方法,包括:识别用于对特定流的分组执行有状态服务的特定节点,所述特定流的分组每个都包括源字段集合和目的地字段集合,其中所述特定节点基于所述源字段集合的散列但不基于所述目的地字段集合的散列从节点的集群中识别;以及在识别出的特定节点处对所述特定流执行有状态服务。63.如权利要求62所述的方法,其中所述源字段集合包括源IP地址和源端口。64.如权利要求62所述的方法,其中所述目的地字段集合包括目的地IP地址。65.如权利要求62所述的方法,其中所述有状态服务将所述目的地字段集合中的原始目的地地址转换为转换后的目的地地址。66.如权利要求62所述的方法,其中识别出的特定节点维护用于所述特定流的状态信息。67.如权利要求62所述的方法,其中执行所述有状态服务包括将属于所述特定流的分组转发到所述特定节点。68.如权利要求62所述的方法,其中所述节点的集群是提供有状态服务的边缘服务集群。69.一种方法,包括:对于网络段的每个传出分组,通过对传出分组中的流标识符进行散列来识别节点的集群中的节点,识别出的节点用于为由传出分组的流标识符识别出的流提供有状态边缘服务;以及对于网络段的每个传入分组,基于与识别出的节点唯一相关联的传入分组中的转换后的源地址来识别节点的集群中的节点。70.如权利要求69所述的方法,其中所述集群的每个节点通过用与节点唯一相关联的转换后的源地址替换流的原始源地址来向传出分组提供有状态边缘服务。71.如权利要求69所述的方法,其中提供给传出分组的有状态边缘服务是源网络地址转换SNAT。72.如权利要求71所述的方法,其中集群中的每个节点通过将传出分组中的源地址转换为唯一的SNAT地址来执行SNAT。73.如权利要求71所述的方法,其中由传入分组中的源地址识别出的节点所提供的有状态边缘服务是用流的原始源地址替换转换后的源地址的逆SNAT。74.如权利要求69所述的方法,其中由传入分组中的转换后的源地址识别出的节点维护用于传入分组的流的状态信息。

百度查询: NICIRA股份有限公司 在无状态集群边缘上提供有状态服务的方法、设备和介质

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。

相关技术
相关技术
相关技术
相关技术