CN116195239A - 通过分布式弹性中间盒提供模块化网络服务 - Google Patents
通过分布式弹性中间盒提供模块化网络服务 Download PDFInfo
- Publication number
- CN116195239A CN116195239A CN202080100959.6A CN202080100959A CN116195239A CN 116195239 A CN116195239 A CN 116195239A CN 202080100959 A CN202080100959 A CN 202080100959A CN 116195239 A CN116195239 A CN 116195239A
- Authority
- CN
- China
- Prior art keywords
- node
- chain
- dft
- message
- network service
- 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.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/60—Router architectures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/58—Association of routers
- H04L45/586—Association of routers of virtual routers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Small-Scale Networks (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
提供分布式平台,用于开发和部署复杂的、弹性的、高度可用的多租户网络服务。所述网络服务系统包括网络内键/值存储器,所述存储器实现分布式流表(distributed flow table,DFT),所述DFT包括组织为链的节点。链中的每个节点包括模块化中间盒,所述模块化中间盒链接到所述链中的至少一个其它模块化中间盒,以基于规格表实现数据报文的网络服务功能,以生成流表项。所述DFT水平扩展并在副本之间保持一致的连接状态。无状态转发层为已建立的连接执行数据报文转发决策,并反弹数据报文进行传输。管理节点将以声明式编程语言描述的网络服务转换为所述规格表,以便分发到所述DFT的节点中的所述模块化中间盒。
Description
相关申请的交叉引用
本申请要求于2020年6月10日提交的发明名称为“通过分布式弹性中间盒提供模块化网络服务(Modular Network Services Via Distributed Elastic Middleboxes)”的第63/037,479号美国临时专利申请的优先权。该申请的内容通过引用并入本文。
技术领域
本申请涉及用于开发和部署多租户网络服务的分布式平台,具体涉及用于跨多租户网络服务和网关共享云资源同时创建和维护分布式共享状态的系统和方法。
背景技术
中间盒是一种计算机网络设备,用于除报文转发外的数据流量转换、检查、过滤和操作的目的。中间盒的示例包括防火墙、网络地址转换器(network address translator,NAT)、负载均衡器和深度报文检查(deep packet inspection,DPI)盒。现有的基于软件的中间盒或虚拟交换机保持本地共享连接状态,但没有共享状态信息的机制,这些基于软件的中间盒或虚拟交换机例如:ClickOS,如Martins等人在“ClickOS和网络功能虚拟化的艺术(ClickOS and the art of network function virtualization)”,第11届USENIX网络 系统设计和实现研讨会(NSDI.}14),第459–473页,2014年中所描述;Open vSwitch(OVS),如Pfaff等人在“Open vSwitch的设计和实现(The design and implementation of openvSwitch)”第12届USENIX网络系统设计和实现研讨会(NSDI 15),第117–130页,2015年中所描述。在故障恢复期间或横向扩展或横向收缩期间,如果没有在多个中间盒之间保持一致的状态,添加或删除中间盒,则会导致连接丢失和报文转发决策不一致。
基于硬件的中间盒价格昂贵、不可扩展,而且在云环境中难以操作和扩展。另一方面,在虚拟机或容器中部署现有的基于软件的中间盒以取代硬件网关,会导致资源利用率不足和成本效率低下,以及在多个租户和不同网络功能之间缺乏资源共享。此外,ClickOS和OVS等模型对服务可用性和扩展性的限制太大。
发明内容
现在描述各种示例,以简化形式引入一些概念,在具体实施方式中会进一步描述这些概念。发明内容并非旨在确定请求保护的主题的关键或必要特征,也并非旨在用于限制请求保护的主题的范围。
在示例性实施例中,为将网络服务扩展、编程、维护、升级、配置和故障域与数据中心网络解耦的平台提供了架构。该平台实现跨多租户网络服务和网关共享云资源,所述云资源包括计算和网络资源。该平台还提供了创建和维护分布式共享状态的技术,包括但不限于公共配置、流状态和端口分配。
根据本发明的第一方面,提供了一种网络服务系统,所述网络服务系统包括连接状态跟踪层、无状态转发层和转换网络服务的节点。所述连接状态跟踪层包括被组织为至少一个链的第一节点,链中的每个第一节点包括模块化中间盒,所述模块化中间盒链接到所述链中的至少一个其它模块化中间盒,以实现数据报文的网络服务功能。所述连接状态跟踪层实现包括所述至少一个第一节点链的分布式流表(distributed flow table,DFT)。所述模块化中间盒包括至少一个规格表,所述规格表确定实现所述数据报文的所述网络服务功能的动作序列。所述无状态转发层包括第二节点,所述第二节点包括至少一个第二节点,所述至少一个第二节点接收所述数据报文,在可用时,从所述DFT中选择所述流表项,根据所述流表项重写所述数据报文的报头,并基于所述流表项将所述数据报文发送到第一目的地。至少一个第三节点将以声明式编程语言描述的网络服务转换为所述至少一个规格表,并将所述至少一个规格表分发到所述DFT的所述至少一个第一节点链中的至少一个所述模块化中间盒。
根据本发明的第二方面,提供了一种实现网络服务的方法。所述方法包括:将以声明式编程语言描述的网络服务转换为至少一个规格表;将所述至少一个规格表分发到连接状态跟踪层的节点中的模块化中间盒,所述连接状态跟踪层包括组织为至少一个链的第一节点,所述模块化中间盒链接到至少一个其它模块化中间盒,以实现数据报文的网络服务功能,所述连接状态跟踪层实现包括所述至少一个第一节点链的分布式流表(distributedflow table,DFT);根据所述至少一个规格表中指定的动作序列对所述数据报文进行处理,以实现所述数据报文的所述网络服务功能,以生成流表项;基于所述流表项将所述数据报文发送到目的地。
在上述任一方面的第一种实现方式中,所述DFT在键/值存储器中实现。
在上述任一方面的第二种实现方式中,所述模块化中间盒包括本地数据结构中的多个快速数据路径(express data path,XDP)程序和共享数据结构配置,用于处理数据报文,以实现所述网络服务功能。
在上述任一方面的第三种实现方式中,所述至少一个链中的每个第一节点执行链复制协议,所述链复制协议复制状态和数据报文流表项,以在所述至少一个链中的所有第一节点上保持一致的流状态。
在上述任一方面的第四种实现方式中,所述至少一个第三节点提供扩展端点运算符,所述扩展端点运算符从以所述声明式编程语言编写的扩展端点配置生成所述规格表,所述扩展端点运算符还将所述网络服务功能的所述规格表传播到所述DFT的所述至少一个第一节点链的中间盒,以实现所述网络服务功能。
在上述任一方面的第五种实现方式中,提供了扩展端点,所述扩展端点跨越所述无状态转发层的多个第二节点,并根据数据报文流量需求自动扩展。
在上述任一方面的第六种实现方式中,提供了选择器,所述选择器将所述扩展端点映射到所述无状态转发层的至少一个第二节点。
在上述任一方面的第七种实现方式中,所述选择器包括路由器、软件交换机、扩展伯克利报文过滤器(extended Berkeley packet filter,eBPF)程序或Maglev哈希表中的至少一个,所述选择器为所述扩展端点选择所述无状态转发层的所述至少一个第二节点。
在上述任一方面的第八种实现方式中,所述扩展端点提供负载均衡器、网络地址转换器(network address translator,NAT)、深度报文检查器(deep packet inspector,DPI)、服务质量(quality of service,QoS)、隧道、防火墙、协议转换器IPv6/IPv4、访问控制列表(access control list,ACL)或其组合中的至少一个。
在上述任一方面的第九种实现方式中,所述连接状态跟踪层和所述无状态转发层用于彼此独立地扩展并在发生故障时互不影响。
在上述任一方面的第十种实现方式中,所述DFT包括Maglev哈希表,所述Maglev哈希表将所述DFT的每个第一节点链映射到所述DFT的至少一个其它第一节点链。
在上述任一方面的第十一种实现方式中,所述DFT的每个节点链包括实现共址中间盒功能的尾节点,所述尾节点的中间盒实现所述至少一个规格表中描述的所述网络服务功能的报文处理功能中的全部或部分。
在上述任一方面的第十二种实现方式中,所述DFT的所述至少一个第一节点链实现了第二数据报文的网络服务功能,所述无状态转发层的所述至少一个第二节点还接收所述第二数据报文。基于所述第二数据报文的第二流表项不能从所述DFT获得的确定,所述无状态转发层使用Maglev哈希算法选择所述DFT的第一节点链,并将所述第二数据报文发送到所述DFT的所述选定的第一节点链的尾节点。
在上述任一方面的第十三种实现方式中,所述无状态转发层的所述至少一个第二节点还从所述DFT的所述选定的第一节点链接收所述第二数据报文的新流表项,并基于所述新流表项将所述第二数据报文发送到第二目的地。
在上述任一方面的第十四种实现方式中,所述DFT的所述选定的第一节点链的所述尾节点检索扩展端点规格表,根据所述扩展端点规格表执行所述DFT的所述选定的第一节点链的所有中间盒,在所述DFT的所述选定的第一节点链的所述尾节点的快速数据路径(express data path,XDP)程序内复制所述扩展端点规格表,根据所述扩展端点规格表,从所述第二数据报文的处理中确定新数据流表项,并将所述确定的新数据流表项提供给所述无状态转发层。
在上述任一方面的第十五种实现方式中,一个或多个处理器实现DFT运算符,所述DFT运算符过滤和预测由所述DFT收集的资源使用数据,确定待添加到所述DFT或从所述DFT删除的快速数据路径(express data path,XDP)程序的多个链,重新计算Maglev哈希表,所述Maglev哈希表包括新的链分配,以跟踪XDP程序的每个链的前继链,并将所述重新计算的Maglev哈希表传播到所述DFT的所述第一节点。
在上述任一方面的第十六种实现方式中,所述数据报文的所述报头包括网络服务报头,所述网络服务报头包括元数据,所述元数据传递所述无状态转发层将应用于所接收的报文的报头的DFT操作所需的变化。
装置可以执行所述方法,并且可以处理计算机可读介质上的指令,并且所述方法和所述计算机可读介质上的指令的其它特征由所述装置的功能性产生。此外,针对每个方面及其实现方式提供的解释同样适用于其它方面和对应的实现方式。不同的实施例可以在硬件、软件或其任何组合中实现。此外,上述任一个示例可以与上述其它示例中的任一个或多个组合以在本发明范围内创建新实施例。
附图说明
在不一定按比例绘制的附图中,在不同视图中,相同的数字可以描述相同组件。附图通过示例而非限制的方式一般地示出了在本文中描述的各种实施例。
图1示出了在传统系统中添加中间盒时,由于中间盒之间缺乏一致的状态而导致的连接丢失。
图2示出了示例性实施例中的数据面工作节点架构。
图3示出了示例性实施例中的液滴(droplet)结构。
图4示出了示例性实施例中的分布式流表(distributed flow table,DFT)层和无状态转发层的系统架构。
图5示出了示例性实施例中到转发器的扩展端点映射。
图6示出了在示例性实施例中使用网络服务报头(network service header,NSH)来传递报文元数据。
图7示出了在示例性实施例中实现安全负载均衡器用例的扩展端点中的报文的生命周期。
图8示出了示例性实施例中的扩展端点编程模型。
图9示出了示例性实施例中用于连接状态跟踪层的具有字段的NSH元数据的结构。
图10示出了示例性实施例中具有字段的DFT操作的头结构。
图11示出了本文所述系统的示例性实施例中的常规报文流。
图12示出了示例性实施例中转发器(forwarder,FWD)行为的流程图。
图13A、图13B和图13C一起示出了示例性实施例中流表节点(flow table node,FTN)行为的流程图。
图14示出了示例性实施例中具有链增强和Maglev哈希的DFT自动扩展的流程图。
图15示出了示例性实施例中的DFT横向扩展(添加FTN节点)。
图16示出了示例性实施例中的DFT横向收缩(删除FTN节点)。
图17示出了FTN故障场景。
图18示出了示例性实施例中的主动复制流程。
图19示出了示例性实施例中的管理面架构。
图20示出了一个示例性用例,示出了数据中心中的东/西流量,其中目的地地址用于扩展端点。
图21是一个示例性用例,示出了到VM的北/南转发流量,其中目的地地址用于另一个扩展端点。
图22示出了图21的示例中的北/南反向流量。
图23A和图23B示出了示例性实施例中的IPv4到IPv6传输。
图24是用于执行示例性实施例提供的方法的电路的框图。
具体实施方式
首先应理解,即使下文提供了一个或多个实施例的说明性实现方式,但是结合图1至图24描述的所公开系统和/或方法可使用任何数量的技术实现,无论所述技术是当前已知的还是已经存在的。本发明绝不限于下文所示出的说明性实现方式、附图和技术,包括本文所示出和描述的示例性设计和实现方式,而是可在所附权利要求书的范围以及其等效部分的完整范围内修改。
在一个实施例中,本文描述的功能或算法可以在软件中实现。所述软件可包括存储于计算机可读介质或计算机可读存储设备(例如一个或多个非瞬时性存储器或其它类型的基于硬件的本地或网络存储设备)中的计算机可执行指令。此外,此类功能与模块对应,所述模块可以是软件、硬件、固件或其任何组合。根据需要,可以在一个或多个模块中执行多个功能,所描述的实施例仅仅是示例。所述软件可在数字信号处理器、专用集成电路(application specific integrated circuit,ASIC)、微处理器或在计算机系统中运行的其它类型的处理器中执行,例如个人计算机、服务器或其它计算机系统,从而将这种计算机系统转换成专门编程的机器。
图1示出了在传统系统中添加中间盒时,由于中间盒之间缺乏一致的状态而导致的连接丢失。如图1所示,在扩展之前,流Flow-1和Flow-2通过Middlebox-1(100)到达目的地Dest-1(110)和Dest-2(120),而Flow-3通过Middlebox-2(130)到达目的地Dest-3(140)。在扩展以添加Middlebox-3(150)处理Flow-2后,为Flow-2提供了不正确的目的地Dest-5(160),必须重新建立连接。在图1中,连接状态在本地存储到每个中间盒。在横向扩展时,流在所有中间盒之间均匀地重新分配。Flow-2现在映射到新分配的Middlebox-3(150),该中间盒在不知不觉中决定将Flow-2发送到Dest-5(160),而它应该被发送到Dest-2(120)。发生这种情况是因为在添加附加的中间盒期间,没有保持多个中间盒之间一致的连接状态。由于缺乏连接状态跟踪层,当横向扩展时出现新节点/中间盒时,该新节点/中间盒没有当前的流状态。通常,在故障恢复或横向扩展/收缩期间,连接丢失或更严重的情况可能导致报文转发决策不一致。此外,在虚拟机中部署网络中间盒的传统方法会导致资源利用率不足,因此由于多租户之间缺乏资源共享和网络功能不同,造成成本效率低下。以下描述描述了在模块化网络服务系统设计中解决这些问题和其它问题的系统和方法。例如,在所描述的系统中,当添加新的转发器时,它将查询连接状态跟踪层,以获知Flow-2将被发送到Dest-3(140),从而保持正确的转发决策。
整体架构
本文描述的模块化网络服务系统是两层系统,包括转发层和连接状态跟踪层,该连接状态跟踪层实现网络内键值存储器的分布式流表(distributed flow table,DFT)。转发层是无状态的,可以水平扩展,并且故障独立于连接状态跟踪层。连接状态跟踪层的DFT保持各种类型的状态,并被组织为节点链,其中,链中的每个节点使用链复制协议的唯一自定义版本复制状态和流表项。可以使用本文描述的链增强过程自动从系统中添加或删除多个链。网络服务被实现为跨越多个转发器节点的扩展端点,并根据流量需求自动扩展。到转发器节点的流量可以由等价多路径(equal-cost multi-path,ECMP)路由、Open vSwitch(OVS)组选择等传统协议以及在扩展的伯克利报文过滤器(extended Berkeley packetfilter,eBPF)程序中实现的新选择协议分发。
本文描述的架构将连接状态跟踪与中间盒决策分离,以便两个报文处理层能够彼此独立地扩展并在发生故障时互不影响。连接状态跟踪层是一个网络内键值存储器,它实现了多个复制的DFT链,其中,每个DFT链包括存储连接状态跟踪数据的多个流表节点(flowtable node,FTN)。因此,DFT是链表,链是FTN的集合,FTN包含连接状态。这些组件共同组成了连接状态跟踪层。
与典型的键值存储器不同,DFT将其事务嵌入常规报文流中,而无需建立与DFT节点的连接、缓冲报文、确认每个报文或开发支持DFT操作的外部协议。DFT在副本之间保持一致的连接状态,并根据新连接或连接关闭的速率横向扩展。另一方面,转发层是一个无状态转发层,它为已经建立的连接执行报文转发决策,并反弹报文进行传输。转发层内的单个节点独立地发生故障,并根据网络服务的总报文速率快速横向扩展。这两个层共同构成了一个可扩展、弹性和容错的中间盒分布式系统,可以取代现有的硬件网关。
示例性实施例中的中间盒分布式系统包括具有快速数据路径(express datapath,XDP)程序的模块化中间盒,这些程序被链接以形成各种类型的网络服务功能。跨多个XDP程序进行本地共享配置减少了报文遍历多个节点以对新流做出决策的需要。集成在数据面中的覆盖协议提供了一致的连接状态,内置的多租户实现了网络服务和中间盒的基础设施共享,而无需隔离虚拟机或容器中的中间盒,从而降低了成本。此外,本机数据面故障检测可通过闲谈协议最大限度地减少恢复连接的时间。
软件组织
图2示出了用于运行本文所述模块化网络服务系统的数据面工作节点架构200。数据面节点(Data-plane node,D-Node)210可以实现为虚拟机(virtual machine,VM)、支持turnkey Linux分发(例如PS225)或XDP卸载的智能网络接口卡(smart network interfacecard,SmartNIC)或示例性实施例中的其它类似配置。示例性实施例中的集群管理两个单独的节点池。第一池包括负责所有报文处理的D-Node 210。另一个池包括管理面节点(management-plane node,M-Node)220,这些管理面节点220运行一组运算符,这些运算符是Kubernetes服务的自定义软件扩展。自定义资源运算符实现管理面逻辑并管理D-Node210和中间盒,如下所述。D-Node 210和M-Node 220可以动态地加入和离开集群,并且D-Node 210不一定是Kubernetes工作节点,并且可以在Kubernetes集群的外部。
M-Node 220将网络服务暴露为单个IP地址(VIP)的端点,并且每个M-Node 220实现一个或多个中间盒的链。根据带宽需求,这种网络服务在本文中被称为跨多个D-Node210的扩展端点(映射到多个转发节点的逻辑功能)、端点横向扩展和端点横向收缩。以下是潜在扩展端点类型的非详尽列表:负载均衡器、网络地址转换器(network addresstranslator,NAT)、深度报文检查器(deep packet inspector,DPI)、服务质量(quality ofservice,QoS)、隧道、防火墙、协议转换器IPv6/IPv4、访问控制列表(access controllist,ACL)或这些类型的组合。生产系统的一个典型示例是实现安全负载均衡器的扩展端点,并包括两个中间盒,所述中间盒包括ACL和负载均衡器。开发人员可以通过规范接口指定和验证不同的扩展端点功能。
数据面节点
图2中所示类型的每个D-Node 210可以具有多个网络接口。管理面包括与多个D-Node210交互的M-Node 220,并将网络接口抽象为在D-Node 210上运行的液滴。如本文所使用,“液滴”提供到网络接口的一对一映射。液滴守护进程(droplet daemon,droplet-d)221包括性能指标库222、开源eBPF库223,该开源eBPF库223提供实现用户空间与内核对话的接口,以及D-Node 210上的远程过程调用(remote procedure call,RPC)接口224,该RPC接口224暴露于管理面,以使管理面可以与D-Node 210对话并管理D-Node 210。droplet-d221通过将XDP程序230附加到每个接口(如下面关于图3所述)并填充存储配置、流状态、流缓存和性能指标的eBPF映射(用户空间程序与在内核空间中运行的eBPF程序之间共享的数据结构)240来管理液滴。droplet-d 221还管理数据面用户空间中间盒212,其中,可以使用针对高性能处理优化的Linux内核250中的地址族在用户空间214中处理报文。AF_XDP套接字将报文从内核250带到同一节点上的用户空间。每个中间盒212实现多个XDP程序,这些XDP程序具有本地数据结构和共享数据结构216,它们一起减少了报文遍历多个节点以对新流做出决策的需要。
D-Node 210还部署nomad驱动程序225和开源设备插件226,它们扩展了Nomad代理/Consul 227,以进行健康检查、遥测、放置、自动扩展和资源管理。在SmartNIC的情况下,D-Node的管理面组件221至227可以部署到安装多个SmartNIC的公共服务器上,并且服务器可以充当代理,以通过RPC接口(包括droplet-d 221的RPC接口224和D-Node 210的RPC接口218)来管理包括D-Node 210的数据面。
本领域技术人员将理解,使用SmartNIC作为D-Node 210除了具有吞吐量和延迟优势之外,还具有优于VM的成本优势。此外,典型的100Gbps SmartNIC的成本仅为VM实例的成本的一小部分。
液滴组织
图3示出了示例性实施例中的液滴结构。图3是图2中所示的XDP程序230的架构的放大视图。每个液滴300运行实现数据面功能的XDP程序。液滴的XDP程序包括主XDP(Primary XDP,P-XDP)程序310,该P-XDP程序310从接收器RX接收输入报文,并执行初始报文分类并调用中间盒功能。在示例性实施例中,中间盒是实现类似ClickOS的中间盒(例如,中间盒M-XDP-1、M-XDP-2、……、M-XDP-N)320和相关元素的eBPF程序(M-XDP)。模块化XDP程序M-XDP-1到M-XDP-N程序320被动态加载和卸载,并与P-XDP 310共享eBPF映射340。P-XDP310通过通信媒体(电信信道和/或互联网)调用M-XDP程序320,M-XDP程序320使用AF_XDP接口向用户空间中的中间盒330发送数据报文。因此,中间盒330对应于包括图2的D-Node 210的数据面中的用户空间中间盒212。大多数网络服务的最重要的元素是IPRewriter、IPClassifier和IPFilter。提供了两种新的M-XDP程序320类型,它们特定于集群功能:转发器(forwarder,FWD)和流表节点(flow table node,FTN),其功能将在下文详细介绍。
M-XDP程序320完全在内核250中运行或卸载到SmartNIC。对于一些复杂的中间盒,M-XDP程序320可以通过AF_XDP接口向用户空间中的中间盒330发送报文。P-XDP 310和M-XDP程序320都共享相同的eBPF映射340,所述eBPF映射340是在内核250中运行的XDP程序的开源数据结构。管理面提供报文分类规则,P-XDP 310通过该规则确定哪个M-XDP程序320应处理报文并尾调用对应的eBPF程序,并在报文发送器TX处提供输出报文。尾调用是内核250中eBPF基础设施内部的功能调用,该尾调用使代码能够相互对话,但不将控制权返回给调用程序。
液滴还维护与所有P-XDP 310和M-XDP 320程序共享的一组eBPF映射340。在示例性实施例中,共享的eBPF映射340具有四个类别:
流映射(f-map)342:中间盒用于读/写流状态的读/写映射。典型的f-map 342跟踪流的互联网协议(internet protocol,IP)重写规则和与流表项的连接状态,例如:
(saddr,sport,daddr,dport,protocol,vni)→(saddr’,sport’,daddr’,dport’,protocol’,vni’,conntrack),
其中,saddr是源IP地址,daddr是目的地IP地址,sport是源端口,dport是目的地端口,protocol是协议号,vni是虚拟网络标识符。'符号表示报文的字段的修改值,conntrack是跟踪连接状态(例如关闭)的标志。可以针对特定的用例描述几种类型的f-map342。
配置映射(c-map)344:存储不同网络服务的配置和中间盒配置的只读映射。只有droplet-d 221写入c-map 344,而P-XDP 310和M-XDP程序320仅从c-map 344读取配置。下面将描述几种类型的c-map。
跳转表(j-map)346:跳转表346将M-XDP程序320索引映射到其eBPF文件描述符(index→fd),使得P-XDP 310用于调用M-XDP程序320,M-XDP程序320用于相互调用。
计量映射(m-map)348:中间盒用于提供报文和健康指标的读/写映射。
管理面节点
用户、管理员和管理面运算符通过Kubernetes应用编程接口(applicationprogramming interface,API)服务器与示例性实施例中的节点集群交互,该服务器类型由Brewer在“Kubernetes和云原生路径(Kubernetes and the path to cloud native)”第六 届ACM云计算研讨会论文集,第167–167页,2015年(如图19所示)中所述,并在下文更详细地描述。通过自定义资源定义,API服务器功能被扩展以管理特定于此处描述的系统的新类型对象。每个对象都有一个自定义资源运算符,该运算符通过各种工作流管理其从创建、发放到删除的生命周期。管理员将运算符部署为集成在Kubernetes的控制环路中的Pod。
M-Node 220使用Nomad(参见nomadproject.io)和Consul(consul.io)集群227,为数千个D-Node 210的大规模集群提供现成服务。与操作员类似,管理员将Nomad/Consul集群227部署为Kubernetes Pod。Nomad将功能暴露给运算符,以便放置和自动扩展各种组件。Consul提供D-Node 210的自动发现,其中,D-Node 210可以动态加入或离开数据面池。Consul还通过闲谈协议提供健康检查服务,该协议使集群能够发现新的引导节点。此外,D-Node 210可以使用Consul的闲谈协议来快速检测其它节点的健康状态变化,这是完全在数据面协议中快速故障恢复的重要特征。此外,健康检查服务可以使各种运算符快速激活工作流,以替换故障节点。
数据面架构
图4示出了示例性实施例中的整体系统架构。数据面由两个层组成:分布式流表(distributed flow table,DFT)400和包括转发器(FWD)412(FWD-1)、414(FWD-2)和416(FWD-N)的无状态转发层410。FWD 412-416可以在不共享流动状态的多个液滴300(图3)上水平扩展eBPF程序(M-XDP程序320)。另一方面,DFT 400可以是组织为链的一组FTN(M-XDP类型)。如图4所示,链-C0(420)、链-C1(430)和链-C2(440)分别包括FTN 422-426(链-C0)、FTN 432-436(链-C1)和FTN 442-446(链-C2),这些FTN使用以下文献中描述类型的链复制协议复制流表项,例如Van Renesse等人的“支持高吞吐量和可用性的链复制(Chainreplication for supporting high throughput and availability)”,OSDI,第4卷,2004年;Jin等人的“Netchain:无扩展子rtt协调(Netchain:Scale-free sub-rttcoordination)”第15届USENIX网络系统设计和实现研讨会(NSDI 18),第35–49页,2018年;和Gaznavi等人的“服务功能链的容错”,arXiv preprint arXiv:2001.03321,2020年。图4示出了具有三个链420、430和440的DFT 400,每个链包括3个副本和形成无状态转发层410的N个FWD 412-416。单个链中的FTN可以执行自定义链复制协议,以在链的副本之间保持一致的流状态。与现有的故障恢复技术不同,DFT 400将复制协议头嵌入报文的外部报头中,以便任何FTN或FWD的报文传输都没有延迟。相比之下,大多数现有的故障恢复技术在复制过程中缓冲报文,从而延迟报文传输。此外,DFT 400横向扩展/收缩链的数量,以匹配集群中的连接速率。在示例性实施例中,Maglev一致哈希算法(例如,Eisenbud等人的“Maglev:快速、可靠的软件网络负载均衡器(Maglev:A fast and reliable software networkload balancer)”,第13届USENIX网络系统设计和实现研讨会(NSD}16),第523–535页,2016年)可用于跨多个链420、430和440对流表项(重新)分区。在示例性实施例中,图4中标识的每个元素可以在图2中所示的架构上实现为XDP程序。
DFT和FWD管理
FWD和DFT运算符利用D-Node 210的池将FWD和FTN放置为液滴300。液滴300可以是FWD或FTN,FTN和FWD不能共存于同一D-Node 210上。但是,多个FWD可以共享同一D-Node210,但每个FWD被放置在单独的液滴300上。实现FTN的液滴300还加载集群支持的所有中间盒作为M-XDP程序320。除了与尾FTN并置的M-XDP程序320之外,所有M-XDP程序320都是空闲的。例如,在图4中,分别与FTN-T3、FTN-T6和FTM-T9并置的中间盒428、438、448都是活动的,并包括一个或多个逻辑功能。对于单个DFT 400,链中的FTN数量是静态的。单个链至少有两个FTN。DFT运算符将链中的一个FTN指定为尾节点,一个FTN指定为头节点,其余节点(如果有)指定为副本节点。例如,图4中的链-C0具有FTN-T1 422作为头节点,FTN-T2 424作为副本节点,FTN-T3 426作为尾节点。链的数量可以增加和减少,用于横向扩展和横向收缩。DFT运算符维护Maglev哈希表450,并将表450传播到FWD 412-416或可以与DFT 400通信的任何其它实体(例如,主机节点、其它运算符)。
扩展端点和转发器选择
扩展端点跨越多个FWD,FWD选择器终止指定给扩展端点的流前往其中一个FWD。扩展端点运算符基于其带宽要求在多个FWD上放置、横向扩展和横向收缩扩展端点。扩展端点属于不同的租户,多个扩展端点类型共享同一FWD。
图5示出了用于进入系统中的报文的四个扩展端点540、550、560和570以及不同类型的FWD选择器。图5中的FWD选择器是数据中心路由器510(例如,使用等价多路径(equal-cost multi-path,ECMP)路由协议和/或边界网关协议(border gateway protocol,BGP))、主机VM 522上的软件交换机520(例如,使用组选择哈希的OVS),以及使用简单哈希的VM532或容器的出口路径上的eBPF程序530。如图所示,扩展端点运算符将一个租户的北/南报文封装放置在转发层410的一组FWD上,这些FWD也共享另一个租户的负载均衡器。该方法确保系统可与传统云网络以及最先进的主机网络方法一起部署。扩展端点运算符通过扩展端点到FWD映射的变换保持数据中心路由器或主机交换机的更新。
扩展端点540-570映射到转发层410的多个FWD节点,并且可以使用许多技术中的一个或多个技术来选择要向其发送报文的转发层410的FWD节点中的一个。在该示例中,扩展端点运算符将三个扩展端点540、550、560放置在转发层410的FWD上,其中,转发层410的三个FWD在三个扩展端点540、550和560上共享。在这种情况下,扩展端点运营商还编程ECMP路由器510以选择一个扩展端点560的FWD,开源交换机OVS从在主机上运行的VM 522接收报文,并选择第二扩展端点550的FWD节点中的一个,另一主机上的eBPF程序530选择第三扩展端点560。例如,在简单哈希的情况下,报文从VM 532到eBPF程序530,eBPF程序530实现报文的简单哈希,并选择扩展端点560的FWD节点中的一个。第四扩展端点570被分离。此处,扩展端点运算符不将扩展端点570分配给转发层410的任何FWD。实际上,对于分离的扩展端点570,主机将流直接发送到使用Maglev哈希表580选择的链中的一个(例如,链420)的FTN尾节点(例如,具有活动中间盒428的尾节点426),该FTN尾节点在技能端点(SkilledEndpoint)直接映射到FTN节点而不是FWD节点时使用。但是,在示例性实施例中,Maglev哈希也可用于将报文分配给扩展端点的FWD节点。
在分离的扩展端点570的情况下,FWD的功能内置在主机中。分离的扩展端点570的好处是绕过转发层410,并提供开发自定义哈希函数以选择链的能力。下面将结合东/西流量用例讨论分离的扩展端点场景。
上述架构可以实现DFT 400的自动扩展,这消除了添加新的流跟踪节点的操作开销。此外,DFT 400提供网络内功能,以跟踪除流跟踪外的所有类型的状态变化。与三层架构相比,本文描述的两层系统进一步最小化了建立连接的跳数。此外,与尾节点并置的中间盒决策可以使配置更改立即对现有流生效,而无需外部同步机制。如下面关于图14所解释,转发层410的FWD还提供自我验证功能,而不需要外部同步。
模块化网络服务
本文描述的系统还使用声明式编程方法,该方法将中间盒高级描述变换为规格表。规格表确定了实现中间盒功能(网络服务)所需的模块化动作序列。还提供了验证规格表正确性的机制。系统的模块也是“分离”的,它们的执行在转发层410中的不同节点之间划分。规格表和自定义报文格式可以实现规格表的执行,即使模块不一定在相同的节点上运行。系统中的模块也可以在没有任何服务中断或新部署的情况下添加或删除。
该系统同时处理东西和北南流量。对于东西流量,端点的报文使用主流隧道协议(通常是VxLan或Geneve)进行隧道传输。对于南北流量,网关扩展端点从服务提供商接收外部流量,其中,FWD对报文进行隧道传输。在DFT 400内和FWD 412-416之间,网络服务报头(network service header,NSH)用于传送报文元数据。
图6示出了在示例性实施例中使用VXLAN报文格式的NSH 600来传输取决于应用的报文元数据(例如,元数据类型-2 610)、服务路径标识符(service path identifier,SPI)/服务索引(service index,SI)字段620、NSH基本头630或其任何适当的组合。如图6所示,VXLAN报文包括外部以太网头640、外部IP头645、外部UDP头650和VXLAN/Geneve头655,它们提供原始报文的VXLAN封装,该原始报文包括内部以太网头660、内部IP头665、内部UDP头670和有效负载675。有关NSH的更多信息,请参见Paul Finn、Uri Elzur和CarlosPignataro的“网络服务报头(network service header,nsh)”,RFC 8300,RFC Editor,2018年。基板网络预计不会基于NSH 600执行任何路由决策以实现系统的功能。NSH 600内的元数据类型-2 610的内容具有一定大小,该大小取决于应用,如下面将参考图9和图10更详细地讨论。
扩展端点模块化编程
NSH的SPI/SI字段620标识扩展端点。转发层410的FWD将报文映射到SPI,其中,扩展端点运算符在放置扩展端点的转发层410的每个FWD中填充配置映射(SPI-c-map)的表项。SPI-c-map中的报文到SPI映射通常为(vni,daddr,dport)→spi。SPI/SI字段620中的NSH的SI标识扩展端点的中间盒。P-XDP 310和M-XDP程序320使用SPI和SI值来确定应处理报文的下一个中间盒。报文当从一个中间盒传输到下一个中间盒时,根据扩展端点规格表将SI值减少一个或多个。扩展端点运算符在扩展端点的每个FWD和DFT 400的所有FTN中编程其规格表。配置图(扩展端点-c-map)存储SPI到其规格表的映射。
例如,考虑在访问控制列表(access control list,ACL)后面实现负载均衡器(load-balancer,LB)的扩展端点。图7示出了在示例性实施例中实现安全负载均衡器用例的扩展端点中的报文的生命周期。图7示出了与液滴-1 710和头节点706通信的液滴-2700。用于进行报文处理的详细SI值在规格表720中示出。液滴-2 700包括P-XDP分类器702、LB M-XDP 704和监控(MON)M-XDP 708。液滴-1 710包括P-XDP分类器712、ACL M-XDP714和FWD 716。液滴-1 710示出两次,以阐述液滴-1 710的不同部分用于在与液滴-2 700通信的不同点。
当报文首次从源(SRC)到达扩展端点的FWD节点中的一个处的液滴-1 710时,P-XDP分类器712查找扩展端点的SPI,插入NSH 600,设置报头的SPI值,并将SI设置为255。然后,报文进行如下动作(如图7的SI值规格表720所示):
SI:255动作:液滴-1 710的P-XDP分类器712尾调用ACL M-XDP 714:
οACL M-XDP 714执行无状态报文过滤并且可以丢弃报文
οACL M-XDP 714将SI减一
SI:254动作:ACL M-XDP 714尾调用液滴-1 710的M-XDP FWD 716:
οFWD 716查找其流高速缓存,以查找报文的流的现有表项
ο如果存在流表项,则FWD 716将SI减少为247,否则将SI减少为253
SI:253动作:FWD 716将报文发送到液滴-2 700
οDroplet-2 700的P-XDP分类器702查找其流高速缓存,以查找报文的流的现有表项
ο如果存在流表项,则P-XDP分类器702将SI减少到252,否则将SI减少到251
SI:252动作:液滴-2 700的P-XDP分类器702将报文发送到其原始源(液滴-1)710
οP-XDP分类器702将SI减一
SI:251动作:液滴-2 700的P-XDP分类器702尾调用LB M-XDP 704的报文:
οLB M-XDP 704确定要将报文发送到的后端的IP地址
οLB M-XDP 704将SI减一
SI:250动作:LB M-XDP 704将报文发送到头节点706,以进行复制
ο头节点706根据下面讨论的复制协议更新流表项
ο最后一个DFT副本将SI减一
SI:249动作:SI也用于在复制期间对报文进行处理,为了简洁起见,此处省略了协议的细节,因为其细节将在下文中描述。
SI:248动作:最后一个DFT副本将报文发送到液滴-2 700的MON M-XDP 708。
οMON M-XDP 708更新m-map。
οMON M-XDP 708将SI减一
SI:247动作:MON M-XDP 708将报文发送到其原始源(液滴-1 710)。
ο液滴-1 710的P-XDP分类器712将SI减一。
SI:246动作:液滴-1 710的P-XDP分类器712尾调用液滴-1的M-XDP FWD 716
ο液滴-1 710的FWD 716缓存流表项并将报文发送到其目的地(DST)。
规格表
在示例性实施例中,扩展端点规格表能够以模块化的方式灵活地编程扩展端点逻辑。大多数规格分支将在同一液滴300上调用M-XDP程序320,但必须通过DFT 400更新流状态的情况除外。在这两种情况下,规格本身都足够通用,因此中间盒运算符可以放置在节点集群中的任何位置。此编程模型使扩展端点管理员能够通过管理节点(例如,管理面中的节点)实现的高级描述语言设计扩展端点逻辑。
图8示出了示例性实施例中的扩展端点编程模型800。扩展端点编程模型800包括扩展端点配置810(以扩展端点描述语言提供),该扩展端点配置810由扩展端点运算符820处理,以生成规格表830。功能验证器840将中间盒规格850和规格表830作为输入,并生成证明或计数器示例860,以证明规格表830是否有效。
扩展端点运算符820是关于图5描述的类型,并采用扩展端点配置810,以指定用高级描述语言编写的功能将由扩展端点执行,并实时地将高级描述语言变换为规格表830,以指定用于实现扩展端点功能的一系列中间盒动作。规格表830被发送到所有节点,以便节点知道当接收到报文时如何处理它。功能验证器840,例如Gravel(Zhang等人的“使用gravel自动验证可自定义中间盒属性(Automated verification of customizable middleboxproperties with gravel)”,第17届USENIX网络系统设计和实现研讨会(NSDI 20),第221–239页,2020年),将规格表830和中间盒850的预定规格作为输入,并确定扩展端点运算符820是否已经对用户指定的功能进行了正确的转换,以了解系统应该做什么。验证器840提供扩展端点配置的正确性的证明或计数器示例860。如果被证明是正确的,则扩展端点将规格表830传播到转发层410和DFT 400中的扩展端点的FWD。例如,在图7的示例中,扩展端点将规格表720传播到节点,以实现访问控制列表后面的负载均衡器。因此,节点将包括相同的规格表830,但不同的用户可以基于接收到的报文访问不同中间盒中的不同配置表,并由对应的扩展端点执行规格表830中指定的动作。规格表830将被推送到空闲中间盒和活动中间盒。当接收到报文时,FTN节点将报文分类为属于某个扩展端点,并将为该扩展端点获取对应的规格表830,并执行规格表830中列出的操作。
因此,与传统方法不同,该系统可以实现几种类型的“分布式中间盒”,而不需要代码更改和单独部署。该系统还提供模块验证功能和声明式编程接口,这些接口知道系统的分布式性质。模块可以独立扩展,可以被几种中间盒类型重用,并且不需要部署在同一机器上。
DFT内部协议
在示例性实施例中,如果已经对流做出了中间盒决策,则转发层410的FWD节点立即修改报文并将报文转发到它们的目的地。如果FWD节点不知道决策,如在故障、横向扩展或新流的情况下,则报文被发送到DFT的链中的一个(例如,链420、链430或链440)的尾节点。链是通过Maglev哈希选择的。如果尾节点找到流表项,则它将以包括流表项的预先做出的决策回复FWD。如果不存在流表项,则尾节点根据规格表做出建立新的流表项的新决策,并在链中复制该决策。
图9示出了示例性实施例中的DFT 400的具有字段的NSH MD类型2元数据900的结构。NSH MD类型2元数据900主要围绕DFT操作设计,以传达FWD必须应用于报文的报头的所需更改。字段包括:
ο版本(3位)910:元数据版本
ο长度(5位)920:以4字节为增量的元数据总长度
ο反向(R)(1位)930:指示反向流的DFT操作
ο保留(23位)940:供将来使用,且必须为零
οFWD IP地址(32位)950:报文返回到的FWD的IP地址
οDFT操作960:可变长度表操作
只要网络最大传输单元(maximum transmission unit,MTU)允许的报文中存在空间,系统的NSH MD类型2元数据900就可以将多个DFT操作打包在同一元数据头中。图10示出了在示例性实施例中具有字段的DFT操作1000的头结构。字段包括:
οOp(4位)1010:元数据版本
–0x0:保留
–0x1:Lookup
–0x2:Reply
–0x3:Update ANY
–0x4:Update NOEXIST
–0x5:Update EXIST
–0x6:Delete
–0x7-0xf:保留
ο保留(2位)1020
ο索引(16位)1030:FTN的eBPF映射的索引
οKey Len(5位)1040:键长度,4字节的倍数
οVal Len(5位)1050:值长度,4字节的倍数
ο键1060:长度的键有效负载(Key Len)
ο值1070:值的值有效负载(Val Len)
键和值的最大长度适合IP+传输控制协议(transmission control protocol,TCP)头。键和值字段的确切结构被保留,因为它们与NSH头600中的SPI/SI字段620的SI所引用的eBPF映射的键和值结构相关。通常,优化后的键用作内部报文头的引用字段,以节省元数据头的空间,并避免复制报文中已经存在的不必要信息。
与传统系统不同,使用唯一和自定义的NSH(元数据类型-2)600减少了覆盖层用于DFT操作和跨节点分布式模块之间的互通的开销。本文描述的协议可以将一般状态信息传输到DFT 400的节点,以用于流跟踪状态,而不需要报文缓冲或附加的确认机制。对新流的决策在同一尾FTN节点上进行,而不需要额外的跳到附加的决策层。此外,本文描述的方法可以实现快速横向扩展/横向收缩、故障恢复期间的自动同步以及立即配置传播,而不需要外部同步或单独的实时同步协议。主动复制或同步仍可用于补充此被动复制协议,作为可选的优化。
报文流
图11示出了本文所述系统的示例性实施例中的常规报文流。图11描述了常规报文流以及转发层410的FWD与DFT 400之间的交互的典型示例。算法1(图12)和算法2(图13A和图13B)详细说明了用于报文处理的FWD和FTN行为。如图11所示,报文通过步骤1-7从源到目的地,如下所示:
1.FWD-1 1100从源1110接收报文。
2.FWD-1 1100在其流f-map(流缓存)中查找报文的流表项。
a.如果存在表项,则FWD-1 1100根据流表项重写报文的报头,并反弹报文以传输到其目的地1120。
b.如果不存在表项,则FWD-1 1100对报文的元组进行哈希操作,并从Maglev表中选择对应的链,添加与报文的扩展端点相对应的NSH头(使用查找操作码),然后将报文发送到链的尾FTN(图11中的FTN-T3 1130)。如果报文没有被封装(外部流量),则FWD-1 1100封装报文。
3.当尾FTN-T3 1130接收到报文(2(b)处)时,它在其流f-map中查找报文流表项。
有两种可能的情况:
a.如果存在表项,则FTN-T3 1130以新的流表项回复,并将其发送到FWD-11100(使用Reply操作码)。
b.如果不存在表项,则假定它是一个新流,FWD-1 1100尾调用扩展端点规格表中的第一M-XDP。规格表继续进行,直到最后一个流表项结束,然后M-XDP将更新DFT操作添加到NSH 600,并将报文发送到链的头FTN(图11中的FTN-T1 1140)。
4.第四报文可以是:
a.当FWD-1 1100接收到报文(3(a)处)时,它缓存流表项,根据新的流表项重写报文的报头,并反弹报文以传输到目的地1120。
b.当头FTN 1140接收到报文(3(b)处)时,头FTN 1140发送报文(4(b)处)之前有两种可能的场景:
i.如果存在未到期的流表项,则头FTN 1140忽略报文3(b)中的任何更新请求,并重置流表项到期计时器。这种情况表示尾节点正在从故障中恢复,或正在进行重新分区(横向扩展/横向收缩)。在将报文4(b)发送到副本节点(副本FTN-T2 1150)之前,头FTN 1140使用其f-fmap中的相同流表项修改报文中的更新请求。
ii.如果没有流表项或现有流表项已到期(空闲流),则头FTN 1140根据报文3(b)中的更新请求更新流表项。
5.当副本FTN-T2 1150接收到报文4(b)时,它根据报文4(b)中的更新请求更新流表项——无论流表项是否到期或不存在。
6.当尾FTN-T3 1130接收到报文5时,它更新流表项——无论流表项是否到期或不存在。然后,尾FTN-T3 1130将具有新流表项的报文发送到FWD-1 1100。但是,如果反向流哈希到不同的链,则FTN-T3 1130以类似的报文流(从3(a)开始)更新反向流表项。
7.与4(a)中一样,当FWD-1 1100接收到报文6时,它缓存新的流表项选项,根据新的流表项重写报文的报头,并反弹报文以传输到目的地1120。
图12示出了示例性实施例中转发器(例如,图11中的FWD-1 1100)的行为的以下算法1的流程图1200。如图所示,FWD节点将FWD表中没有流或状态表项的报文封装到DFT尾部。自定义携载协议(NSH)用于定义所有连接状态跟踪事务(Lookup、Reply、Update Any、Update No-Exist、Update Exist、Delete)。FWD节点通过一致性哈希选择流的链。在转发器层或转发器节点和流表节点之间不提供报文缓冲、重试或确认(acknowledgement,ACK)报文。
如图12所示,在操作1210处,FWD从源接收报文(可以是报文1、3a或6)。在操作1220处,FWD在其流缓存的f-map中查找报文的流表项。如果在操作1230处确定存在流表项,则在操作1240处修改报文并将报文发送到目的地1120(报文2(a))。如果在操作1230处确定不存在流表项,则在操作1250处确定报文是否包含NSH头,以及操作码是否为“Reply”。如果是,则在操作1260处更新FWD的流缓存,删除NSH头,并且修改报文并将报文发送到目的地1120(报文4(a)或7)。另一方面,如果在操作1250处确定报文不包含NSH头,并且操作码是“Reply”,则在操作1270处确定报文是否被封装。如果否,则在操作1280处封装报文。否则,在操作1290处,将NSH 600添加到报文中,将FWD IP地址推送到报头,使用Maglev哈希获得尾地址,并将报文发送到选定链的尾节点(报文2(b))。
关于图12描述的FWD行为可以在算法1中表示如下:
算法1:FWD行为
图13A、图13B和图13C一起示出了示例性实施例中DFT链中FTN的行为的以下算法2的流程图。
图13A示出了示例性实施例中尾节点(例如,图11中的FTN-T3 1130)的行为的以下算法2的流程图1300。如图13A所示,在流查找(例如,由FWD-1节点1100进行)时,在操作1302处,FTN-T3 1130接收具有操作码查找的报文(图11中的报文2(b))。如果在操作1304处确定存在流表项,则在操作1306处,尾FTN-T3 1130更新NSH键/值,并将报文(图11中的报文3(a))发送到FWD-1节点1100。如果在操作1304处确定不存在流表项,则FWD-1节点1100通过激活实现中间盒功能的多个XDP程序来决定给定规格表的输出流。具体地,在操作1308处,尾FTN-T3 1130检索如关于图8所述创建的扩展端点规格表,并根据规格表执行链中的所有中间盒。然后,在操作1310处,尾FTN-T3 1130通过将具有操作码UPDATE NO_EXIST的报文作为键/值表项转发到头FTN 1140来提交新决策的流表项。头FTN节点1140通常是当前链或前继链的头节点。如果横向扩展或横向收缩正在进行中,则头FTN节点1140是该流的处理器链的头部。FWD-1 1100了解一个报文跳内的现有流表项和反向流表项。FWD-1 1100仅接触DFT400中的尾FTN-T3 1130。当尾FTN-T3 1130启动流更新时,它保持链复制正确性所需的先进先出(first-in first out,FIFO)链路属性。
图13B示出了示例性实施例中头节点(例如,图11中的FTN-T1头节点1140)的行为的以下算法2的流程图1320。如图13B所示,在操作1322处,头FTN节点1140接收具有操作码UPDATE NO_EXIST的报文(报文3(b))。在操作1324处,头FTN节点1140仅在流表项不存在或已经到期时更新流表项,并且如果链也是反向流链,则更新反向流表项。在操作1326处,如果存在流表项,则头FTN节点1140将操作码修改为Update ANY,并将报文发送到链中的下一个节点(报文4(b))。因此,头FTN节点1140指示中断复制流的恢复、故障尾节点的恢复或在链增强(横向扩展/横向收缩)期间的重新分区。在DFT链的横向扩展/横向收缩期间,可以进行被动重新分区。对于替换故障FTN节点的新FTN节点,也可以进行流表项的被动同步。
图13C示出了以下算法2的流程图1330,示出了DFT 400中接收具有操作码UPDATEANY、EXIST或DELETE的报文的FTN节点的行为。如图13C所示,在操作1332处,FTN节点接收具有操作码UPDATE ANY、EXIST或DELETE的报文(图11的报文4(b)或5),并在操作1334处更新或删除前向和反向流表项,并重置它们的到期计时器。在操作1334处,如果链也是反向流链,则FTN节点还更新或删除反向流表项。如果在操作1336处确定FTN是链的尾部,则在操作1338处尾FTN使用报文(图11的报文6)的NSH元数据头630中的FWD IP地址将报文发送到原始FWD。否则,在操作1340处,FTN将报文原样发送到链中的下一个FTN节点(例如,图11的报文5)。
关于图13A至图13C描述的FTN节点行为,可以在算法2中表示如下:
算法2:FTN行为
DFT扩展
图14示出了在示例性实施例中具有链增强和Maglev哈希的DFT 400自动扩展的流程图1400。如图所示,在操作1410处,DFT运算符(在管理面中执行)连续监视每个链的尾FTN节点的资源使用。资源通常但不一定限于带宽和内存利用率。在操作1420处,DFT运算符过滤和预测收集的每个链的加载度量,并确定要添加或从DFT 400删除的链的数量。在操作1430处,DFT运算符重新计算Maglev哈希表1435,包括前继链的新链C1的新链分配,或者删除链C1时重新计算Maglev哈希表1440。例如,Maglev哈希表1435以链C0和C2的哈希开始,并当在横向扩展期间添加链C1时修改为包括链C1的哈希。类似地,Maglev哈希表1440从C0、C1和C2的哈希开始,并当在横向收缩期间被修改为删除链C1的哈希。对于每个横向扩展或横向收缩动作,可以添加或删除一个链。在操作1445处,在横向扩展或横向收缩到前继链的FTN节点之后,该过程为每个链传播新的Maglev哈希表1435或1440。使用Maglev哈希表以这种方式维护链与其前继链之间的映射,使系统能够在不进行外部同步的情况下执行横向扩展和横向收缩操作。下面将分别参考图15和图16描述横向扩展和横向收缩的示例。
如上所述,横向扩展/横向收缩过程是向DFT添加附加链或从DFT删除现有链的过程。这样做是为了通过跨链及其FTN重新分配流表表项来优化流决策负载。通过依靠两个复制协议和下面描述的称为“链增强”的过程,可以确保所有流表项的均匀分布,同时也保留先前作出的流决策。
链增强
在删除链(横向收缩)或将链添加到DFT 400(横向扩展)的情况下,管理面的M-Node 220执行链增强。在任一种场景中,M-Node 220将通过首先确定“前继(predecessor)”链和“后继(successor)”链将链连接在一起。接下来,前继链的尾节点被识别为后继链的伪头。最后,主动复制和被动复制都将协同工作,以在活动链之间对流表项进行重新分区和分配。
作为在头部增加链的替代方案,在后继链的尾部增加前继链将会对前继链的尾部造成附加的负载。以图15中的以下场景为例,示出了DFT横向扩展(增加FTN节点),其中,FTN-T3 426仍然是活动的,同时也增强了新创建的链-C1。在这种情况下,FTN-T3 426将用于哈希到链-C0和链-C1的流。
重新分区
重新分区有两种方法:被动和主动。在这两种情况下,M-Node 220根据复制协议执行链增强。在图15中,FTN-T9 446(它是链-C2 440的尾部)和FTN-T3 426(它是链-C0 420的尾部)分别成为链-C0 420和链-C1 430的伪头。主动复制协议被激活,以使用FTN-T6436的活动中间盒将链的新索引从其前继链复制到后继链,以决定如何处理报文。来自FTN-T3426的索引0和2的所有流都被哈希到链-C1 430的FTN-T4 432,从而跨链-C1 430复制。同时,给定先前描述的报文流,被动复制协议保留和复制先前在FTN-T9 446和FTN-T3 426中作出的决策。
例如,假设来自图15的链-C1 430的FTN-T6 436从转发层410的FWD接收报文,该报文具有哈希到表1500的表索引2的流的Lookup操作码。FTN-T6 436然后向链-C1的伪头1510(FTN-T3)发送更新流请求(报文3(b)),该伪头也是链-C0 420的尾部。如果FTN-T31510找到现在属于链-C1 430的流的表项,则FTN-T3 1510忽略更新流请求,并将现有表项复制到FTN-T4 432(报文4(a))。最终,哈希到表索引2的任何流表项在报文5和6处跨链-C1 430复制,并从链-C0 430的节点中删除。通过类似的过程,FTN-T9 446可以成为链-C0'的伪头1520。
当改变FTN的流表项时,链增强可以防止主动复制协议与被动复制协议之间的竞争情况。由于主动复制仅获取FTN流表项的快照,因此依赖链增强来防止现有流表项被被动复制覆盖。
例如,考虑图16的DFT横向收缩(删除FTN节点)场景,其中,链-C1的尾节点FTN-T6436将被删除。在没有链增强的情况下,从表1600获取FTN-T5的流表表项的快照,并且流表表项从FTN-T1 422开始,在链C0的所有FTN(报文4(b)、5和6)上传播。在同时发生被动复制的情况下,假设尾节点FTN-T3 426将新的键值对流表项写入FTN-T1 422。这现在可能会导致流表项的保留失败,因为FTN-T1 422现在将忽略使用相同键进行的主动复制的任何写入。在具有链增强的情况下,FTN-T3 426将尝试写入FTN-T5 1610(报文3(b))。FTN-T5 1610将通过忽略任何匹配的新写入来保留自己的流表项,并且复制自己的现有表项。被删除的链C1中的FTN-T4 432也可以成为伪头FTN-T4 1620。
添加新链
在向节点集群添加大量扩展端点的情况下,流表项可能会使单个链中所有FTN的系统内存过载。对于这种场景,可能会发放新的链来处理新的扩展端点。将扩展端点分配给链将由给定链中扩展端点的数量确定,其中,扩展端点数量最少的链具有优先级。
FTN故障处理
在FTN发生故障时,替换协议将从可用液滴池中发放新的替换。该替换将始终放置在链条的头部。任何新的流都可以通过被动复制传播到这个新的替换节点。同时,现有流可以通过发生在活动尾节点与新替换的头节点之间的主动复制协议复制。主动复制和被动复制可以同时发生,新表项流上的被动复制优先于旧表项流的主动复制。
新节点放置
在另一个FTN发生故障时,存在三种新FTN放置选项。替换节点可以位于链的头部、尾部或中间的某个位置。将一个全新的节点放置在链的尾部会引起性能开销,因为所有流对这个新的尾部都是新的。将替换节点放置在中间,现有节点接管尾节点的角色,避免了已知流表项上的任何即时性能开销。将替换节点放置在链的头部可以实现中间放置场景的所有好处,同时也可以考虑了连续的尾节点故障。例如,如图4所示,具有FTN T1、T2和T3的三节点链的情况。在这种场景中,假设FTN-T3发生故障,则FTN-T2很快就会发生故障。在进行中间替换的情况下,在FTN-T3发生故障后,新的FTN-T4将放置在链的中间。现在FTN-T2发生故障,FTN-T4成为新的尾部。由于FTN-T4是全新的FTN,因此会产生性能开销。在头部替换的情况下,FTN-T3和FTN-T2发生连续故障使FTN-T1接管成为新的尾部。由于FTN-T1与FTN-T3和FTN-T2具有相同的流表项表,因此不需要性能开销。
FTN故障场景
任何单个FTN都可能在三个位置发生故障。图17示出了FTN故障场景,包括头节点故障1710、中间节点故障1720和尾节点故障1730。如图所示,这些位置是头部、中间的某个位置或尾部。在尾节点1740发生故障时,先前节点1750将成为新的尾部。当中间节点1750发生故障时,故障节点1750的前一个节点1760和下一个连续节点1740将被连接。由此可见,随着头节点1760发生故障,新的替换节点1770将成为新的头部。类似地,在链中出现多个故障的情况下,每个节点都将按照上述工作流单独处理。
如果在后继链中的横向扩展/横向收缩期间发生FTN故障,则替换FTN将放置在链的原始头部。链的伪头将始终是最上面的节点。这样做是为了使被动复制协议正确地将决策从旧链传播到新链。在横向收缩/横向扩展期间,将替换节点放置在链的最顶层,这将导致由于被动复制而覆盖旧链表项。前继链中的FTN故障将由替换协议处理,而不需要代表后继链执行任何操作。由于复制是在前继链的尾部和后继链的头部之间启动的,因此任何非尾部故障都不会影响复制。在尾部故障的情况下,复制将在前继链的新分配尾部与后继链的头部之间进行。
主动复制到替换FTN
仅使用被动复制,现有流表项永远不会复制到替换节点。链尾节点已经知道的任何流表项都将简单地用重写的外部报文信息反弹回FWD节点。在替换节点成为尾节点的场景中,必须重新确定先前可能存在于故障节点中的所有流表项。在主动复制的情况下,通过使用当前驻留在尾节点中的所有未知流表项主动更新替换节点,可以避免跳开销。主动复制永远不会覆盖现有的流表项。这样做是为了保留可能通过被动复制同时发生的新流复制。图18示出了示例性实施例中的主动复制流程。具体地,图18概述了当替换节点FTN-31800被添加到包括节点FTN-1 1810和FTN-2 1820的链0时发生的主动复制的示例。
如图18所示,复制流程包括以下步骤:
步骤1:FTN-2 1820执行主动复制,并将其表的内容发送到FTN-3 1800。需要说明的是,表项(4,D,Open)1840可能先前已经由被动复制协议传播。主动复制仅写入对该FTN-31800新的表项。
步骤2:FTN-3 1800将所有未知表项写入自己的表,并将其表的内容发送到链中的下一个节点(FTN-1 1810)。
步骤3:FTN-1 1810将所有未知的表项写入自己的表,并将其表的内容发送到链的尾部(FTN-2 1820)。
步骤4:FTN-2 1820已知所有表项,主动复制完成。
为了处理主动复制期间的故障,节点必须首先检查自身和接收节点的健康状态,然后再发送任何更新。如果两个节点都健康,但更新失败,则发送节点将重试设定的次数。如果达到最大重试次数或任何节点不健康,则将激活替换协议。因此,主动复制协议将中止其当前任务,并从链的当前头部和尾部开始重新启动其进程。
运算符作用
上文已经描述了几个运算符的功能。现在将参考图19总结每个运算符的作用。图19示出了示例性实施例中的管理面架构1900,其中,运算符1910的组织在由Kubernetes控制节点(Kubectl)1920控制的Kubernetes集群内。运算符1910通过Kubernetes API服务器1930将接口和客户资源定义暴露给用户和管理员,并为运算符1910提供内部接口,以在管理面工作流期间相互通信。运算符1910还通过nomad代理/consul 1940与D-Node 210通信,该nomad代理/consul 1940包括通过插件提供功能的中间件,这些插件包括:放置运算符1942,该放置运算符1942从扩展端点运算符获取规格表并将其放置在D-Node 210上;健康检查1944;发现1946,用于从系统动态添加和删除D-Node 210;自动扩展1948。
DFT运算符1950:DFT运算符1950暴露了用于管理DFT对象生命周期的接口。这些功能包括生成Maglev哈希表、创建具有对应副本的链对象以及链的主动重新分区协议。然后,这些功能一起组织到工作流中,以完成创建、更新和删除DFT对象等任务。DFT对象的生命周期由三个工作流管理。其中每一个都是由DFT对象本身的状态更改触发的。这些工作流为创建、更新和删除。在DFT创建时,DFT对象将生成Maglev哈希表,并调用链运算符1955以创建具有多个副本的链对象。DFT更新工作流将由横向扩展或横向收缩事件触发。在这种场景中,DFT运算符1950将生成一个新的Maglev哈希表并管理链增强和重新分区。最后,DFT删除事件将触发工作流,该工作流将删除与给定DFT关联的所有链以及DFT对象本身。
链运算符1955:由链运算符1955暴露的功能管理FTN节点的创建、FTN节点在链中的放置以及主动复制协议。在链创建时,链运算符1955将调用FTN运算符创建多个FTN副本,并分配它们在链中的位置。当链的FTN准备就绪时,链运算符1955将这些变化通知给转发层410的所有FWD。链更新在主动复制或横向扩展/横向收缩时被触发。在此场景中,链运算符1955的作用是使FTN重新定位,并促进FTN之间的主动复制过程。最后,在链删除时,链的所有子FWD将被删除,并且将向转发层410的所有FWD通知被删除的链。
与FTN节点行为一起,链运算符1955的链增强有助于跨多个链对流表项进行重新分区和重新均衡,而不需要外部线程来复制流表项。在流级别进行重新均衡和分区可防止将来自嘈杂租户的所有流热点集中到一个链中。与传统方法不同,传统方法通常需要在节点之间主动复制特定租户的状态,链运算符1955的链增强减少了管理开销和嘈杂邻居对DFT的影响。
FTN运算符1960:FTN运算符1960通过nomad/consul集群227(图2)与droplet-d221交互,以执行发放FTN节点和初始化eBPF映射等动作。然后,FTN工作流将调用这些动作,以完成包括FTN节点创建、发放和删除的流程。在FTN创建时,将为FTN对象分配要放置的液滴对象、其链中的下一个节点以及它所属的链对象。此外,它还将在其分配的液滴上初始化eBPF映射340。FTN对象的更新工作流将用于更新FTN对象的eBPF映射340,并调用中间盒运算符1975以加载任何M-XDP程序320。最后,FTN删除工作流将从FTN的分配的液滴中卸载/删除所有关联的M-XDP程序320和eBPF映射340。
扩展端点运算符1965:扩展端点运算符1965暴露了用于管理扩展端点对象的接口。这些功能包括用于放置和配置中间盒、将扩展端点放置到FWD以及在FWD上对扩展端点进行纵向扩展/纵向收缩的功能。在扩展端点创建时,扩展端点运算符1965将根据指定的配置将中间盒发放到FWD和FTN的液滴上。在扩展端点更新时,将更新跨液滴的子中间盒的拓扑,以反映新配置。最后,在删除时,将删除在扩展端点配置中指定的所有中间盒及其关联的M-XDP程序320。
FWD运算符1970:FWD运算符1970负责执行在液滴上创建和删除转发层410的FWD的动作。FWD运算符1970执行发放转发层410的FWD以及在发放转发层410的FWD后对数据存储进行更新等动作。FWD工作流将调用运算符类内部的功能,以管理FWD节点的生命周期。在创建转发层410的FWD时,FWD对象将被分配一个液滴,并初始化液滴上的任何必要的eBPF映射340。FWD对象的更新工作流可用于在集群中横向收缩/扩展转发层410的FWD的数量,或将中间盒放置在其分配的液滴上。最后,FWD删除工作流将从FWD的分配的液滴中卸载/删除所有关联的M-XDP程序320和eBPF映射340。
中间盒运算符1975:中间盒运算符1975暴露了用于与中间盒对象交互的接口。这些功能包括在液滴上放置中间盒对象和在液滴上加载/卸载M-XDP程序320。在创建时,中间盒对象会将其指定的M-XDP程序320加载到其指定的液滴上。类似地,在删除时,M-XDP程序320将从中间盒的分配的液滴中卸载。
液滴运算符1980:液滴运算符1980负责管理液滴的生命周期,例如液滴的创建和删除。液滴运算符1980还负责公开接口以将任何M-XDP程序320加载到其接口上。在液滴创建时,液滴对象将分配给主机节点,并使用主机特定信息(如IP、MAC等)进行初始化。在液滴删除时,液滴对象将作为可用资源简单地从数据存储中删除。
示例性案例
现在将参考图20至图23描述上述系统的典型用例。
东/西流量
图20是一个示例性用例,示出了数据中心中的东/西流量,其中,目的地IP地址用于扩展端点,out.daddr是扩展端点的FWD IP地址中的一个。图20示出了同一虚拟网络中两个VM 10.0.0.2(2000)与10.0.0.3(2010)之间的流量示例(即,在封装的报文中共享相同的VNI)。以下列举报文序列:
1.在2020处,VM 10.0.0.2 2000通过其bouncer向VM 10.0.0.3 2010发送报文。bouncer本身就是一个扩展端点,因此主机选择其FWD中的一个(例如,FWD2030)发送报文。
2.在2040处,FWD 2030将NSH头2042添加到报文中,并将报文发送到对应于流的链中的DFT的FTN尾部2050。
3.在2060处,DFT的FTN尾部2050尾调用bouncer M-XDP 2052(如果两个VM2000和2010位于单独的网络中,则调用分隔器2054)。bouncer 2052确定作为端点主机的封装的报文的外部IP地址。
4.在2070处,由于bouncer 2052和分隔器2054的决策是静态的(相同的目的地IP地址将始终具有相同的外部IP),因此没有必要在DFT中坚持该决策,FTN尾部2050立即响应FWD 2030。
5.在2080处,FWD 2030缓存流表项,剥离NSH头2042,重写外部IP头,并将报文发送到10.0.0.3的主机VM 2010。
反向流遵循相同的程序,其余流报文直接由FWD 2030处理,而不需要将报文发送到DFT。在Mizar云计算系统中,FWD实际上与VM主机并置。以这种方式将DFT用于管理面规模有一个固有的优势。由于FWD通过一致性哈希感知DFT分区,因此将新VM引入系统只需要编程一个副本的FTN,将管理面复杂性收紧到O(1),这表明无论提供多少数据供处理,关联算法始终在恒定时间完成。
北/南流量
图21是一个示例性用例,示出了虚拟机(virtual machine,VM)2100的北/南转发流量,其中,目的地IP地址用于另一个扩展端点,in.daddr是扩展端点的IP地址,out.daddr是扩展端点的FWD IP地址中的一个。在该示例中,外部客户端72.0.0.1 2102连接到作为负载均衡器的扩展端点2104。扩展端点2104的公共IP地址为52.0.0.2。扩展端点2104将多个VM配置为扩展端点2104的后端。以下列举报文序列:
1.提供商路由器2110将客户端报文发送到扩展端点的FWD 2120中的一个。扩展端点运算符应已配置路由器2110,以通过路由器2110的ECMP路由均衡从互联网2112到FWD2120的流量。
2.在2160处,由于报文没有被封装,因此FWD 2120使用封装模块2122封装报文,并设置其vni=0,这指示封装的衬底报文。FWD 2120添加NSH头,并将报文尾调用到ACL M-XDP2124。如果ACL规则允许报文,则ACL M-XDP 2124将报文发送到流的链的尾部2130。
3.在2165处,尾FTN 2130的P-XDP尾调用动态网络地址转换器(dynamic networkaddress translator,DNAT)M-XDP 2132,该DNAT M-XDP确定扩展端点vni=0xff,并选择其后端中的一个作为in.daddr=10.0.0.3,并将vni和in.daddr添加到NSH头。
4.在2170处,DNAT M-XDP 2132然后通过负载均衡器2136尾调用bouncer M-XDP2134,这确定VM 10.0.0.3(2100)托管在out.daddr=host-ip,并将此信息添加到NSH头。
5.6.7.在2175、2180和2185处,bouncer M-XDP 2134然后将报文发送到DFT的头部2138和副本2140,直到报文返回到尾FTN 2142。包括FTN 2132-2142的DFT 2150保持正向和反向流表项。
8.9.T 2190和2195,尾FTN 2142将报文返回给FWD 2120,FWD 2120剥离NSH头,应用流表项中的更改(修改vni、out.daddr、in.daddr),并将报文发送到10.0.0.3的主机2100。
随后的流转发报文仅通过FWD 2120(即,两跳)进行处理。
图22示出了图21的示例中的北/南反向流量。来自VM主机2100的反向报文进入其bouncer FWD 2120中的一个。在这种情况下,由于DFT 2150在流的第一报文的处理期间保持了反向流进入,因此无需做出新的决策。以下列举报文序列:
1.在220处,VM主机2100通过其bouncer FWD 2120中的一个将VM流量返回给流流量。
2.在2210处,由于这是FWD 2120第一次看到该流(反向流),因此它通过对应链的尾FTN 2152查找流表项。
3.在2220处,尾FTN 2152找到反向流的流表项,更新NSH头,并将应答报文发送到FWD 2120。
4.在2230处,FWD 2120将源IP地址重写为52.0.0.2,使用解封装模块2240解封装报文,并将其发送到服务提供商路由器2110。
IPv4到IPv6的传输
图23在一个示例中示出了IPv4到IPv6的传输。在该示例中,IPv4地址为72.0.0.4的VPC1中的客户端VM 2300通过扩展端点路由到IPv6地址为0:0:0:0:0:ffff:3400:2(即IPv4中的52.0.0.2)的VPC2中的目的地VM 2310。需要说明的是,客户端VM 2300仅支持IPv4,而目的地VM 2310仅支持IPv6。以下列举报文序列:
1.在2360处,客户端VM主机2300发送源地址为72.0.0.4和目的地地址为52.0.0.2的报文。客户端VM主机2300(私用IP地址为172.0.0.8)选择液滴1中的扩展端点的FWD 2320并发送报文。
2.在2362处,FWD 2320使用封装模块2322封装报文,并设置vni=0。FWD 2320还将NSH头2364添加到报文中,并将报文尾调用到ACL M-XDP 2324中,其中,ACL 2324根据配置的访问规则过滤报文。
3.在2366处,ACL M-XDP 2324将报文发送到DFT的尾FTN节点2330。
4.在2368处,FTN节点2330尾调用Bouncer M-XDP 2332。由于目的地VM与客户端VM不在同一VPC中,因此Bouncer M-XDP 2332无法从Bounder路由表(表1)中确定封装的报文的外部IP地址。因此,Bouncer M-XDP 2332尾调用分隔器M-XDP 2334。
表1:Bouncer路由表
5.在2370处,分隔器M-XDP 2334路由表(表2)确定vni值为0x5,这是VPC2的vni编号。然后,分隔器M-XDP 2334更新NSH头,其中,vni=0x5。
表2:分隔器路由表
6.在2372处,分隔器M-XDP 2334尾调用IPTranslator M-XDP 2336。IPTranslatorM-XDP 2336包括IPv6映射(表3),并确定52.0.0.2的对应IPv6地址和端口号。IPTranslatorM-XDP 2336对同一VPC中的主机使用相同的IP地址,但端口号不同。这种方法在IPv6到IPv4的转换的情况下非常有用(表4),因为一个IPv4地址可以用于许多IPv6地址,这可以防止IPv4耗尽。
表3:IPv4:IPv6映射
表4:IPv6:IPv4映射
7.在2374处,IPTranslator M-XDP 2336尾调用端口地址转换(port addresstranslation,PAT)M-XDP 2338。PAT M-XDP 2338包括IPv6的端口地址映射(表5),并确定目的地VM的in.daddr为10.0.0.3,并且确定它托管在out.daddr=host ip上。然后,PAT M-XDP 2338更新NSH头,其中,in.daddr=10.0.0.3且out.daddr=host ip。当流量从VPC2流向VPC1(将IPv6转换为IPv4)时,相同的IPv4地址可以通过端口号映射到VPC1中的所有VM,如IPv4的端口地址映射(表6)所示。
表5:端口地址映射IPv6
表6:端口地址映射IPv4
8.9.10.在2376、2378和2380处,PAT M-XDP 2338将报文发送到DFT的头部2340和副本2342,直到报文返回到尾FTN 2344,如先前示例中提及。正向和反向流表项都写入DFT2350。
11.12.在2382和2384处,尾FTN 2344将报文转发回FWD M-XDP 2320。FWD2320删除NSH头2364并更新其缓存中的流表项(vni、out.daddr、in.daddr)。然后,FWD M-XDP 2320将报文发送到VPC2中的10.0.0.3的VM主机2310。
本文描述的系统和方法将连接状态跟踪与报文转发分开,从而使转发层独立于连接状态跟踪层扩展。通过链增强自动扩展可消除手动添加新的流跟踪节点的操作开销。此外,与使用三层架构用于固定网络功能和流跟踪器的传统系统不同,该系统可以在两层中实现,从而将建立连接的跳数降至最低,并能够扩展其功能和跟踪不同类型的状态(不仅是流跟踪决策)。
这些系统和方法还提供了具有尾节点和自我验证功能的并置中间盒决策。该方法使配置更改立即对现有流生效,而无需外部同步机制。这些系统和方法还使具有几个中间盒功能的D-Node 210的功能能够模块化扩展。这些模块是分布式和解耦的,声明式编程模型有助于这些分布式和解耦的模块之间的互通。
硬件实现
图24示出了适合于实现本文公开的方法的一个或多个实施例的通用计算机2400。上文描述的组件可以在任何通用网络组件上实现,所述网络组件例如具有足够的处理能力、内存资源和网络吞吐量能力以处理施加在其上的工作负载的计算机2400。计算机2400包括处理器2410(可称为中央处理器单元(central processor unit,CPU)),该处理器2410与包括辅助存储器2420、只读存储器(read only memory,ROM)2430、随机存取存储器(random access memory,RAM)2440的存储器设备、I/O设备2450和网络连接设备2460通信。在示例性实施例中,网络连接设备2460还将处理器2410连接到分布式网络服务系统2470,如本文所述。处理器2410可以实现为一个或多个CPU芯片,也可以是一个或多个ASIC的一部分。
辅助存储器2420通常由一个或多个磁盘驱动器和/或磁带驱动器组成,用于数据的非易失性存储,且如果RAM 2440的大小不足以保存所有工作数据,则所述辅助存储器还用作溢流数据存储设备。辅助存储器2420可以用于存储程序,当选择执行这些程序时,所述程序将加载到RAM 2440中。ROM 2430可用于存储在程序执行期间读取的指令以及可能读取的数据。ROM 2430可以是一种非易失性存储器设备,相对于辅助存储器2420的较大存储器容量,所述非易失性存储器设备通常具有较小的存储器容量。RAM 2440用于存储易失性数据,并且可能用于存储指令。对ROM 2430和RAM 2440两者的访问通常比对辅助存储器2420的访问更快。
应理解,计算机2400可以执行来自存储计算机可读指令的计算机可读非瞬时性介质和耦合到存储器的一个或多个处理器的指令,并且当执行所述计算机可读指令时,计算机2400用于执行本发明中结合图1至图23描述的方法步骤和操作。计算机可读非瞬时性介质包括所有类型的计算机可读介质,包括磁性存储介质、光存储介质、闪存介质和固态存储介质。
还应理解,可以在一个或多个服务器或数据库中安装并与一个或多个服务器或数据库一起销售包括一个或多个计算机可执行指令的软件,所述一个或多个计算机可执行指令有利于如上文结合本发明的任何一个步骤或所有步骤所描述的处理和操作。或者,可以通过符合本发明的方式获得软件并将软件加载到一个或多个服务器或一个或多个数据库中,包括通过物理介质或分发系统获得软件,包括例如从软件创建者拥有的服务器或从软件创建者未拥有但使用的服务器获得软件。例如,可以将软件存储在服务器中以通过互联网分发。
此外,本领域技术人员应理解,本发明在其应用方面不限于在说明书中阐述或附图中示出的组件的构造和布置细节。本文的实施例能够适用其它实施例,并且能够以各种方式实践或执行。此外,应理解,本文使用的措辞和术语是为了描述目的,不应视为限制性的。在本文中使用“包括”、“包含”或“具有”及其变体旨在涵盖其后列举的项目及其等效物以及其它项目。
可以至少部分地在数字电子电路、模拟电子电路中,或计算机硬件、固件、软件或其组合中实现根据所说明的实施例使用的说明性设备、系统和方法的组件。例如,这些组件还可以实现为有形地体现于信息载体中,或机器可读存储设备中的计算机程序产品(例如,计算机程序、程序代码或计算机指令),以由数据处理装置(例如,可编程处理器、计算机或多台计算机)执行,或用于控制数据处理装置的操作。
计算机程序可以用任何形式的编程语言(包括编译语言或解释语言)编写,并且可以部署成任何形式,包括作为独立程序或作为模块、组件、子例程或适合在计算环境中使用的其它单元。可以将计算机程序部署成在一台计算机中或多台计算机中在一个站点处执行,也可以分布在多个站点处并通过通信网络互连。此外,用于实现本文描述的系统和方法的功能程序、代码和代码段可以很容易本发明所属领域的程序员理解为在本发明的范围内。与说明性实施例相关联的方法步骤可以由一个或多个可编程处理器执行,从而执行计算机程序、代码或指令来执行功能(例如,对输入数据进行操作和生成输出)。方法步骤也可以由专用逻辑电路执行,并且装置可以实现为专用逻辑电路,例如现场可编程门阵列(field programmable gate array,FPGA)或ASIC。
结合本文所公开实施例描述的各种说明性逻辑块、模块和电路可以利用通用处理器、数字信号处理器(digital signal processor,DSP)、ASIC、FPGA或其它可编程逻辑设备、分立门或晶体管逻辑、分立硬件组件或其为执行本文描述的功能而设计的任何组合来实现或执行。通用处理器可以为微处理器,但是在替代方案中,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以实现为计算设备的组合,例如DSP和微处理器、多个微处理器、一个或多个微处理器结合DSP核,或任何其它类似的配置的组合。
例如,适合执行计算机程序的处理器包括通用和专用微处理器,以及任何类型的数字计算机的任何一个或多个处理器。通常,处理器将从只读存储器或随机存取存储器或两者中接收指令和数据。计算机的元件是用于执行指令的处理器和用于存储指令和数据的一个或多个存储器设备。通常,计算机还包括一个或多个用于存储数据的大容量存储设备(例如磁盘、磁光盘或光盘),或与一个或多个用于存储数据的大容量存储设备可操作地耦合以从所述大容量存储设备接收数据和/或将数据传输给所述大容量存储设备。适于体现计算机程序指令和数据的信息载体包括各种形式的非易失性存储器,例如,包括半导体存储器设备,例如电可编程只读存储器或电可编程ROM(electrically programmable read-only memory,EPROM)、电可擦除可编程ROM(electrically erasable programmable ROM,EEPROM)、闪存设备以及数据存储盘(例如,磁盘、内置硬盘、或可移动磁盘、磁光盘、光盘ROM(compact disc ROM,CD-ROM)或数字多功能光盘ROM(digital versatile disc ROM,DVD-ROM))。处理器和存储器可以由专用逻辑电路补充或并入专用逻辑电路。
本领域技术人员应当理解,可以使用多种不同的技术和技术方法中的任何一种来表示信息和信号。例如,上文描述中可以引用的数据、指令、命令、信息、信号、比特、符号和芯片可由电压、电流、电磁波、磁场或磁粒、光场或光粒、或者任何组合表示。
本领域技术人员还可以理解,结合本文公开的实施例描述的各种说明性逻辑块、模块、电路和算法步骤可以实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种互换性,各种说明性组件、块、模块、电路和步骤已经在上文中大体上根据它们的功能进行了描述。这种功能是作为硬件还是软件实现,取决于施加于整个系统的特定应用和设计限制。本领域技术人员可以以不同的方式针对每个特定应用实现所描述的功能,但这种实现决策不应被解释为导致偏离本发明的范围。软件模块可以驻留在随机存取存储器(random access memory,RAM)、闪存、ROM、EPROM、EEPROM、寄存器、硬盘、可移动磁盘、CD-ROM或本领域已知的任何其它形式的存储介质中。示例存储介质耦合到处理器,使得处理器可以从存储介质读取信息,并将信息写入存储介质。在替代方案中,存储介质可以与处理器成一个整体。换句话说,处理器和存储介质可以驻留在集成电路中,也可以实现为分立组件。
如本文所使用,“机器可读介质”是指能够暂时或永久存储指令和数据的设备,可以包括但不限于随机存取存储器(random-access memory,RAM)、只读存储器(read-onlymemory,ROM)、缓冲存储器、闪存、光学介质、磁性介质、高速缓存存储器、其它类型的存储器(例如,EEPROM)和/或其任何合适的组合。术语“机器可读介质”应理解为包括能够存储处理器指令的单个介质或多个介质(例如,集中式或分布式数据库,或关联的高速缓存存储器和服务器)。术语“机器可读介质”还应理解为包括能够存储由一个或多个处理器执行的指令的任何介质或多种介质的组合,以便所述指令在由一个或多个处理器执行时,使一个或多个处理器执行本文描述的任何一种或多种方法。相应地,“机器可读介质”是指单个存储装置或设备,以及包括多个存储装置或设备的“基于云”的存储系统或存储网络。本文使用的术语“机器可读介质”不包括信号本身。
尽管上文详细描述了几个实施例,但也可以进行其它修改。例如,在图中描述的逻辑流程不需要所示的特定顺序或连续顺序来达到期望的结果。可以向所描述的流程提供其它步骤或从所描述的流程中删除步骤,并可以向所描述的系统添加其它组件或从所描述的系统中删除组件。其它实施例可以在所附权利要求的范围内。
Claims (20)
1.一种网络服务系统,其特征在于,包括:
连接状态跟踪层,包括被组织为至少一个链的第一节点,链中的每个第一节点包括模块化中间盒,所述模块化中间盒链接到所述链中的至少一个其它模块化中间盒,以实现数据报文的网络服务功能,所述模块化中间盒包括至少一个规格表,所述至少一个规格表确定实现所述数据报文的所述网络服务功能的动作序列,所述连接状态跟踪层实现包括所述至少一个第一节点链的分布式流表(distributed flow table,DFT);
无状态转发层,包括第二节点,所述第二节点包括至少一个第二节点,所述至少一个第二节点接收所述数据报文,当流表项可用时,从所述DFT中选择所述流表项,根据所述流表项重写所述数据报文的报头,并基于所述流表项将所述数据报文发送到第一目的地;
至少一个第三节点,将以声明式编程语言描述的网络服务转换为所述至少一个规格表,并将所述至少一个规格表分发到所述DFT的所述至少一个第一节点链中的至少一个所述模块化中间盒。
2.根据权利要求1所述的网络服务系统,其特征在于,所述DFT在键/值存储器中实现。
3.根据权利要求1所述的网络服务系统,其特征在于,所述模块化中间盒包括本地数据结构中的多个快速数据路径(express data path,XDP)程序和共享数据结构配置,用于处理数据报文,以实现所述网络服务功能。
4.根据权利要求3所述的网络服务系统,其特征在于,所述至少一个链中的每个第一节点执行链复制协议,所述链复制协议复制状态和数据报文流表项,以在所述至少一个链中的所有第一节点上保持一致的流状态。
5.根据权利要求1所述的网络服务系统,其特征在于,所述至少一个第三节点提供扩展端点运算符,所述扩展端点运算符从以所述声明式编程语言编写的扩展端点配置生成所述规格表,所述扩展端点运算符还将所述网络服务功能的所述规格表传播到所述DFT的所述至少一个第一节点链的中间盒,以实现所述网络服务功能。
6.根据权利要求5所述的网络服务系统,其特征在于,还包括扩展端点,所述扩展端点跨越所述无状态转发层的多个第二节点,并根据数据报文流量需求自动扩展。
7.根据权利要求6所述的网络服务系统,其特征在于,还包括选择器,所述选择器将所述扩展端点映射到所述无状态转发层的至少一个第二节点。
8.根据权利要求7所述的网络服务系统,其特征在于,所述选择器包括路由器、软件交换机、扩展伯克利报文过滤器(extended Berkeley packet filter,eBPF)程序或Maglev哈希表中的至少一个,所述选择器为所述扩展端点选择所述无状态转发层的所述至少一个第二节点。
9.根据权利要求6所述的网络服务系统,其特征在于,所述扩展端点提供负载均衡器、网络地址转换器(network address translator,NAT)、深度报文检查器(deep packetinspector,DPI)、服务质量(quality of service,QoS)、隧道、防火墙、协议转换器IPv6/IPv4、访问控制列表(access control list,ACL)或其组合中的至少一个。
10.根据权利要求1所述的网络服务系统,其特征在于,所述连接状态跟踪层和所述无状态转发层用于彼此独立地扩展并在发生故障时互不影响。
11.根据权利要求1所述的网络服务系统,其特征在于,所述DFT包括Maglev哈希表,所述Maglev哈希表将所述DFT的每个第一节点链映射到所述DFT的至少一个其它第一节点链。
12.根据权利要求1所述的网络服务系统,其特征在于,所述DFT的每个第一节点链包括实现共址中间盒功能的尾节点,所述尾节点的中间盒实现所述至少一个规格表中描述的所述网络服务功能的报文处理功能中的全部或部分。
13.根据权利要求1所述的网络服务系统,其特征在于:
所述DFT的所述至少一个第一节点链实现了第二数据报文的网络服务功能;
所述无状态转发层的所述至少一个第二节点还接收所述第二数据报文,并且基于所述第二数据报文的第二流表项不能从所述DFT获得的确定,使用Maglev哈希算法选择所述DFT的第一节点链,并将所述第二数据报文发送到所述DFT的所述选定的第一节点链的尾节点。
14.根据权利要求13所述的网络服务系统,其特征在于:
所述无状态转发层的所述至少一个第二节点还:
从所述DFT的所述选定的第一节点链接收所述第二数据报文的新流表项;
基于所述新流表项,将所述第二数据报文发送到第二目的地。
15.根据权利要求14所述的网络服务系统,其特征在于,所述DFT的所述选定的第一节点链的所述尾节点检索扩展端点规格表,根据所述扩展端点规格表执行所述DFT的所述选定的第一节点链的所有中间盒,在所述DFT的所述选定的第一节点链的所述尾节点的快速数据路径(express data path,XDP)程序内复制所述扩展端点规格表,根据所述扩展端点规格表,从所述第二数据报文的处理中确定新数据流表项,并将所述确定的新数据流表项提供给所述无状态转发层。
16.根据权利要求1所述的网络服务系统,其特征在于,还包括一个或多个处理器,所述一个或多个处理器实现DFT运算符,所述DFT运算符过滤和预测由所述DFT收集的资源使用数据,确定待添加到所述DFT或从所述DFT删除的快速数据路径(express data path,XDP)程序的多个链,重新计算Maglev哈希表,所述Maglev哈希表包括新的链分配,以跟踪XDP程序的每个链的前继链(predecessor chain),并将所述重新计算的Maglev哈希表传播到所述DFT的所述第一节点。
17.根据权利要求1所述的网络服务系统,其特征在于,所述数据报文的所述报头包括网络服务报头,所述网络服务报头包括元数据,所述元数据传递所述无状态转发层将应用于所接收的报文的报头的DFT操作所需的变化。
18.一种实现网络服务的方法,其特征在于,包括:
将以声明式编程语言描述的网络服务转换为至少一个规格表;
将所述至少一个规格表分发到连接状态跟踪层的节点中的模块化中间盒,所述连接状态跟踪层包括组织为至少一个链的第一节点,所述模块化中间盒链接到至少一个其它模块化中间盒,以实现数据报文的网络服务功能,所述连接状态跟踪层实现包括所述至少一个第一节点链的分布式流表(distributed flow table,DFT);
根据所述至少一个规格表中指定的动作序列对所述数据报文进行处理,以实现所述数据报文的所述网络服务功能,以生成流表项;
基于所述流表项将所述数据报文发送到目的地。
19.根据权利要求18所述的方法,其特征在于,还包括,当所述流表项可用时,接收所述数据报文,从所述DFT中选择所述流表项,并根据所述流表项重写所述数据报文的报头。
20.根据权利要求18所述的方法,其特征在于,还包括,当所述流表项不能从所述DFT获取时,从所述DFT中选择用于处理所述数据报文的第一节点链,以确定新的流表项,从所述DFT中接收所述新的流表项,并基于所述新的流表项将所述数据报文发送到第二目的地。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202063037479P | 2020-06-10 | 2020-06-10 | |
US63/037,479 | 2020-06-10 | ||
PCT/US2020/053623 WO2021252004A1 (en) | 2020-06-10 | 2020-09-30 | Modular network services via distributed elastic middleboxes |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116195239A true CN116195239A (zh) | 2023-05-30 |
Family
ID=72944254
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080100959.6A Pending CN116195239A (zh) | 2020-06-10 | 2020-09-30 | 通过分布式弹性中间盒提供模块化网络服务 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116195239A (zh) |
WO (1) | WO2021252004A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115118791B (zh) * | 2022-05-20 | 2023-09-22 | 网宿科技股份有限公司 | Udp报文的分发方法、设备及可读存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3058464B1 (en) * | 2013-12-06 | 2017-11-15 | Huawei Technologies Co., Ltd. | Method and controller for chaining applications in a software defined network |
US11012411B2 (en) * | 2018-11-05 | 2021-05-18 | Xilinx, Inc. | Network interface device |
-
2020
- 2020-09-30 CN CN202080100959.6A patent/CN116195239A/zh active Pending
- 2020-09-30 WO PCT/US2020/053623 patent/WO2021252004A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2021252004A1 (en) | 2021-12-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11669488B2 (en) | Chassis controller | |
US10547544B2 (en) | Network fabric overlay | |
US10534601B1 (en) | In-service software upgrade of virtual router with reduced packet loss | |
CN107079060B (zh) | 用于运营商级nat优化的系统和方法 | |
CN107071087B (zh) | 逻辑l3路由 | |
US11336570B1 (en) | Layer three multi-homing for virtual networks | |
EP4141666A1 (en) | Dual user space-kernel space datapaths for packet processing operations | |
US11126249B1 (en) | Power reduction methods for variable sized tables | |
CN116195239A (zh) | 通过分布式弹性中间盒提供模块化网络服务 | |
JP6677052B2 (ja) | 通信管理装置、通信管理方法及びプログラム | |
Yeh et al. | SEAL2: An SDN‐enabled all‐Layer2 packet forwarding network architecture for multitenant datacenter networks | |
US11881935B2 (en) | Reducing a network device upgrade outage using a reduced hardware resource scaling | |
Karandikar | Assessment of DCNET: A New Data Center Network Architecture | |
CN116633901A (zh) | 容器网络管理方法、装置、设备以及计算机存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |