欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

無狀態(tài)集群邊緣上的有狀態(tài)服務(wù)的制作方法

文檔序號:11530852閱讀:279來源:國知局
無狀態(tài)集群邊緣上的有狀態(tài)服務(wù)的制造方法與工藝



背景技術(shù):

諸如防火墻和nat的有狀態(tài)網(wǎng)絡(luò)服務(wù)在流量流進和流出的網(wǎng)絡(luò)邊緣處是常見的。它提供基本的安全能力,諸如網(wǎng)絡(luò)安全網(wǎng)關(guān)服務(wù)和用于性能和可用性的web負(fù)載平衡。隨著網(wǎng)絡(luò)流量的增加,對邊緣服務(wù)的需求也增加,從而需要為邊緣服務(wù)分配附加的資源。



技術(shù)實現(xiàn)要素:

為了使得能夠在邊緣處動態(tài)縮放網(wǎng)絡(luò)服務(wù),一些實施例提供能夠添加新節(jié)點或去除現(xiàn)有節(jié)點,同時保持通過有狀態(tài)服務(wù)的流的緊密度(affinity)的系統(tǒng)和方法。一些實施例提供了可以動態(tài)調(diào)整大小以操縱和處理利用有狀態(tài)網(wǎng)絡(luò)服務(wù)的網(wǎng)絡(luò)流量的網(wǎng)絡(luò)節(jié)點集群。流經(jīng)邊緣的現(xiàn)有流量在集群成員資格(membership)更改期間和之后繼續(xù)工作。在一些實施例中,集群中的所有節(jié)點都以活動-活動模式操作,即,它們正在接收和處理流量流,從而最大化可用處理能力的利用率。

為了創(chuàng)建在網(wǎng)絡(luò)(或網(wǎng)絡(luò)段)邊緣處執(zhí)行有狀態(tài)服務(wù)的動態(tài)可擴展的節(jié)點集群,一些實施例將流分發(fā)到集群的不同節(jié)點,使得集群的所有節(jié)點都在主動參與有狀態(tài)服務(wù)。在一些實施例中,流通過一致性散列函數(shù)散列到集群的節(jié)點中。一致性散列函數(shù)是在集群的節(jié)點之上(或基于集群的成員資格),使得不同的流將被幾乎均勻地分發(fā)到集群的不同節(jié)點。在這些實施例中的一些實施例中,通過一致性散列函數(shù)產(chǎn)生的每個可能的散列值都被映射到集群中的節(jié)點,并且每個節(jié)點被映射到至少一個可能的散列值。因此,集群的每個節(jié)點都在主動處理至少一個流的有狀態(tài)服務(wù)。為了確保為每個流正確執(zhí)行有狀態(tài)服務(wù),在流的生命周期期間,將每個流分配給集群中的節(jié)點。分配給流的節(jié)點管理和維護與流相關(guān)的狀態(tài)信息。在一些實施例中,流的標(biāo)識符用于將屬于該流的分組引導(dǎo)到所分配的節(jié)點。

在從ecmp過程接收到分組之后,在一些實施例中,節(jié)點識別流的所有者節(jié)點,并將分組轉(zhuǎn)發(fā)到識別出的所有者節(jié)點。在一些實施例中,邊緣集群中的每個節(jié)點對分組中的流標(biāo)識符(例如,源(ip)地址、源端口、目的地(ip)地址、目的地端口、傳輸協(xié)議的五元組)執(zhí)行一致性散列,以便識別流的所有者節(jié)點。

在一些實施例中,由特定流的一致性散列識別出的所有者節(jié)點不是對流執(zhí)行有狀態(tài)服務(wù)最合適的邊緣節(jié)點。當(dāng)通過一致性散列識別出的流的所有者節(jié)點不具有正確處理流所需的必要狀態(tài)信息,而是這種狀態(tài)信息被保持在集群中的另一個節(jié)點處時,情況就是這樣。該另一個節(jié)點可以是流的前所有者節(jié)點,或者可以是需要其狀態(tài)信息來正確處理該流的相關(guān)流的所有者節(jié)點,為了提供一致性有狀態(tài)服務(wù),在一些實施例中,通過一致性散列識別出的所有者節(jié)點將分組委派給其中保持狀態(tài)信息的節(jié)點。

一些實施例允許集群中的異構(gòu)服務(wù)支持。在這些實施例中的一些實施例中,一致性散列函數(shù)是基于被調(diào)用以服務(wù)流的服務(wù)的類型。具體而言,在一些實施例中,不同的節(jié)點集合用于不同的服務(wù),即,不同的服務(wù)基于不同的節(jié)點集合具有不同的一致性散列函數(shù)。

在一些實施例中,流委派是基于駐留在邊緣集群的節(jié)點中的固定流(pinnedflow)表和間接表。間接表和固定流表中的每個條目對應(yīng)于流。每個間接表條目指示其邊緣節(jié)點根據(jù)條目轉(zhuǎn)發(fā)或委派屬于流的分組。用于流的固定流表中的每個條目指示其邊緣節(jié)點本地處理流(因此固定或錨定流)并且為流提供有狀態(tài)服務(wù),而不管節(jié)點是否是流的所有者節(jié)點。不是所有者節(jié)點將分組轉(zhuǎn)發(fā)到流的狀態(tài)信息所保持處的委派節(jié)點,而是一些實施例將狀態(tài)信息轉(zhuǎn)發(fā)給所有者節(jié)點。

在一些實施例中,所有者節(jié)點的標(biāo)識符不僅基于所使用的散列函數(shù),而且還基于集群中的邊緣節(jié)點的成員資格。換句話說,確定哪個邊緣節(jié)點是給定流的所有者節(jié)點部分地基于多少邊緣節(jié)點在能夠提供有狀態(tài)服務(wù)的邊緣集群中。因此,邊緣集群中的成員資格的任何變化將更改一致性散列的結(jié)果。邊緣集群的大小可以被改變以添加新節(jié)點或去除現(xiàn)有節(jié)點。一些實施例允許這種動態(tài)地,即,在邊緣集群正在主動處理利用有狀態(tài)網(wǎng)絡(luò)服務(wù)的網(wǎng)絡(luò)流量的同時,調(diào)整邊緣集群的大小。流經(jīng)邊緣的現(xiàn)有流量在集群的成員資格改變期間和之后繼續(xù)被處理。為了通過調(diào)整邊緣集群的大小不間斷地提供有狀態(tài)服務(wù),一些實施例在其原始所有者節(jié)點處為現(xiàn)有流錨定有狀態(tài)服務(wù),直到這些現(xiàn)有流完成。在一些實施例中,邊緣集群中的節(jié)點將屬于現(xiàn)有流的分組轉(zhuǎn)發(fā)到其原始所有者節(jié)點,其原始所有者節(jié)點仍然維持有狀態(tài)服務(wù)所需的現(xiàn)有流的狀態(tài)信息。

在一些實施例中,邊緣節(jié)點的去除在不中斷由邊緣集群提供的有狀態(tài)服務(wù)的情況下優(yōu)雅地完成。對于這些實施例中的一些實施例,現(xiàn)有流的有狀態(tài)處理在節(jié)點去除過程期間被保持在其原始所有者節(jié)點上。

在一些實施例中,當(dāng)駐留在第一節(jié)點上的第一流的狀態(tài)信息是分配給第二節(jié)點的第二流的必要狀態(tài)信息時,流的委派也是必需的。在一些實施例中,第一流和第二流是通過一致性散列分配給不同所有者節(jié)點的相關(guān)流。在一些實施例中,當(dāng)相同過程的控制流和數(shù)據(jù)流被分配給不同所有者節(jié)點時,會發(fā)生這種情況,因為它們具有不同的流標(biāo)識符。為了確保相關(guān)流在相同節(jié)點上維護的相同狀態(tài)信息集合中操作,一些實施例使用流委派來強制相關(guān)流被同一節(jié)點有狀態(tài)地進行處理,即使這兩個相關(guān)流通過一致性散列被散列到不同的所有者節(jié)點。

在一些實施例中,根據(jù)原始地址的流的所有者節(jié)點根據(jù)轉(zhuǎn)換的dnat地址將間接消息推送到流的所有者節(jié)點,以便將流的分組保持在同一節(jié)點上。結(jié)果,由轉(zhuǎn)換的dnat地址識別出的所有者節(jié)點具有用于將流的分組委派給通過原始地址識別出的所有者節(jié)點的間接表條目,其具有固定流表條目,以基于dnat地址接收和處理具有流標(biāo)識符的分組。在一些其它實施例中,不是進行流委派,而是執(zhí)行dnat的邊緣集群在不使用可以被轉(zhuǎn)換的目的地地址的情況下確定所有者節(jié)點。換句話說,集群只對不受dnat影響的字段(例如,源地址字段、源端口字段、協(xié)議字段)應(yīng)用一致性散列。

在snat的情況下,集群中的邊緣節(jié)點改變傳出南向分組的源地址。分組的snat在通過其流的所有者節(jié)點路由之后發(fā)生。在一些實施例中,邊緣集群中的每個節(jié)點在執(zhí)行地址轉(zhuǎn)換時使用其自己的唯一snat地址。返回北向流量基于源地址字段中的那些唯一snat地址被轉(zhuǎn)發(fā)到相同的所有者節(jié)點。所有者節(jié)點然后在維護有狀態(tài)snat過程的狀態(tài)的同時應(yīng)用逆nat。

前面的發(fā)明內(nèi)容旨在用作對本發(fā)明的一些實施例的簡要介紹。它并不意味著是對本文檔中公開的所有發(fā)明性主題的介紹或概述。以下的具體實施方式和在具體實施方式中提及的附圖將進一步描述在本發(fā)明內(nèi)容中描述的實施例以及其它實施例。相應(yīng)地,為了理解本文檔描述的所有實施例,需要對發(fā)明內(nèi)容、具體實施方式和附圖進行全面地審查。此外,所要求保護的主題不受發(fā)明內(nèi)容、具體實施方式和附圖中的說明性細節(jié)的限制,而是要由所附權(quán)利要求來限定,因為所要求保護的主題可以在不脫離本主題的精神的情況下以其它特定形式來體現(xiàn)。

附圖說明

本發(fā)明的新穎特征在所附權(quán)利要求中闡述。但是,為了解釋的目的,在以下圖中闡述了本發(fā)明的若干實施例。

圖1概念性地示出了網(wǎng)絡(luò)中的節(jié)點集群,其中網(wǎng)絡(luò)流量被分發(fā)到用于執(zhí)行有狀態(tài)服務(wù)的集群中的節(jié)點。

圖2a-b示出了包括用于處理和/或過濾進出網(wǎng)絡(luò)的流量的多個邊緣節(jié)點的邊緣集群。

圖3概念性地示出了基于網(wǎng)絡(luò)中的流的一致性散列將有狀態(tài)服務(wù)分發(fā)到節(jié)點集群。

圖4示出了基于一致性散列和ecmp在集群中的節(jié)點之間轉(zhuǎn)發(fā)分組。

圖5示出了網(wǎng)絡(luò)中屬于相同流的北向和南向流量的有狀態(tài)處理。

圖6a-b概念性地示出了其中基于所提供的服務(wù)流被分配給不同的節(jié)點集合的集群。

圖7概念性地示出了用于確保使用流的所有者節(jié)點一致性地執(zhí)行流的有狀態(tài)過程的過程。

圖8示出了將分組從流的所有者節(jié)點委派給邊緣集群內(nèi)的另一個節(jié)點。

圖9概念性地示出了用于確定邊緣節(jié)點是否應(yīng)該轉(zhuǎn)發(fā)接收到的分組或者對接收到的分組執(zhí)行有狀態(tài)過程的過程。

圖10示出了將狀態(tài)信息轉(zhuǎn)發(fā)到通過一致性散列識別出的所有者節(jié)點。

圖11示出了邊緣集群的成員資格的變化如何改變一致性散列將流分配給邊緣節(jié)點。

圖12a-b示出了由于向邊緣集群添加新節(jié)點而導(dǎo)致的分組的轉(zhuǎn)發(fā)。

圖13概念性地示出了在新添加的節(jié)點的學(xué)習(xí)模式期間和之后用于邊緣集群的ecmp過程。

圖14示出了網(wǎng)絡(luò)管理器和邊緣節(jié)點之間的控制消息的示例序列。

圖15概念性地示出了用于在集群調(diào)整大小期間在邊緣節(jié)點處管理這些表的過程。

圖16-17概念性地示出了用于基于固定流表、間接表和新流表在集群中的邊緣節(jié)點之間進行分組委派的過程。

圖18概念性地示出了其中現(xiàn)有流被錨定到其原始所有者節(jié)點的示例節(jié)點去除操作。

圖19示出了在用于去除節(jié)點的學(xué)習(xí)模式期間和之后的邊緣集群的操作。

圖20示出了使用流委派在同一節(jié)點處處理相關(guān)流。

圖21概念性地示出了用于建立流委派以便在邊緣節(jié)點的集群中有狀態(tài)地處理相關(guān)流的過程。

圖22a概念性地示出了由邊緣集群執(zhí)行的示例dnat服務(wù)。

圖22b示出了由邊緣集群使用流委派來提供有狀態(tài)dnat服務(wù)。

圖23a-b示出了當(dāng)執(zhí)行dnat時不使用目的地地址字段用于節(jié)點分配的邊緣集群。

圖24a-b示出了邊緣集群中的節(jié)點如何提供有狀態(tài)的snat服務(wù)。

圖25示出了具有被分組成集群或部分的主機機器的數(shù)據(jù)中心。

圖26示出了數(shù)據(jù)中心,數(shù)據(jù)中心包括主機機器的集群或部分,其主要托管用作用于其它集群中的計算vm的邊緣節(jié)點的邊緣服務(wù)vm。

圖27示出了用于不同租戶的邏輯網(wǎng)絡(luò),其中每個租戶由用作邏輯網(wǎng)絡(luò)的邊緣服務(wù)集群的一組邊緣服務(wù)vm服務(wù)。

圖28示出了正在操作虛擬化軟件的示例主機機器。

圖29示出了正在主機機器中運行的邊緣服務(wù)vm。

圖30概念性地示出了實現(xiàn)本發(fā)明的一些實施例的電子系統(tǒng)。

具體實施方式

在以下描述中,出于解釋的目的闡述了許多細節(jié)。但是,本領(lǐng)域普通技術(shù)人員將認(rèn)識到,本發(fā)明可以在不使用這些具體細節(jié)的情況下進行實踐。在其它情況下,眾所周知的結(jié)構(gòu)和設(shè)備以框圖的形式示出,以便防止用不必要的細節(jié)模糊本發(fā)明的描述。

為了使得能夠在邊緣處動態(tài)縮放網(wǎng)絡(luò)服務(wù),一些實施例提供能夠添加新節(jié)點或去除現(xiàn)有節(jié)點,同時保持通過有狀態(tài)服務(wù)的流的緊密度(affinity)的系統(tǒng)和方法。一些實施例提供可以動態(tài)調(diào)整大小以操縱和處理利用有狀態(tài)網(wǎng)絡(luò)服務(wù)的網(wǎng)絡(luò)流量的網(wǎng)絡(luò)節(jié)點集群。流經(jīng)邊緣的現(xiàn)有流量在集群成員資格更改期間和之后繼續(xù)工作。在一些實施例中,集群中的所有節(jié)點以活動-活動模式操作,即,它們正在接收和處理流量流,從而最大化可用處理能力的利用率。

為了創(chuàng)建在網(wǎng)絡(luò)(或網(wǎng)絡(luò)段)邊緣處執(zhí)行有狀態(tài)服務(wù)的動態(tài)可擴展的節(jié)點集群,一些實施例將流分發(fā)到集群的不同節(jié)點,使得集群的所有節(jié)點都在主動參與有狀態(tài)服務(wù)。在一些實施例中,流通過一致性散列函數(shù)散列到集群的節(jié)點中。一致性散列函數(shù)是在集群的節(jié)點之上(或基于集群的成員資格),使得不同的流將被幾乎均勻地分發(fā)到集群的不同節(jié)點。在這些實施例中的一些實施例中,通過一致性散列函數(shù)產(chǎn)生的每個可能的散列值都被映射到集群中的節(jié)點,并且每個節(jié)點被映射到至少一個可能的散列值。因此,集群的每個節(jié)點都在主動處理至少一個流的有狀態(tài)服務(wù)。

為了確保為每個流正確執(zhí)行有狀態(tài)服務(wù),在流的生命周期期間,將每個流分配給集群中的節(jié)點。分配給流的節(jié)點管理和維護與流相關(guān)的狀態(tài)信息。在一些實施例中,流的標(biāo)識符用于將屬于該流的分組引導(dǎo)到所分配的節(jié)點。對于一些實施例,圖1概念性地示出了網(wǎng)絡(luò)100中的節(jié)點集群110,其中網(wǎng)絡(luò)流量被分發(fā)到用于執(zhí)行有狀態(tài)服務(wù)的集群中的節(jié)點。集群中的流量分發(fā)通過使用流標(biāo)識符支持流與其分配的節(jié)點之間的緊密度或?qū)?yīng)關(guān)系。

如圖所示,網(wǎng)絡(luò)100包括服務(wù)集群110,其包括能夠向網(wǎng)絡(luò)提供服務(wù)的處理節(jié)點111-113。在一些實施例中,由集群110提供的服務(wù)包括網(wǎng)絡(luò)地址轉(zhuǎn)換(nat)和防火墻。在一些實施例中,這些服務(wù)在網(wǎng)絡(luò)的邊緣處實現(xiàn),用于處理和/或過濾進出網(wǎng)絡(luò)的流量。因此,這些服務(wù)有時被稱為邊緣服務(wù),并且集群110中執(zhí)行這些邊緣服務(wù)的節(jié)點被稱為邊緣節(jié)點。在一些實施例中,由集群110中的節(jié)點提供的服務(wù)是關(guān)于流的有狀態(tài)服務(wù)。換句話說,其任務(wù)是提供流的有狀態(tài)服務(wù)的節(jié)點需要維護和管理流的狀態(tài)。

一些實施例中的流涉及屬于傳輸層(即,層4或l4)連接或會話的分組集合。在一些實施例中,處理流的節(jié)點包括有狀態(tài)引擎,以跟蹤在傳輸層連接上發(fā)生的協(xié)議交換,以便提供有狀態(tài)服務(wù)(例如,根據(jù)一組規(guī)則做出防火墻評估)。在一些實施例中,傳輸層連接基于傳輸控制協(xié)議(tcp),并且因此l4或傳輸層連接被稱為tcp連接。

如圖所示,集群110正在接收包括分組150的網(wǎng)絡(luò)流量,分組150包括用于l2、l3和l4層的報頭。在一些實施例中,分組的l2報頭包括源和目的地mac(媒體訪問控制)地址,l3報頭包括源和目的地ip地址,并且l4報頭包括源端口、目的地端口以及傳輸協(xié)議標(biāo)識符。在一些實施例中,源ip地址、目的地ip地址、源端口、目的地端口和協(xié)議共同形成用于唯一識別流的標(biāo)識符元組(例如,五元組傳輸連接標(biāo)識符)。

如所提到的,在一些實施例中,每個流被分配給節(jié)點,使得流的狀態(tài)信息由該節(jié)點維護和管理。在一些實施例中,被分配操縱特定流的節(jié)點被稱為流的所有者節(jié)點。為了確保屬于流的分組由集群中的相同節(jié)點(即,流的所有者節(jié)點)處理,一些實施例使用分組中的流標(biāo)識符來決定服務(wù)集群中的哪個節(jié)點應(yīng)該用于處理分組。如圖所示,流“x1”、“x2”和“x3”分別基于流x1、x2和x3的流標(biāo)識符分配給111(節(jié)點a)。流“yl”、“y2”和“y3”分別基于流y1、y2和y3的流標(biāo)識符分配給112(節(jié)點b)。基于流z1、z2和z3分別基于流“z1”、“z2”和“z3”的流標(biāo)識符分配給113(節(jié)點c)。這種分配操作通過集群110中的基于流的節(jié)點分配模塊160概念上示出。在一些實施例中,這種分配操作由實現(xiàn)節(jié)點集群的計算設(shè)備或由各個節(jié)點111-113自身執(zhí)行。

節(jié)點是計算設(shè)備或在計算設(shè)備上運行的軟件,其基于網(wǎng)絡(luò)分組中的數(shù)據(jù)執(zhí)行操作。一些網(wǎng)絡(luò)節(jié)點接收和/或轉(zhuǎn)發(fā)分組。一些網(wǎng)絡(luò)節(jié)點基于數(shù)據(jù)分組中的數(shù)據(jù)執(zhí)行計算或其它應(yīng)用(例如,計算節(jié)點)。在一些實施例中,節(jié)點由獨立的物理路由器實現(xiàn)。在一些實施例中,節(jié)點是在運行管理程序以用作其主機機器的計算設(shè)備上實現(xiàn)的虛擬機。在一些實施例中,一個計算設(shè)備托管作為網(wǎng)絡(luò)中的節(jié)點的多個虛擬機。節(jié)點111-113是在網(wǎng)絡(luò)100和外部世界(例如,互聯(lián)網(wǎng)或網(wǎng)絡(luò)的其它部分)之間的分組上提供服務(wù)操作(例如,nat或防火墻)的邊緣服務(wù)節(jié)點。

節(jié)點111-113中的每一個還能夠為屬于分配給節(jié)點的流的分組提供所需的有狀態(tài)服務(wù)。對于有狀態(tài)服務(wù),在一些實施例中,節(jié)點將為其處理的每個流創(chuàng)建狀態(tài)。因此,每個流的狀態(tài)由一個節(jié)點(即,流的所有者節(jié)點)一致性地維護。如圖所示,節(jié)點111(節(jié)點a)是流x1、x2和x3的所有者節(jié)點并且維護其狀態(tài)信息用于有狀態(tài)處理。同樣,節(jié)點112(節(jié)點b)是流y1、y2和y3的所有者節(jié)點并且維護其狀態(tài),以及節(jié)點113(節(jié)點c)是流z1、z2和z3的所有者節(jié)點并且維護其狀態(tài)。在一些實施例中,相同集群的節(jié)點(例如,集群110的節(jié)點111-113)屬于相同的l2段,并且可以通過l2級協(xié)議向彼此轉(zhuǎn)發(fā)分組。

在一些實施例中,邊緣集群110由包括一組節(jié)點的容器定義。在一些實施例中,在一些實施例中,節(jié)點容器(以及因此對應(yīng)的邊緣集群)在一些實施例中由網(wǎng)絡(luò)管理器使用vm模板來定義。網(wǎng)絡(luò)管理員發(fā)送和接收到容器中的節(jié)點的事件。網(wǎng)絡(luò)管理器還管理容器中節(jié)點的生命周期。在一些實施例中,為集群面向“北”(與計算節(jié)點)的接口定義了“北”容器,以便促進用于南向流量的資源(例如,邊緣節(jié)點的地址)的配置。同樣,為集群面向“南”(與外部世界或互聯(lián)網(wǎng))的接口定義了“南”容器,以便促進用于北向流量的資源的配置。

下面描述了本發(fā)明的若干更詳細的實施例。第i部分進一步描述其中基于流的有狀態(tài)網(wǎng)絡(luò)服務(wù)在集群中的邊緣服務(wù)節(jié)點之間分布的系統(tǒng)。第ii部分描述用于動態(tài)調(diào)整邊緣服務(wù)節(jié)點集群大小的方法。第iii部分描述邊緣服務(wù)節(jié)點集群對相關(guān)流的處理。第iv部分描述當(dāng)將有狀態(tài)服務(wù)分發(fā)到邊緣節(jié)點集群時的地址轉(zhuǎn)換處理。第v部分描述被實現(xiàn)為由計算設(shè)備托管的虛擬機的邊緣服務(wù)節(jié)點。第vi部分描述用作邊緣節(jié)點vm的主機機器的示例計算設(shè)備。最后,第iv部分描述實現(xiàn)本發(fā)明的一些實施例的電子系統(tǒng)。

i.將有狀態(tài)服務(wù)分發(fā)到邊緣節(jié)點

a.ecmp

如所提到的,集群110是在網(wǎng)絡(luò)100和外部世界之間提供邊緣服務(wù)的邊緣集群。在一些實施例中,來自外部的傳入流量使用ecmp(等成本多路徑路由)分發(fā)給任何數(shù)量的邊緣節(jié)點。在一些實施例中,邊緣節(jié)點通過bgp(邊界網(wǎng)關(guān)協(xié)議)或ospf(開放最短路徑優(yōu)先)路由的通告與相鄰路由器一起參與ecmp。進入到外部世界中的傳出流量同樣可以分發(fā)給參與ecmp過程的任何邊緣節(jié)點。

圖2a-b示出了邊緣集群210,其包括用于處理和/或過濾進出網(wǎng)絡(luò)(或網(wǎng)絡(luò)段)200的流量的多個邊緣節(jié)點211-214。網(wǎng)絡(luò)(或網(wǎng)絡(luò)段)200是互聯(lián)的計算和通信資源的集合,其與外部世界290(例如,互聯(lián)網(wǎng)或其它網(wǎng)段)的通信流量被邏輯上位于與外部世界接口的網(wǎng)絡(luò)200的“邊緣”處的邊緣集群210控制、監(jiān)視或過濾。

一些實施例涉及作為南向流量從外部世界進入網(wǎng)絡(luò)的網(wǎng)絡(luò)流量和作為北向流量離開網(wǎng)絡(luò)進入到外部世界中的流量。如圖所示,網(wǎng)絡(luò)包括通過邊緣集群210接收來自外部世界290的網(wǎng)絡(luò)流量并且因此用作北向流量的終點的多個計算節(jié)點211-214。計算節(jié)點還生成通過邊緣集群210去往外部世界290的流量(或轉(zhuǎn)發(fā)流量),并且因此是南向流量的起源。

圖2a示出了通過邊緣集群210進入到計算節(jié)點221-224中從外部世界290(例如,互聯(lián)網(wǎng)或其它網(wǎng)絡(luò)段)進入到網(wǎng)絡(luò)200中的向北流量。如圖所示,北向流量由ecmp路由器240分發(fā)給邊緣集群210中的邊緣節(jié)點211-214進行有狀態(tài)處理。經(jīng)處理的北向流量然后通過l2交換或l3路由被轉(zhuǎn)發(fā)到計算節(jié)點221-224。圖2b示出了來自計算節(jié)點221-224通過邊緣集群210到外部世界290的南向流量。南向流量由ecmp路由器240(或網(wǎng)絡(luò)200中的另一個ecmp路由器)分發(fā)到邊緣集群210中的邊緣節(jié)點211-214進行有狀態(tài)處理。經(jīng)處理的南向流量然后被轉(zhuǎn)發(fā)到外部世界290(例如,互聯(lián)網(wǎng)或其它網(wǎng)段)。

b.所有者節(jié)點

在一些實施例中,流的兩個方向上的流量被分配為由同一節(jié)點操縱,以便確保有狀態(tài)網(wǎng)絡(luò)服務(wù)正確工作。一些實施例基于流標(biāo)識符將分組分配給邊緣節(jié)點。在一些實施例中,ecmp是獨立于流標(biāo)識的操作。不能保證ecmp會一致性地將相同流的分組分發(fā)到同一邊緣節(jié)點進行有狀態(tài)處理。因此,一些實施例將無狀態(tài)一致性散列函數(shù)應(yīng)用到每個分組的流標(biāo)識符,以便識別其流的所有者節(jié)點。對于每個給定的流,一致性散列為流的所有分組產(chǎn)生一致性散列值。這確保了屬于相同流的分組始終由同一節(jié)點(即,流的所有者節(jié)點)進行有狀態(tài)地處理,即使使用了ecmp來分發(fā)分組。

圖3概念性地示出了基于網(wǎng)絡(luò)300中的流的一致性散列將有狀態(tài)服務(wù)分發(fā)到節(jié)點的集群310。集群300包括節(jié)點311-314。如圖所示,網(wǎng)絡(luò)300中的分組350基于ecmp過程320被分發(fā)到節(jié)點311。但是,這些分組350所屬的流根據(jù)一致性散列函數(shù)330被分配給四個節(jié)點311-314。如圖所示,流f1被散列到節(jié)點311、流f2被散列到節(jié)點312、流f3被散列到節(jié)點313并且流f4被散列到節(jié)點314。但是,在一些實施例中,不能保證ecmp過程320將把分組路由到分組的流被散列到的節(jié)點。例如,即使一致性散列330將把流f2散列到節(jié)點312,也不能保證屬于流f2的分組被ecmp320路由到節(jié)點312。

在從ecmp過程接收到分組時,在一些實施例中,節(jié)點識別流的所有者節(jié)點,并將分組轉(zhuǎn)發(fā)到識別出的所有者節(jié)點。在一些實施例中,邊緣集群中的每個節(jié)點對分組中的流標(biāo)識符執(zhí)行一致性散列(例如,源(ip)地址、源端口、目的地(ip)地址、目的地端口、傳輸協(xié)議的五元組)以便識別流的所有者節(jié)點。圖4示出了在ecmp路由之后根據(jù)流的一致性散列來轉(zhuǎn)發(fā)分組。

圖4示出了基于一致性散列和ecmp在集群310中的節(jié)點311-314之間轉(zhuǎn)發(fā)分組。節(jié)點311-314分別是流f1、f2、f3和f4的所有者節(jié)點。ecmp將分組451-454分發(fā)到集群310的節(jié)點。在四個階段401-404中,該圖分別示出了分組451-454的轉(zhuǎn)發(fā)。

在第一階段401,ecmp過程將分組451路由到節(jié)點311(節(jié)點a)。分組451屬于流f2。節(jié)點311對分組451的流標(biāo)識符執(zhí)行一致性散列,并且確定流f2的所有者節(jié)點是節(jié)點312(節(jié)點b)。基于該確定,節(jié)點311將分組451轉(zhuǎn)發(fā)到節(jié)點312進行有狀態(tài)處理,其中流f2的狀態(tài)被保持。如圖所示,在節(jié)點312處保持的流f2的狀態(tài)變?yōu)椤皊1”。

在第二階段402,ecmp過程將分組452路由到節(jié)點312(節(jié)點b)。分組451也屬于流f2。節(jié)點312對分組452的流標(biāo)識符執(zhí)行一致性散列,并確定流f2的所有者節(jié)點是節(jié)點312本身?;谠摯_定,節(jié)點312保持分組452用于有狀態(tài)處理。如圖所示,由于分組452的有狀態(tài)處理,流f2在節(jié)點312處的狀態(tài)已被更新為“s2”。

在第三階段403,ecmp過程將分組453路由到節(jié)點313(節(jié)點c)。分組453屬于流程f4。節(jié)點313對分組453的流標(biāo)識符執(zhí)行一致性散列,并確定流f4的所有者節(jié)點是節(jié)點314(節(jié)點d)?;谠摯_定,節(jié)點313將分組453轉(zhuǎn)發(fā)到節(jié)點314進行有狀態(tài)處理,其中流f4的狀態(tài)被保持。如圖所示,保持在節(jié)點312處的流f4的狀態(tài)變?yōu)椤皊1”。另一方面,流f2的狀態(tài)在節(jié)點312處仍然保持為“s2”。

在第四階段404,ecmp過程將分組454路由到節(jié)點314(節(jié)點d)。分組454屬于流f2。節(jié)點314對分組454的流標(biāo)識符執(zhí)行一致性散列,并確定流f2的所有者節(jié)點是節(jié)點312?;谠摯_定,節(jié)點314將分組454轉(zhuǎn)發(fā)到節(jié)點432進行有狀態(tài)處理,其中f2的狀態(tài)被保持。如圖所示,流f2的狀態(tài)已變?yōu)椤皊3”。

如所提到的,在一些實施例中,邊緣集群操縱進入到網(wǎng)絡(luò)中的北向流量以及離開網(wǎng)絡(luò)的南向流量。不管流量的方向和所采用的ecmp過程如何,都使用一致性散列來一致性地識別流的所有者節(jié)點。換句話說,不管流量的方向如何,屬于同一流的分組將在同一所有者節(jié)點處被有狀態(tài)地進行處理。

圖5示出了屬于網(wǎng)絡(luò)300中的相同流的北向和南向流量的有狀態(tài)處理。圖5示出了北向分組551的轉(zhuǎn)發(fā)路徑和南向分組552的轉(zhuǎn)發(fā)路徑。分組551和552兩者都屬于流f2,其所有者節(jié)點是節(jié)點b312。

如圖所示,北向分組551由ecmp路由到節(jié)點c313。節(jié)點c又通過一致性散列將北向分組551轉(zhuǎn)發(fā)到節(jié)點b312。南向分組552由ecmp路由到節(jié)點a311。節(jié)點a311然后通過一致性散列將分組552轉(zhuǎn)發(fā)到節(jié)點b312。通過使用一致性散列,即使分組551和552是不同的方向,節(jié)點c和節(jié)點a兩者也識別流f2的同一所有者節(jié)點(節(jié)點b312)。

一些實施例允許集群中的異構(gòu)服務(wù)支持。在這些實施例中的一些實施例中,一致性散列函數(shù)是基于被調(diào)用以服務(wù)流的服務(wù)的類型。具體而言,在一些實施例中,不同的節(jié)點集合用于不同的服務(wù),即,不同的服務(wù)基于不同的節(jié)點集合具有不同的一致性散列函數(shù)。例如,一些實施例具有用于alg的第一節(jié)點集合、用于nat的第二節(jié)點集合和用于防火墻的第三節(jié)點集合。因此當(dāng)分組到達時,節(jié)點將分組的流映射到服務(wù),比如nat,并且使用(為nat供給的)輸入節(jié)點集進行一致性散列、照顧nat服務(wù)、并且根據(jù)散列結(jié)果將分組轉(zhuǎn)發(fā)到所有者節(jié)點。在一些實施例中,基于例如服務(wù)是“慢路徑”服務(wù)(例如,alg)還是“快路徑”服務(wù)(例如,防火墻),不同的服務(wù)在集群中被分配不同的節(jié)點集合。

圖6a-b概念性地示出了其中基于所提供的服務(wù)流該分配給不同的節(jié)點集合的集群600。具體而言,傳入分組的流的所有者節(jié)點由特定于所提供的服務(wù)的一致性散列來識別。如圖6a所示,使用第一一致性散列函數(shù)621將流分配到集群600中用于第一邊緣服務(wù)(例如,alg)的節(jié)點,而使用第二一致性散列函數(shù)622將流分配到集群600中用于第二邊緣服務(wù)(例如,防火墻)的節(jié)點。

集群600具有節(jié)點611-617(節(jié)點a至g)。如圖所示,第一一致性散列函數(shù)621是在節(jié)點611、612、614和615(節(jié)點a、b、c、e)上的散列函數(shù)。第二一致函數(shù)622是在節(jié)點612、613、615、616、617(節(jié)點b、c、e、f、g)上的散列函數(shù)。換句話說,使用第一邊緣服務(wù)的流只分配給節(jié)點a、b、c和e,并且使用第二邊緣服務(wù)的流只分配給節(jié)點b、c、e、f和g。因此,如圖6b所示,節(jié)點a、b、d和e正在維護使用第一邊緣服務(wù)的流的狀態(tài),而節(jié)點b、c、e、f和g正在維護使用第二邊服務(wù)的流的狀態(tài)。在一些實施例中,集群中的一些節(jié)點可以提供多種不同的邊緣服務(wù)。例如,節(jié)點612和615(b和e)向第一邊緣服務(wù)和第二邊緣服務(wù)兩者提供有狀態(tài)的邊緣服務(wù),并且因此可以通過第一一致性散列函數(shù)621或第二一致性散列函數(shù)622來選擇。在未示出的一些實施例中,集群中的每個節(jié)點只能提供一種類型的邊緣服務(wù)。

對于一些實施例,圖7概念性地示出了用于確保使用流的所有者節(jié)點一致性地執(zhí)行流的有狀態(tài)過程,而不管流的分組最初(例如,由ecmp)路由到哪里的過程700。在一些實施例中,過程700由邊緣服務(wù)集群中的邊緣節(jié)點執(zhí)行。過程700在當(dāng)它在網(wǎng)絡(luò)邊緣處接收到或者南向離開到外部世界或者北向進入到網(wǎng)絡(luò)中的分組時開始。在一些實施例中,該分組最初由ecmp分發(fā)給邊緣節(jié)點。

該過程識別(在710處)傳入分組的流。在一些實施例中,這種識別是基于分組中的流標(biāo)識符,諸如源/目的地地址、源/目的地端口和在分組的l3和l4報頭中的協(xié)議字段。

然后,該過程通過例如將流標(biāo)識符散列成一致性散列值來計算(在720處)識別出的流的一致性散列。在一些實施例中,不同的一致性散列函數(shù)用于不同的服務(wù),如以上參考圖6描述的。在這些實施例中的一些實施例中,該過程使用傳入分組的流標(biāo)識符來識別特定的邊緣服務(wù),并且然后對識別出的邊緣服務(wù)應(yīng)用對應(yīng)的一致性散列函數(shù)。

然后,該過程映射(在730處)一致性散列值,以識別流的所有者節(jié)點。接下來,該過程確定(在740處)運行過程700的邊緣節(jié)點是否是流的所有者節(jié)點。如果邊緣節(jié)點本身是流的所有者節(jié)點,則過程進行到750,以基于流來本地執(zhí)行對分組的有狀態(tài)服務(wù)。如果邊緣節(jié)點本身不是流的所有者節(jié)點,則過程進行到760,以將分組轉(zhuǎn)發(fā)到識別出的所有者節(jié)點,使得所有者節(jié)點可以基于流執(zhí)行有狀態(tài)服務(wù)。然后過程700結(jié)束。

c.委派流

在一些實施例中,由特定流的一致性散列識別出的所有者節(jié)點不是對流執(zhí)行有狀態(tài)服務(wù)最合適的邊緣節(jié)點。當(dāng)通過一致性散列識別出的流的所有者節(jié)點不具有正確處理流所需的必要狀態(tài)信息,而是這種狀態(tài)信息被保持在集群中的另一個節(jié)點處時,情況就是這樣。該另一個節(jié)點可以是流的前所有者節(jié)點,或者可以是需要其狀態(tài)信息來正確處理該流的相關(guān)流的所有者節(jié)點,為了提供一致性有狀態(tài)服務(wù),在一些實施例中,通過一致性散列識別出的所有者節(jié)點將分組委派給其中保持狀態(tài)信息的節(jié)點。

在一些實施例中,流委派是基于駐留在邊緣集群的節(jié)點中的固定流表和間接表。間接表和固定流表中的每個條目對應(yīng)于流。每個間接表條目指示其邊緣節(jié)點根據(jù)條目轉(zhuǎn)發(fā)或委派屬于流的分組。用于流的固定流表中的每個條目指示其邊緣節(jié)點本地處理流(因此固定或錨定流)并且為流提供有狀態(tài)服務(wù),而不管節(jié)點是否是流的所有者節(jié)點。

圖8示出了將分組從流的所有者節(jié)點委派給邊緣集群810內(nèi)的另一個節(jié)點。邊緣集群包括邊緣節(jié)點811-814(分別為節(jié)點a、b、c和d),每個節(jié)點可以在邊緣處為流提供有狀態(tài)服務(wù)。邊緣節(jié)點812(節(jié)點b)通過一致性散列被分配作為流“f2”的所有者節(jié)點。但是,所有者節(jié)點b812已經(jīng)將流f2委派給作為被委派節(jié)點的節(jié)點d814,使得節(jié)點d而不是節(jié)點b將處理流f2的有狀態(tài)處理。

如圖所示,流f2的委派是根據(jù)分別在所有者節(jié)點b(流f2的所有者節(jié)點)和節(jié)點d(被委派節(jié)點)中實現(xiàn)的間接表820和固定流表830完成的。節(jié)點b的間接表820具有指向節(jié)點d的用于流f2的條目821。該條目821指示節(jié)點b將屬于流f2的分組轉(zhuǎn)發(fā)到節(jié)點d。節(jié)點d的固定流表830具有指示節(jié)點d對屬于流f2的分組執(zhí)行有狀態(tài)服務(wù)的條目831,即使節(jié)點d不是f2的所有者節(jié)點。節(jié)點d(814)還具有跟蹤其正在處理的流(包括固定流f2)的狀態(tài)的本地流表840。在一些實施例(未示出)中,本地流表和固定流表被實現(xiàn)為一個表,使得邊緣節(jié)點可以使用本地流表中的條目來確定哪些流被固定到節(jié)點。

圖8還示出了邊緣集群810中的示例分組轉(zhuǎn)發(fā)和流委派操作。該示例示出了屬于流“f2”的分組851的轉(zhuǎn)發(fā)。

如圖所示,ecmp過程851將分組851轉(zhuǎn)發(fā)到節(jié)點c(813)。但是,節(jié)點c既不是流f2的所有者節(jié)點,也不是具有作為固定流的f2的節(jié)點。由于節(jié)點b是根據(jù)一致性散列的f2的所有者節(jié)點,所以分組851被轉(zhuǎn)發(fā)到節(jié)點b。但是,節(jié)點b的間接表820具有指向節(jié)點d的用于流f2的條目821,因此節(jié)點b將分組851轉(zhuǎn)發(fā)到節(jié)點d。節(jié)點d雖然根據(jù)一致性散列不是f2的所有者節(jié)點,但是仍然接受和執(zhí)行對分組851的有狀態(tài)服務(wù)。這是因為節(jié)點d的固定流表830具有用于流f2的條目831。(雖然未示出,但是如果ecmp過程直接將f2分組路由到節(jié)點d,則節(jié)點d將基于其用于f2的固定流表條目立即執(zhí)行有狀態(tài)服務(wù),而不是基于一致性散列來轉(zhuǎn)發(fā)分組。)

對于一些實施例,圖9概念性地示出了用于確定邊緣節(jié)點是否應(yīng)該轉(zhuǎn)發(fā)接收到的分組或者對接收到的分組執(zhí)行有狀態(tài)過程的過程900。當(dāng)邊緣節(jié)點接收到傳入的分組時,過程900開始。這種分組可以是進入到網(wǎng)絡(luò)中的北向流量或離開到外部世界(例如,互聯(lián)網(wǎng)、數(shù)據(jù)中心的其它部分或網(wǎng)絡(luò)的其它段)的南向流量的一部分。

該過程識別(在910處)傳入分組所屬的流。在一些實施例中,分組的流可從分組的l2-l4報頭中的地址/端口字段識別(例如,五元組)。然后,該過程確定(在915處)識別出的流是否在邊緣節(jié)點的固定流表中。固定流表中的對應(yīng)條目向邊緣節(jié)點指示該流要在本地進行有狀態(tài)地處理,而不管一致性散列。如果識別出的流是在固定流表中(即,具有對應(yīng)的條目),則該過程進行到950,以對傳入的分組執(zhí)行有狀態(tài)服務(wù)。否則,該過程進行到920。

在920處,該過程執(zhí)行一致性散列并計算用于流的散列值。然后使用計算出的散列值來確定或識別流的所有者節(jié)點。一致性散列只限于邊緣集群中的節(jié)點,因此每個流將映射到集群中的僅一個節(jié)點。

然后,該過程(在930處)確定執(zhí)行該過程的邊緣節(jié)點本身是否是識別出的流的所有者節(jié)點。如果是,則該過程進行到940。如果該邊緣節(jié)點不是識別出的流的所有者,則該過程進行到970。

在940處,該過程確定識別出的流是否在邊緣節(jié)點的間接表中。在該操作中,該過程已經(jīng)確定運行該過程的邊緣節(jié)點是通過一致性散列識別出的流的所有者節(jié)點。但是,間接表中的對應(yīng)條目將向邊緣節(jié)點指示流必須被轉(zhuǎn)發(fā)到別處進行有狀態(tài)處理。如果識別出的流在間接表中具有對應(yīng)的條目,則該過程進行到960。否則,該過程進行到950,以作為識別出的流的所有者節(jié)點對傳入分組執(zhí)行有狀態(tài)服務(wù)。

在950處,該過程對分組執(zhí)行所需的有狀態(tài)服務(wù)(例如,防火墻、nat)。在一些實施例中,該操作是基于由邊緣節(jié)點維護的狀態(tài)信息。然后,基于分組(例如,在tcp連接開始時的syn、ack分組)的內(nèi)容或類型,維護的狀態(tài)信息被相應(yīng)地更新。然后過程900結(jié)束。

在960處,該過程將分組轉(zhuǎn)發(fā)到集群中的被委派節(jié)點進行有狀態(tài)處理(即使運行該過程的邊緣節(jié)點是流的所有者節(jié)點)。在一些實施例中,被委派節(jié)點由用于識別出的流的間接表中的條目(例如,識別用于f2的節(jié)點d的間接表820中的條目821)來識別。然后過程900結(jié)束。

在970處,該過程將分組轉(zhuǎn)發(fā)到流的所有者節(jié)點。在一些實施例中,集群的節(jié)點處于相同的l2段中,使得該轉(zhuǎn)發(fā)基于l2協(xié)議。然后過程900結(jié)束。

d.傳送狀態(tài)信息

如上所述,在一些實施例中,通過一致性散列被確定為流的所有者節(jié)點的節(jié)點不具有必要的狀態(tài)信息來正確處理流。以上部分i.c描述了其中所有者節(jié)點將屬于流的分組委派給正在維護必要的狀態(tài)信息的節(jié)點(例如,先前的所有者節(jié)點)的方法。不是所有者節(jié)點將分組轉(zhuǎn)發(fā)到保持流的狀態(tài)信息的委派節(jié)點,而是一些實施例將狀態(tài)信息轉(zhuǎn)發(fā)到所有者節(jié)點。

對于一些實施例,圖10示出了將狀態(tài)信息轉(zhuǎn)發(fā)到通過一致性散列識別出的所有者節(jié)點。該圖示出了在三個階段1001-1003中在邊緣集群810中轉(zhuǎn)發(fā)狀態(tài)信息。

第一階段1001示出了在其原始所有者節(jié)點814(節(jié)點d)處維護的流f4的狀態(tài)信息。因為節(jié)點814已經(jīng)為流f4執(zhí)行有狀態(tài)服務(wù),因此它具有用于該流的狀態(tài)信息。

第二階段1002示出了通過一致性散列選擇不同的節(jié)點,即節(jié)點b(812)作為流f4的所有者節(jié)點。所有者節(jié)點分配中的這種改變可以由于邊緣集群的成員資格的變化(例如,節(jié)點添加或去除)或由于所有者節(jié)點分配覆蓋(例如,相關(guān)流)而發(fā)生。但是,用于f4的狀態(tài)信息仍然被保持在節(jié)點d處,因此節(jié)點b不能在沒有狀態(tài)信息的情況下向流f4正確提供有狀態(tài)服務(wù)。

第三階段1003示出了用于流f4的狀態(tài)信息的轉(zhuǎn)發(fā)。在一些實施例中,這種轉(zhuǎn)發(fā)是通過集群中的節(jié)點之間的控制平面消息,或者通過利用網(wǎng)絡(luò)管理器的控制消息。f4的狀態(tài)信息從節(jié)點d傳送(或復(fù)制)到節(jié)點b,因此該信息將可用于節(jié)點b為流f4提供有狀態(tài)服務(wù)。

ii.動態(tài)調(diào)整邊緣節(jié)點集群的大小

在一些實施例中,所有者節(jié)點的標(biāo)識不僅基于所使用的散列函數(shù),而且還基于集群中的邊緣節(jié)點的成員資格。換句話說,確定哪個邊緣節(jié)點是給定流的所有者節(jié)點部分地基于邊緣集群中有多少邊緣節(jié)點能夠提供有狀態(tài)服務(wù)。因此,邊緣集群中的成員資格的任何變化將更改一致性散列的結(jié)果。例如,當(dāng)邊緣集群中存在m個節(jié)點時,一致性散列將識別第一節(jié)點作為流的所有者節(jié)點,但是當(dāng)集群中存在n個節(jié)點時,將標(biāo)識不同的第二節(jié)點作為流的所有者節(jié)點。

如上所述,邊緣集群的大小可以被改變以添加新節(jié)點或去除現(xiàn)有節(jié)點。一些實施例允許這種動態(tài)地,即,在邊緣集群正在主動處理利用有狀態(tài)網(wǎng)絡(luò)服務(wù)的網(wǎng)絡(luò)流量的同時,調(diào)整邊緣集群的大小。流經(jīng)邊緣的現(xiàn)有流量在集群的成員資格改變期間和之后繼續(xù)被處理。為了通過調(diào)整邊緣集群的大小不間斷地提供有狀態(tài)服務(wù),一些實施例在其原始所有者節(jié)點處為現(xiàn)有流錨定有狀態(tài)服務(wù),直到這些現(xiàn)有流完成。在一些實施例中,邊緣集群中的節(jié)點將屬于現(xiàn)有流的分組轉(zhuǎn)發(fā)到其原始所有者節(jié)點,其原始所有者節(jié)點仍然維護有狀態(tài)服務(wù)所需的現(xiàn)有流的狀態(tài)信息。

a.添加邊緣節(jié)點

圖11示出了邊緣集群810的成員資格的變化如何改變一致性散列將流分配給邊緣節(jié)點。具體而言,該圖示出了在兩個階段1101-1102中將新的第五節(jié)點e(815)添加到圖8的集群810的效果。邊緣集群810最初具有四個節(jié)點811-814(節(jié)點a、b、c、d)。

第一階段1101示出了在添加節(jié)點e之前通過一致性散列的所有者節(jié)點的分配。如圖所示,在添加節(jié)點e之前,流的一致性散列是在節(jié)點a、b、c和d之上以便從這四個節(jié)點當(dāng)中識別所有者節(jié)點。在這種一致性散列函數(shù)下,流f1和f5被分配給節(jié)點a(811),流f2和f6被分配給節(jié)點b(812),流f3和f7被分配給節(jié)點c(813),并且流f4和f8被分配給節(jié)點d(814)。對于該示例,假定流f1-f8是由節(jié)點a、b、c和d有狀態(tài)處理的活動的、正在進行的流。

第二階段1101示出了新節(jié)點e的添加及其對一致性散列的影響。隨著添加節(jié)點e,一致性散列在節(jié)點a、b、c、d和e之上,以便從這五個節(jié)點當(dāng)中識別所有者節(jié)點。因此,流f1-f8中的一些被重新分配給不同的所有者節(jié)點。在這個示例中,除f8之外的每個流都通過一致性散列分配不同的所有者節(jié)點。節(jié)點a現(xiàn)在是f3的所有者節(jié)點,節(jié)點b現(xiàn)在是fl的所有者節(jié)點,節(jié)點c現(xiàn)在是f4和f6的所有者節(jié)點,并且節(jié)點d現(xiàn)在是f7和f8的所有者節(jié)點。新添加的節(jié)點被分配為f2和f5的所有者節(jié)點。

雖然新節(jié)點的添加已經(jīng)使現(xiàn)有流(f1-f8)被分配給新的所有者節(jié)點,但是現(xiàn)有流的狀態(tài)信息仍然被保持在其原始所有者節(jié)點處。為了對這些流正確繼續(xù)有狀態(tài)服務(wù),一些實施例使用間接表和固定流表來委派分組,因此屬于現(xiàn)有流的分組用正確的狀態(tài)信息被處理。

圖12a-b示出了由于將新節(jié)點815添加到邊緣集群810而導(dǎo)致的分組的轉(zhuǎn)發(fā)。這種添加發(fā)生在節(jié)點b(812)仍然為流f2執(zhí)行有狀態(tài)服務(wù)的同時,在添加新節(jié)點之前,節(jié)點b是流f2的原始所有者節(jié)點。該圖示出了在四個階段1201-1204中對節(jié)點添加的處理。

第一階段1201示出了在添加節(jié)點e(815)之前邊緣集群810的狀態(tài)。如圖所示,節(jié)點b812是通過一致性散列的流f2的所有者節(jié)點。它正在維護與f2相關(guān)的狀態(tài)信息,并且即使當(dāng)ecmp最初將分組路由到其它地方,屬于f2的分組也被轉(zhuǎn)發(fā)到節(jié)點b進行有狀態(tài)處理。

第二階段1202示出了在添加新節(jié)點(節(jié)點e815)之后立即由集群810處理流f2。節(jié)點815(節(jié)點e)的添加使得一致性散列將新節(jié)點815識別為流f2的所有者,而不是節(jié)點b812(f2的原始所有者節(jié)點)。但是,用于f2的狀態(tài)信息仍然被保持在節(jié)點b處。節(jié)點e815(通過一致性散列的f2的新所有者節(jié)點)因此將流f2中的分組轉(zhuǎn)發(fā)到節(jié)點b812(f2的原始所有者節(jié)點)用于有狀態(tài)服務(wù),而不是自身執(zhí)行有狀態(tài)服務(wù)。

如圖所示,節(jié)點e具有間接表1220,其具有用于f2的指向節(jié)點b的條目1221。到達節(jié)點e處屬于f2的任何分組(無論是通過ecmp還是通過一致性散列)都將根據(jù)該間接表條目被轉(zhuǎn)發(fā)/委派給節(jié)點b。此外,節(jié)點b具有固定流表1230,其具有用于流f2的條目1231。該條目指示節(jié)點b保持屬于f2的任何分組用于處理,而不是將其轉(zhuǎn)發(fā)到其它地方,即使它不再是通過一致性散列的所有者節(jié)點。

第三階段1203示出了在添加節(jié)點e期間新流f9的處理。新流(例如,f9)是在調(diào)整集群大小之后開始的流。這樣的流沒有原始所有者節(jié)點,并且它沒有正確的有狀態(tài)處理所需的現(xiàn)有狀態(tài)信息。因此,新流可以由其所有者節(jié)點在沒有委派的情況下根據(jù)一致性散列進行處理。在一些實施例中,每個節(jié)點保持新的流表(例如,1240)以跟蹤在調(diào)整集群大小期間被添加的新流。這是必要的,因為在一些實施例中,新添加的節(jié)點不被ecmp過程識別,并且不能直接從ecmp接收分組。從ecmp接收分組的節(jié)點可以參考新的流表,并且直接將分組轉(zhuǎn)發(fā)到所有者節(jié)點,即使該所有者節(jié)點是新添加的節(jié)點。在該示例中,節(jié)點c(813)從ecmp接收分組1253,并且基于節(jié)點c的新流表1240將分組直接轉(zhuǎn)發(fā)到節(jié)點e,其中新流表1240具有對應(yīng)于新流f9的條目1241。雖然節(jié)點e是集群中的新節(jié)點,但是它能夠作為f9的所有者節(jié)點立即處理流f9,因為f9是可以在不考慮現(xiàn)有狀態(tài)信息的情況下進行處理的新流。

第四階段1204示出了由節(jié)點b完成流f2。由于f2是自從添加節(jié)點e之前的現(xiàn)有流,因此其完成還使得節(jié)點e不必基于其間接表1220將f2分組委派給節(jié)點b。節(jié)點b同樣也不必在其用于f2的固定流表1230中保持條目。因此,新節(jié)點的添加被認(rèn)為是完整的。但是,新流f9將繼續(xù)由節(jié)點e處理直到其完成。但是,在一些實施例中,當(dāng)f9的所有者節(jié)點(節(jié)點e)加入ecmp并且因此不再被認(rèn)為是新節(jié)點時,集群中的新流表(例如,節(jié)點c中的新流表1240)將清除其與f9相關(guān)的條目。

在添加新節(jié)點之后,邊緣集群被認(rèn)為處于新節(jié)點的學(xué)習(xí)模式,直到新節(jié)點已加入ecmp過程并開始直接從ecmp接收分組。一旦出現(xiàn)這種情況,新的流表就不再需要,因為集群中的節(jié)點(包括新添加的節(jié)點)可以接收ecmp分組,并且可以基于集群中所有節(jié)點上的一致性散列將分組轉(zhuǎn)發(fā)到其流的合法所有者節(jié)點。固定流表和間接表可以保持操作,直到那些預(yù)先存在的流(在節(jié)點添加之前的流)完成其操作。圖13概念性地示出了在新添加的節(jié)點的學(xué)習(xí)模式期間和之后用于邊緣集群810的ecmp過程。該圖示出了在四個階段1301-1304中添加節(jié)點e。

在集群被調(diào)整大小之前(即,穩(wěn)定狀態(tài),圖中未示出),節(jié)點a正在為流f1和f5提供有狀態(tài)服務(wù),而節(jié)點b正在為流f2提供有狀態(tài)服務(wù),這是因為根據(jù)節(jié)點a、b、c和d上的一致性散列,節(jié)點a和b是f1、f5和f2的所有者節(jié)點。ecmp過程正在將分組分發(fā)到集群中的所有四個節(jié)點。

第一階段1301示出了緊接著在添加節(jié)點e之后的邊緣節(jié)點,即,集群810剛剛進入節(jié)點e的學(xué)習(xí)模式。在節(jié)點a、b、c、d和e上的新一致性散列下,流f1的新所有者是節(jié)點b,而流f2和f5的新所有者是節(jié)點e。作為在添加節(jié)點e之前開始的現(xiàn)有流,流f1、f2和f5通過固定流表和間接表被錨定到其原始所有者節(jié)點。ecmp過程同時繼續(xù)將分組分發(fā)到僅節(jié)點a、b、c和d。新節(jié)點e在學(xué)習(xí)模式期間將不會直接從ecmp過程接收分組。

第二階段1302示出由節(jié)點a完成流f5。這意味著節(jié)點a不再需要將f5作為固定流處理,并且節(jié)點e不再需要根據(jù)其間接表將f5的分組委派給節(jié)點a。

第三階段1303示出了新流f9的添加,其所有者節(jié)點是新添加的節(jié)點e。如圖所示,在該階段的ecmp過程仍然不向新添加的節(jié)點e分發(fā)分組,因此集群中的其它節(jié)點(節(jié)點a、b、c、d)將必須基于新流表中用于f9的條目將f9的ecmp分組轉(zhuǎn)發(fā)到節(jié)點e進行有狀態(tài)處理。

第四階段1304示出了在節(jié)點e的學(xué)習(xí)模式已經(jīng)完成之后新穩(wěn)定狀態(tài)下的集群810。ecmp過程現(xiàn)在包括節(jié)點e,使得傳入分組可以被分發(fā)到集群中的所有節(jié)點,包括新添加的節(jié)點e。新流f9還繼續(xù)由節(jié)點e處理,但是集群810中的新流表中的f9的條目不再需要并且因此被清除。諸如f1和f2的固定流(即,在添加節(jié)點e之前預(yù)先存在的流)繼續(xù)通過間接表和固定流表在其原始所有者節(jié)點中被有狀態(tài)地服務(wù),直到那些流完成。

在一些實施例中,將新節(jié)點添加到集群中由網(wǎng)絡(luò)管理器控制。在一些實施例中,網(wǎng)絡(luò)管理器通過與邊緣集群中的節(jié)點交換控制平面消息來控制邊緣集群的調(diào)整大小。圖14示出了用于將新節(jié)點815(節(jié)點e)添加到邊緣集群810中的、在網(wǎng)絡(luò)管理器1499與邊緣節(jié)點811-815(節(jié)點a、b、c、d和e)之間的控制消息1401-1414的示例序列。在消息交換序列之前,在集群810中只有節(jié)點811-814(節(jié)點a、b、c和d)是活動的。

管理器1499分別將消息1401-1404發(fā)送到節(jié)點811-814,向這些節(jié)點通知新節(jié)點(節(jié)點e)要被添加到集群。管理器1499還將消息1405發(fā)送到新添加的節(jié)點815(節(jié)點e)。它用于向新節(jié)點(節(jié)點e)通知哪些節(jié)點在集群中,哪個將包括節(jié)點a、b、c、d和e。

接下來,節(jié)點a向節(jié)點e發(fā)送消息1406,指示節(jié)點e將流f5中的分組轉(zhuǎn)發(fā)到節(jié)點a(例如,通過在其間接表中創(chuàng)建條目)。另一方面,節(jié)點b向節(jié)點e發(fā)送消息1407,指示節(jié)點e將流f2中的分組轉(zhuǎn)發(fā)到節(jié)點b。生成消息1406和1407是因為新節(jié)點e的添加已使得流f5和f2的所有者節(jié)點分配從節(jié)點a和b轉(zhuǎn)移到節(jié)點e,如參考以上圖11-13的示例所討論的。節(jié)點a和b然后繼續(xù)將f5和f2作為固定流處理。

當(dāng)節(jié)點a已經(jīng)完成固定流f5時,它向管理器1499發(fā)送消息1408以指示它已經(jīng)完成固定流f5。同樣,當(dāng)節(jié)點b已經(jīng)完成固定流f2時,它向管理器1499發(fā)送消息1409以指示它已經(jīng)完成固定流f2。由于流f2和f5是其所有者節(jié)點是新添加的節(jié)點(節(jié)點e)的固定流,因此管理器將理解節(jié)點e的學(xué)習(xí)模式是完整的,并且節(jié)點e可以參與ecmp。因此,管理器1499將消息1410發(fā)送到節(jié)點e,通知它開始ecmp過程。

在這個示例(即,圖11-13的示例)中,新的流f9在學(xué)習(xí)模式期間被散列到新節(jié)點(節(jié)點e),并且因此當(dāng)新流被散列到新節(jié)點時,每個現(xiàn)有節(jié)點具有用于流f9的新流表條目。在節(jié)點e的學(xué)習(xí)模式完成之后,管理器1499分別向節(jié)點811-814發(fā)送消息1411-1414,以清除其新流表中用于流f9的任何條目。

如所提到的,通過調(diào)整邊緣集群的大小,活動流的連續(xù)、不間斷的有狀態(tài)服務(wù)依賴于在被選擇作為那些流的所有者節(jié)點的節(jié)點和仍然保持那些流的狀態(tài)信息的節(jié)點之間的分組的委派。在一些實施例中,這些分組轉(zhuǎn)發(fā)操作依賴于一組表,諸如間接表、固定流表和新流表,如以上參考圖8和12所討論的。對于一些實施例,圖15概念性地示出了用于在集群調(diào)整大小期間在邊緣節(jié)點處管理這些表的過程1500。

當(dāng)過程1500檢測到(在1510處)邊緣集群中的成員資格的變化時,過程1500開始。成員資格的這種改變導(dǎo)致經(jīng)由一致性散列的流到節(jié)點分配的變化。在一些實施例中,邊緣節(jié)點知道這樣的改變,因為它已經(jīng)從網(wǎng)絡(luò)控制器接收到新節(jié)點已被添加到集群的控制平面消息(例如,消息1401-1405)。

然后,該過程識別(在1520處)在該邊緣節(jié)點中不完整(即,仍然活動)但由于一致性散列變化而被分配給其它節(jié)點的活動流。接下來,該過程將識別出的流作為條目添加(在1530處)到其固定流表。這通知邊緣節(jié)點對識別出的流的分組執(zhí)行有狀態(tài)服務(wù),即使它不再是流的所有者節(jié)點。然后,該過程向識別出的流的所有者節(jié)點發(fā)送間接消息(在1540處),使得所有者節(jié)點將知道把該流委派給這個邊緣節(jié)點。

接下來,該過程識別(在1550處)不完整(即,在其它節(jié)點中仍然活動)但是被散列到該節(jié)點的活動流。在一些實施例中,這是基于接收到的間接消息(例如,圖14的消息1406和1407),間接消息由邊緣節(jié)點生成,邊緣節(jié)點具有已經(jīng)被重新分配給該邊緣節(jié)點的不完整流。然后,該過程將這些標(biāo)識出的流作為條目添加(在1560處)到間接表。運行該過程的邊緣節(jié)點將必須根據(jù)間接表中的那些條目委派這些流的分組。

隨著固定流表和間接表被更新,該過程接下來通過參考間接表、固定流表和新流表中的條目轉(zhuǎn)發(fā)(在1570處)分組或者對分組執(zhí)行有狀態(tài)服務(wù)。在一些實施例中,當(dāng)邊緣節(jié)點遇到新開始的流時,新流表中的條目被更新。新流表的管理將在下面參考圖16進一步描述。該過程然后報告(在1580處)完成的固定流,并且在固定流表和間接表中去除(在1590處)用于那些已完成流的對應(yīng)條目。在一些實施例中,完成固定流的邊緣節(jié)點通過控制平面消息報告流完成,因此在其間接表中具有對應(yīng)條目的邊緣節(jié)點將知道去除那些條目并停止委派那些流。一些實施例包括在對應(yīng)流不活動一段時間之后自動去除間接表和固定流表中的條目的超時機制。然后過程1500結(jié)束。

圖16-17概念性地示出了用于基于固定流表、間接表和新流表在集群中的邊緣節(jié)點之間進行分組委派的過程1600和1700。圖16的過程1600在新添加的節(jié)點的學(xué)習(xí)模式期間由現(xiàn)有邊緣節(jié)點執(zhí)行,而圖17的過程1700在對應(yīng)的學(xué)習(xí)模式期間由新添加的節(jié)點執(zhí)行。

圖16的過程1600通過識別(在1610處)傳入分組的流開始。在一些實施例中,分組的流可從分組的l2-l4報頭中的地址/端口字段識別(例如,五元組)。然后,該過程確定(在1615處)識別出的流是否在邊緣節(jié)點的固定流表中。固定流表中的對應(yīng)條目向邊緣節(jié)點指示流要在本地進行有狀態(tài)地處理,而不管一致性散列。如果識別出的流在固定流表中(即,具有對應(yīng)的條目),則該過程進行到1650以對傳入分組執(zhí)行有狀態(tài)服務(wù)。否則,該過程進行到1620。

在1620處,該過程執(zhí)行一致性散列并產(chǎn)生用于流的散列值。然后使用計算出的散列值來確定或識別流的所有者節(jié)點。一致性散列包括新添加的節(jié)點,因此散列結(jié)果可以包括新添加的節(jié)點。

然后,該過程確定(在1630處)執(zhí)行該過程的邊緣節(jié)點本身是否是識別出的流的所有者節(jié)點。如果是,則該過程進行到1640。如果該邊緣節(jié)點不是識別出的流的所有者,則該過程進行到1670。

在1640處,該過程確定識別出的流是否在邊緣節(jié)點的間接表中。在這個操作中,該過程已經(jīng)確定運行該過程的邊緣節(jié)點是通過一致性散列識別出的流的所有者節(jié)點。但是,間接表中的對應(yīng)條目將向邊緣節(jié)點指示流必須被轉(zhuǎn)發(fā)到其它地方進行有狀態(tài)處理。如果識別出的流在間接表中具有對應(yīng)的條目,則該過程進行到1660。否則,該過程進行到1650,以作為識別出的流的所有者節(jié)點對傳入分組執(zhí)行有狀態(tài)服務(wù)。

在1650處,該過程對分組執(zhí)行所需的有狀態(tài)服務(wù)(例如,防火墻、nat)。在一些實施例中,這種操作是基于由邊緣節(jié)點維護的狀態(tài)信息。所維護的狀態(tài)信息然后基于分組的內(nèi)容相應(yīng)地更新。然后過程1600結(jié)束。

在1660處,該過程將分組轉(zhuǎn)發(fā)到集群中的被委派節(jié)點進行有狀態(tài)處理(即使運行該過程的邊緣節(jié)點是流的所有者節(jié)點)。在一些實施例中,被委派節(jié)點由用于識別出的流的間接表中的條目來識別。然后過程1600結(jié)束。

在1670處,該過程確定基于一致性散列的所有者節(jié)點是否是新添加的節(jié)點。如果所有者節(jié)點是新添加的節(jié)點,則處理進行到1680。否則,過程1600進行到1675以將分組轉(zhuǎn)發(fā)到流的所有者節(jié)點。

在1680處,該過程確定流是否是分配給新節(jié)點的新流。與具有存儲在其原始所有者節(jié)點中的現(xiàn)有狀態(tài)信息的現(xiàn)有流不同,新流沒有原始所有者節(jié)點或預(yù)先存在的狀態(tài)信息,并且因此可以隨便在其所有者節(jié)點處開始有狀態(tài)處理,無論是新添加的節(jié)點還是現(xiàn)有節(jié)點。在一些實施例中,該過程通過檢查其新流表中的條目來確定流是否為新流。如果分組的流是新添加的流,則該過程進行到1685。如果流不是新添加的流(即,預(yù)先存在的流),則該過程進行到1690。

在1685處,該過程更新邊緣節(jié)點處的新流表,即,如果新流表中沒有用于該流的條目,則該過程將對應(yīng)的條目添加到新流表中。然后,該過程進行到1675以將分組轉(zhuǎn)發(fā)到新流的所有者節(jié)點。

在1675處,該過程將分組轉(zhuǎn)發(fā)到流的所有者節(jié)點,所有者節(jié)點是根據(jù)包括新添加的節(jié)點的一致性散列識別出的節(jié)點。然后過程1600結(jié)束。

在1690處,該過程僅計算現(xiàn)有節(jié)點上的流的散列(即,通過排除新添加的節(jié)點)。該散列產(chǎn)生流的原始所有者節(jié)點。如果流是現(xiàn)有流并且邊緣節(jié)點在其間接表中還沒有對應(yīng)的條目,則需要此操作。因此,該過程必須基于集群中的現(xiàn)有節(jié)點(不包括新添加的節(jié)點)來計算散列值,以便確定/重構(gòu)哪個節(jié)點是流的原始所有者。然后,該過程基于該計算出的散列將分組轉(zhuǎn)發(fā)到這個原始所有者。然后過程1600結(jié)束。

圖17的過程1700通過識別(在1710處)傳入分組的流開始。在一些實施例中,分組的流可從分組的l2-l4報頭中的地址/端口字段識別(例如,五元組)。

在1720處,該過程執(zhí)行一致性散列并計算用于流的散列值。然后使用計算出的散列值來確定或識別流的所有者節(jié)點。一致性散列包括新添加的節(jié)點,因此散列結(jié)果可以包括新添加的節(jié)點。然后,該過程確定(在1730處)新添加的節(jié)點自身是否是識別出的流的所有者節(jié)點。如果是,則該過程進行到1740。如果該新添加的節(jié)點不是識別出的流的所有者,則過程1700結(jié)束,因為這是錯誤狀況。新添加的節(jié)點不應(yīng)該接收新添加的節(jié)點不是其所有者的流的任何分組。

在1740處,該過程確定流是否是分配給新節(jié)點的新流。與具有存儲在其原始所有者節(jié)點中的現(xiàn)有狀態(tài)信息的現(xiàn)有流不同,新流沒有原始所有者節(jié)點或預(yù)先存在的狀態(tài)信息,并且因此可以隨便在其所有者節(jié)點處開始有狀態(tài)處理,無論是新添加的節(jié)點還是現(xiàn)有節(jié)點。在一些實施例中,該過程通過檢查其新流表中的條目來確定流是否為新流。如果分組的流是新添加的流,則該過程進行到1745。如果流不是新添加的流(即,預(yù)先存在的流),則該過程進行到1750。

在1750處,該過程確定識別出的流是否在邊緣節(jié)點的間接表中。在這個操作中,該過程已經(jīng)確定運行該過程的新添加的節(jié)點是通過一致性散列識別出的流的所有者節(jié)點。但是,間接表中的對應(yīng)條目將向新添加的節(jié)點指示流必須被轉(zhuǎn)發(fā)到其它地方進行有狀態(tài)處理。如果識別出的流在間接表中具有對應(yīng)的條目,則該過程進行到1755。否則,過程1700結(jié)束,因為新添加的節(jié)點不應(yīng)該在間接表中沒有對應(yīng)條目的情況下接收現(xiàn)有流的分組。

在1755處,該過程將分組轉(zhuǎn)發(fā)到集群中的被委派節(jié)點進行有狀態(tài)處理(即使運行該過程的新添加的節(jié)點是流的所有者節(jié)點)。然后過程1700結(jié)束。

一些實施例允許將多個邊緣節(jié)點同時添加到集群。在這些實施例中的一些實施例中,集群立即進入多個邊緣節(jié)點的學(xué)習(xí)模式,同時固定流表和間接表同樣用于委派錨定/固定到其原始所有者節(jié)點的流的分組。一些實施例通過每次添加一個邊緣節(jié)點將多個邊緣節(jié)點添加到集群,其中使用多輪學(xué)習(xí)模式來添加多個新的邊緣節(jié)點。

b.去除邊緣節(jié)點

在一些實施例中,邊緣節(jié)點的去除在不中斷由邊緣集群提供的有狀態(tài)服務(wù)的情況下優(yōu)雅地完成。對于這些實施例中的一些實施例,以上部分ii.a中描述的用于添加新節(jié)點的方法也適用于通過去除現(xiàn)有節(jié)點來動態(tài)調(diào)整邊緣集群的大小,即,在節(jié)點去除過程期間在其原始所有者節(jié)點上保持現(xiàn)有流的有狀態(tài)處理。如所提到的,邊緣集群中的成員資格的變化導(dǎo)致通過一致性散列的流到節(jié)點的分配的變化。因此,節(jié)點的去除導(dǎo)致現(xiàn)有流改變所有者節(jié)點,就像節(jié)點的添加一樣。因此,一些實施例也在節(jié)點去除過程期間在其原始所有者節(jié)點處錨定現(xiàn)有流。

圖18概念性地示出了其中現(xiàn)有流被錨定到其原始所有者節(jié)點的示例節(jié)點去除操作。如圖所示,邊緣集群810最初具有節(jié)點811-814(節(jié)點a、b、c和d),并且流的所有者節(jié)點的分配基于所有這四個節(jié)點的一致性散列。該圖示出了用于在兩個階段1801和1802從集群810中去除節(jié)點c(813)的過程。

第一階段1801示出了在去除節(jié)點c之前通過一致性散列的所有者節(jié)點的分配。如圖所示,在去除節(jié)點c之前,流的一致性散列是在節(jié)點a、b、c和d之上以便從這四個節(jié)點當(dāng)中識別所有者節(jié)點。在這種一致性散列函數(shù)下,流f1和f5被分配給節(jié)點a(811),流f2和f6被分配給節(jié)點b(812),流f3和f7被分配給節(jié)點c(813),并且流f4和f8被分配給節(jié)點d(814)。對于該示例,假定流f1-f8是在階段1801期間由節(jié)點a、b、c和d有狀態(tài)處理的活動的、正在進行的流。

第二階段1802示出了新節(jié)點c的去除以及該去除對通過一致性散列的所有者節(jié)點分配的影響。隨著去除節(jié)點c,一致性散列僅在節(jié)點a、b和d之上,以便從這三個節(jié)點當(dāng)中識別所有者節(jié)點。因此,流f1-f8中的一些或全部被重新分配給不同的所有者節(jié)點。在這個示例中,除f5和f6之外的所有流都通過一致性散列分配給不同的所有者節(jié)點。節(jié)點a現(xiàn)在是f3、f5和f8的所有者節(jié)點。節(jié)點b現(xiàn)在是f1、f4和f6的所有者節(jié)點。節(jié)點d現(xiàn)在是f2和f7的所有者節(jié)點。去除的節(jié)點(節(jié)點c)不是任何流的所有者節(jié)點。

由于流f1-f8是正在由邊緣集群處理的活動的、正在進行的流,因此這些節(jié)點必須被錨定到其原始所有者節(jié)點,以便用正確的狀態(tài)信息對流進行有狀態(tài)地處理。因此,流f1被固定到節(jié)點a,流f2被固定到節(jié)點b,流f3和f7被固定到節(jié)點c,并且流f4和f8被固定到節(jié)點d。被固定或錨定到其原始所有者節(jié)點的流將在那里進行有狀態(tài)地處理,直到那些流完成。這也適用于去除節(jié)點c,其中出于處理固定到節(jié)點c的流(f3和f7)的目的,節(jié)點c仍將保持活動狀態(tài),即使節(jié)點c不能再是任何流的所有者節(jié)點。

另一方面,現(xiàn)有流的新所有者節(jié)點使用其間接表中的條目將這些流委派給其原始所有者。以上的部分ii.a描述了通過間接表和固定流表來委派流。在這個示例中,節(jié)點a分別將流f3和f8委派給節(jié)點c和d(f5在節(jié)點a處被本地處理),節(jié)點b分別將流f1和f4委派給節(jié)點a和d(f6在節(jié)點b處被本地處理),并且節(jié)點d分別將f2和f7委派給節(jié)點b和c。

如所提到的,去除節(jié)點在其完成先前分配給它的流的處理之前不會離線。這確保了在不中斷由邊緣集群810提供的有狀態(tài)服務(wù)的情況下優(yōu)雅地去除或關(guān)閉節(jié)點。在一些實施例中,邊緣集群被認(rèn)為處于用于去除集群中的邊緣節(jié)點的學(xué)習(xí)模式。在一些實施例中,用于去除邊緣節(jié)點的學(xué)習(xí)模式在去除節(jié)點完成其所有固定流并可安全離線(因此將不會中斷有狀態(tài)過程)之前不會結(jié)束。

在一些實施例中,一旦節(jié)點被標(biāo)記為去除,它就停止參與ecmp。圖19示出了在用于去除節(jié)點813的學(xué)習(xí)模式(即,學(xué)習(xí)節(jié)點c要被去除)期間和之后的邊緣集群810的操作。去除節(jié)點813一旦被標(biāo)記為去除,它就停止參與ecmp,但是在所有固定到去除節(jié)點的流完成之前,該節(jié)點不會離線。該圖示出了在四個階段1901-1904中的節(jié)點去除過程。

第一階段1901示出了在去除節(jié)點c(813)之前的邊緣集群810。如圖所示,邊緣集群810具有正在參與ecmp過程并提供有狀態(tài)服務(wù)的四個節(jié)點811-814(節(jié)點a、b、c和d)。如圖所示,節(jié)點813是通過一致性散列的f3和f7的所有者節(jié)點,并且正在維護這些流的狀態(tài)信息。

第二階段1902示出了緊接著節(jié)點c(813)被標(biāo)記為去除之后的邊緣集群810。一旦節(jié)點c被標(biāo)記為去除,ecmp過程就停止向其分發(fā)分組。此外,一致性散列不再將節(jié)點c包括在其散列函數(shù)中,并且節(jié)點a(811)變?yōu)榱鱢3的新所有者節(jié)點,并且節(jié)點d變?yōu)閒7的新所有者節(jié)點。但是,f3和f7也被固定或錨定到節(jié)點c(813),因為它們被節(jié)點c主動地處理,并且它們的狀態(tài)信息被節(jié)點c保持。節(jié)點a在其間接表(圖中未示出)中具有用于將流f3的分組委派給節(jié)點c的條目,并且節(jié)點d在其間接表(圖中未示出)中具有用于將流f7的分組委派給節(jié)點c的條目。

第三階段803示出了固定流(即,f3和f7)的完成。當(dāng)這些流完成時,去除節(jié)點c(813)可以離線。最后的階段804示出了處于新穩(wěn)定狀態(tài)的集群810,其中節(jié)點c在不中斷任何有狀態(tài)服務(wù)的情況下被優(yōu)雅地去除。

iii.相關(guān)流

當(dāng)必要狀態(tài)信息不在通過一致性散列的流的所有者節(jié)點中時,流的委派(或狀態(tài)信息的傳送)是必需的。如以上部分ii中所描述的,當(dāng)邊緣集群中存在改變所有者節(jié)點分配的成員資格變化(例如,節(jié)點的添加或去除)時,是這樣。在一些實施例中,當(dāng)駐留在第一節(jié)點上的第一流的狀態(tài)信息是分配給第二節(jié)點的第二流的必要狀態(tài)信息時,也需要流的委派。在一些實施例中,第一流和第二流是通過一致性散列分配給不同所有者節(jié)點的相關(guān)流。在一些實施例中,當(dāng)相同過程的控制流和數(shù)據(jù)流由于它們具有不同的流標(biāo)識符而被分配給不同的所有者節(jié)點時,會發(fā)生這種情況。為了確保相關(guān)流在相同節(jié)點上維護的相同的一組狀態(tài)信息上操作,一些實施例使用流委派來強制相關(guān)流被相同節(jié)點(有狀態(tài)地)處理,即使這兩個相關(guān)流通過一致性散列被散列到不同的所有者節(jié)點。

存在需要alg支持以通過防火墻和nat功能工作的、諸如ftp、sip或rtsp的協(xié)議。這些協(xié)議使用多個流,并且相同的節(jié)點通常應(yīng)該處理相關(guān)流,因為它們經(jīng)常共享狀態(tài)。因此,節(jié)點的數(shù)據(jù)平面需要查看應(yīng)用協(xié)議來確定相關(guān)流。在集群服務(wù)中,在協(xié)議中使用的相關(guān)流必須由同一節(jié)點一致性地和高效地操縱。對于ftp(文件傳輸協(xié)議),在一些實施例中,首先建立控制流程。關(guān)于數(shù)據(jù)流的信息經(jīng)由控制流傳送。因此,必須監(jiān)視控制流以了解數(shù)據(jù)流信息(即,控制流上的port或pasv命令)。

圖20示出了使用流委派來在同一節(jié)點處處理相關(guān)流。如圖所示,集群810的節(jié)點813(節(jié)點c)和節(jié)點814(節(jié)點d)分別通過一致性散列被分配流f15和f16。流f15和f16是相關(guān)流(例如,相同傳輸層交換的控制流和數(shù)據(jù)流)。該圖示出了在兩個階段2001和2002中的集群810中的相關(guān)流委派。

第一階段2001示出了通過一致性散列的f15和f16的原始分配。作為f15的所有者節(jié)點的節(jié)點c將具有流f15的狀態(tài)信息,而作為f16的所有者節(jié)點的節(jié)點d將具有流f16的狀態(tài)信息。但是,f15和f16是相關(guān)流。在一些實施例中,相關(guān)流是共享同一組狀態(tài)信息的流。在一些實施例中,相關(guān)流是必須被依次處理的流。例如,f16的有狀態(tài)服務(wù)需要流f15的最終狀態(tài)信息,并且f16是在f15之后的流,使得流f16的分組僅在流f15完成之后才出現(xiàn)。

第二階段2002示出了用于處理相關(guān)流的分組的委派流。如圖所示,流f15仍然由其所有者節(jié)點(節(jié)點c)處理,但是流f16的分組由節(jié)點d(f16的所有者節(jié)點)委派給節(jié)點c。節(jié)點d基于間接表2040的條目2041將f16的分組轉(zhuǎn)發(fā)到節(jié)點c,該條目對應(yīng)于指向節(jié)點c的流f16。節(jié)點c基于固定流表2030的條目2031接受流f16的委派分組。換句話說,即使節(jié)點d是f16的所有者節(jié)點,流f16也已成為節(jié)點d處的間接/委派流。即使節(jié)點c永遠都不是f16的所有者節(jié)點,流f16也已成為固定/錨定到節(jié)點c的流。因此,流f15和f16兩者都由同一節(jié)點(節(jié)點c)有狀態(tài)地處理。

對于一些實施例,圖21概念性地示出了用于建立流委派以便在邊緣節(jié)點的集群中有狀態(tài)地處理相關(guān)流的過程2100。在一些實施例中,該過程由邊緣集群中的節(jié)點執(zhí)行。該過程通過確定(在2110處)這個邊緣節(jié)點(運行過程2100的邊緣節(jié)點)上當(dāng)前活動的流是否具有相關(guān)流開始。例如,ftp的控制流具有相關(guān)的數(shù)據(jù)流,因此處理ftp的控制流的邊緣節(jié)點將知道有即將到來的相關(guān)數(shù)據(jù)流。如果在該邊緣節(jié)點上主動運行的流都沒有相關(guān)流,則過程2100結(jié)束。如果在該邊緣節(jié)點中運行的流中至少一個流具有相關(guān)流,則該過程識別(在2120處)相關(guān)流和相關(guān)流的所有者節(jié)點。在一些實施例中,邊緣節(jié)點基于由網(wǎng)絡(luò)管理器或其它邊緣節(jié)點經(jīng)由控制平面消息提供的信息來識別相關(guān)流。

接下來,該過程在自己的固定表中為相關(guān)流創(chuàng)建(在2130處)條目,并且向相關(guān)流的所有者節(jié)點發(fā)送(在2140處)消息,以在其間接表中創(chuàng)建條目。在圖20的示例中,節(jié)點c是正在處理流f15的邊緣節(jié)點,流f15具有其所有者節(jié)點是節(jié)點d的相關(guān)流f16。因此,節(jié)點c在其固定流表(2030)中為流f16創(chuàng)建了固定流入口(2031)。節(jié)點c還向節(jié)點d發(fā)送消息,因此節(jié)點d將在其間接表(2040)中為流f16創(chuàng)建間接條目(2041)。

在發(fā)送消息以建立間接條目之后,過程2100結(jié)束,并且集群中的邊緣節(jié)點基于間接表和固定流表繼續(xù)處理相關(guān)流的傳入分組。

iv.地址轉(zhuǎn)換

在一些實施例中,由邊緣集群提供的有狀態(tài)服務(wù)包括網(wǎng)絡(luò)地址轉(zhuǎn)換(nat)。nat是當(dāng)互聯(lián)網(wǎng)協(xié)議(ip)數(shù)據(jù)報分組報頭跨流量路由設(shè)備傳輸時,為了將一個ip地址空間重新映射到另一個ip地址空間而修改它們中的網(wǎng)絡(luò)地址信息的方法。在dnat的情況下,目的地地址(例如,經(jīng)常是vip地址/端口)被替換為南向地址和端口。這創(chuàng)建與dnat服務(wù)相關(guān)聯(lián)的兩個流:一個使用原始目的地地址,并且一個使用轉(zhuǎn)換地址。這兩個流實際上是相同的流,但是它們?nèi)匀痪哂胁煌牧鳂?biāo)識符,并且將被散列到不同的邊緣節(jié)點。換句話說,每個流具有兩個所有者節(jié)點,一個通過流的原始目的地地址識別,另一個通過流的轉(zhuǎn)換地址識別。

在一些實施例中,根據(jù)原始地址的流的所有者節(jié)點根據(jù)轉(zhuǎn)換的dnat地址將間接消息推送到流的所有者節(jié)點,以便將流的分組保持在同一節(jié)點上。結(jié)果,由轉(zhuǎn)換的dnat地址識別出的所有者節(jié)點具有用于將流的分組委派給通過原始地址識別出的所有者節(jié)點的間接表條目,其具有基于dnat地址接受并處理具有流標(biāo)識符的分組的固定流表條目。(相反,在一些其它實施例中,由dnat地址識別出的所有者節(jié)點將間接消息推送到由原始地址識別出的所有者節(jié)點,因此由原始地址識別出的所有者節(jié)點將流的分組委派給由dnat地址識別出的所有者節(jié)點)。換句話說,在一些實施例中,如由其原始地址識別出的流和如由其dnat地址識別出的流作為相關(guān)流被邊緣集群處理。

圖22a概念性地示出了由邊緣集群810執(zhí)行的示例dnat服務(wù)。該圖示出了具有不同流標(biāo)識符的四個示例流f1-f4。由邊緣集群810執(zhí)行的dnat將南向流的目的地地址從其原始地址轉(zhuǎn)換為dnat地址。例如,邊緣集群810將南向f1的目的地地址從“2.2.10.10”轉(zhuǎn)換為“1.2.3.4”,并且將南向f2的目的地地址從“3.2.10.11”轉(zhuǎn)換為“5.6.7.8”,等等。

dnat還對北向流量執(zhí)行逆dnat服務(wù)。逆dnat服務(wù)將北向流的dnat地址轉(zhuǎn)換回其原始地址。例如,邊緣集群810將北向f1的目的地地址從“1.2.3.4”轉(zhuǎn)換為“2.2.10.10”,將北向f2的目的地地址從“5.6.7.8”轉(zhuǎn)換為“3.2.10.11”,等等。雖然北向流和南向流是相同的流,但是它們具有不同的流標(biāo)識符,并且將通過一致性散列被散列到集群810內(nèi)的不同邊緣節(jié)點。

圖22b示出了當(dāng)邊緣集群810中的節(jié)點正在執(zhí)行dnat服務(wù)時邊緣集群810如何分配所有者節(jié)點。如圖所示,對于其中流標(biāo)識符是基于原始地址的南向流量,流f1-f4被分別散列到節(jié)點a、b、c和d(節(jié)點811-814)。但是,對于其中流標(biāo)識符是基于轉(zhuǎn)換的dnat地址(即,dnat(f1)、dnat(f2)、dnat(f3)和dnat(f4))的北向流量,流f1被散列到節(jié)點d,流f2被散列到節(jié)點b,流f3被散列到節(jié)點a,并且流f4被散列到節(jié)點c。在該圖中,“散列(f1)”表示基于具有原始目的地地址的流標(biāo)識符對f1進行散列,而“散列(dnat(f1))”表示基于具有轉(zhuǎn)換的目的地地址的流標(biāo)識符對f1進行散列。

圖22b還示出了由邊緣集群810使用流委派來提供有狀態(tài)dnat服務(wù)。如圖所示,節(jié)點a向節(jié)點d發(fā)送用于dnat(f1)的間接消息,通知節(jié)點d基于dnat(f1)將具有流標(biāo)識符的分組委派給節(jié)點a。節(jié)點c向節(jié)點a發(fā)送用于dnat(f3)的間接消息,通知節(jié)點a基于dnat(f3)將具有流標(biāo)識符的分組委派給節(jié)點c。節(jié)點d向節(jié)點c發(fā)送用于dnat(f4)的間接消息,通知節(jié)點c基于dnat(f4)將具有流標(biāo)識符的分組委派給節(jié)點d。f2和dnat(f2)兩者都被散列到節(jié)點b,因此節(jié)點b不向外發(fā)送間接消息。

因此,節(jié)點a接收具有dnat(f1)的委派分組,因此節(jié)點a可以有狀態(tài)地處理流f1的所有分組,既包括北向分組又包括南向分組。同樣,節(jié)點c接收具有dnat(f3)的委派分組以有狀態(tài)地處理流f3的所有分組,并且節(jié)點d接收具有dnat(f4)的委派分組以有狀態(tài)地處理流f4的所有分組。(在這個示例中,節(jié)點b已經(jīng)接收到f2和dnat(f2)兩者的分組)。

在一些其它實施例中,代替流委派,執(zhí)行dnat的邊緣集群在不使用可以被轉(zhuǎn)換的目的地地址的情況下確定所有者節(jié)點。換句話說,集群僅對不受dnat影響的字段(例如,源地址字段、源端口字段、協(xié)議字段)應(yīng)用一致性散列。圖23a-b示出了當(dāng)執(zhí)行dnat時不使用目的地地址字段用于節(jié)點分配的邊緣集群。

圖23a示出了其中目的地地址是從其原始地址dnat到該轉(zhuǎn)換地址的南向流量。南向分組2311是流f1的分組,分組2312是流f2的分組,分組2313是流f3的分組,分組2314是流f4的分組。分組2311-2314分別被散列到邊緣集群810的節(jié)點811-814。散列僅基于分組的源地址和源端口。當(dāng)應(yīng)用一致性散列來確定流的所有者節(jié)點時,不使用那些分組的目的地地址。邊緣集群810中的節(jié)點對那些分組執(zhí)行dnat服務(wù)以產(chǎn)生分組2321-2324。這些分組具有相同的原始源地址,但是其目的地地址是從dnat轉(zhuǎn)換的地址。

圖23b示出了其中目的地地址從其轉(zhuǎn)換的地址返回到其原始地址的北向流量。北向分組2331-2334分別是流f1-f4的分組。這些北向分組的目的地地址是由dnat轉(zhuǎn)換的地址,但是其源地址和端口是不受dnat影響的原始地址。分組2331-2334基于那些未受影響的源端口和地址被散列到節(jié)點a、b、c和d。因此,流f1-f4的分組仍然分別被節(jié)點a、b、c和d處理,并且該dnat對所有者節(jié)點分配沒有影響。因此,無論目的地地址字段是轉(zhuǎn)換的還是原始的,每個流都被相同的節(jié)點有狀態(tài)地處理。

在snat的情況下,集群中的邊緣節(jié)點改變傳出南向分組的源地址。分組的snat在通過其流的所有者節(jié)點路由之后發(fā)生。在一些實施例中,邊緣集群中的每個節(jié)點在執(zhí)行地址轉(zhuǎn)換時使用其自己的唯一snat地址?;谠吹刂纷侄沃械哪切┪ㄒ籹nat地址,返回的北向流量被轉(zhuǎn)發(fā)到相同的所有者節(jié)點。所有者節(jié)點然后在維護有狀態(tài)snat過程的狀態(tài)的同時應(yīng)用逆nat。如果有防火墻服務(wù),則在snat反向映射之后,流狀態(tài)通過元組識別。

圖24a-b示出了邊緣集群中的節(jié)點如何為一些實施例提供有狀態(tài)snat服務(wù)。如圖所示,集群810的邊緣節(jié)點811-814(節(jié)點a、b、c和d)正在提供snat服務(wù),其中當(dāng)執(zhí)行snat時,每個節(jié)點具有其自己的唯一源地址。具體而言,節(jié)點a的snat地址是“1.1.1.1”,節(jié)點b的snat地址是“2.2.2.2”,節(jié)點c的snat地址是“3.3.3.3”,并且節(jié)點d的snat地址是“4.4.4.4”。

圖24a示出了分別屬于流f1、f2、f3和f4的南向流量分組2411-2414。流f1-f4的分組根據(jù)分組的流標(biāo)識符的一致性散列被散列到節(jié)點a、b、c和d中。節(jié)點a依次對屬于fl的分組執(zhí)行snat,并將源地址轉(zhuǎn)換為其自己的snat地址“1.1.1.1”。類似地,節(jié)點b對f2分組執(zhí)行snat,并將源地址轉(zhuǎn)換為其自己的“2.2.2.2”,節(jié)點c對f3分組執(zhí)行snat,并將源地址轉(zhuǎn)換為其自己的“3.3.3.3”,并且節(jié)點d對f4分組執(zhí)行snat,并將源地址轉(zhuǎn)換為其自己的“4.4.4.4”。

圖24b示出了將北向流量返回到集群2410。如圖所示,北向流量中的每個分組基于源地址字段中的唯一snat地址找到其返回執(zhí)行snat的邊緣節(jié)點的路徑。具體而言,f1的北向分組2431基于源地址“1.1.1.1”到達節(jié)點a,f2的北向分組2432基于源地址“2.2.2.2”到達節(jié)點b,f3的北向分組2433基于源地址“3.3.3.3”到達節(jié)點c,并且f4的北向分組2434基于源地址“4.4.4.4”到達節(jié)點d。每個節(jié)點又通過識別分組的流并將節(jié)點的唯一snat地址轉(zhuǎn)換回流的原始源地址對北向分組執(zhí)行逆snat。因此,流f1-f4的分組始終分別由節(jié)點a、b、c和d處理,并且snat對所有者節(jié)點分配沒有影響。無論源地址字段是轉(zhuǎn)換的還是原始的,每個流都被相同的節(jié)點有狀態(tài)地處理。

v.作為邊緣節(jié)點的虛擬機

如所提到的,在一些實施例中,邊緣集群中的邊緣節(jié)點中的一些或全部被實現(xiàn)為由運行虛擬化軟件或管理程序的計算設(shè)備托管的虛擬機。在一些實施例中,這些計算設(shè)備(或主機機器)位于容納許多這樣的主機機器的數(shù)據(jù)中心中。圖25示出了具有被分組成集群或部分(集群2510、2520、2530和2540)的主機機器的數(shù)據(jù)中心2500。每個集群包括正在托管虛擬機的一個或多個主機機器。虛擬機中的一些是為數(shù)據(jù)中心的客戶端或租戶執(zhí)行計算任務(wù)的計算vm。虛擬機中的一些是提供諸如nat或防火墻的邊緣服務(wù)的邊緣vm。虛擬機中的一些是向數(shù)據(jù)中心中的其它vm/主機機器提供控制的管理vm。一些主機機器托管不同類型的vm。例如,主機機器2511托管計算vm和管理vm,以及主機機器2512托管計算vm和邊緣vm。

在一些實施例中,每個vm的集群或部分具有用作其邊緣集群的其自己的邊緣服務(wù)vm集合,邊緣集群以以上部分i-iv中描述的方式提供有狀態(tài)服務(wù)。

在一些實施例中,數(shù)據(jù)中心具有專門的集群或部分,諸如計算集群或管理集群。在一些實施例中,數(shù)據(jù)中心包括主機機器的集群或部分,其主要托管用作用于其它集群中的計算vm的邊緣節(jié)點的邊緣服務(wù)vm。圖26示出了包括邊緣集群2610、若干計算集群2651-2652和管理集群2680的數(shù)據(jù)中心2600。邊緣集群2610托管用作用于計算集群2651-2652中的vm的邊緣節(jié)點的vm。管理集群2680中的vm執(zhí)行控制和管理功能。

不管vm的物理拓?fù)浜蛯嶋H物理放置如何,在一些實施例中,計算vm在邏輯上被組織成用于不同租戶的不同邏輯網(wǎng)絡(luò),并且邊緣服務(wù)vm在邏輯上被組織成用于不同邏輯網(wǎng)絡(luò)的邊緣服務(wù)集群。圖27示出了用于不同租戶的邏輯網(wǎng)絡(luò),其中每個租戶由用作邏輯網(wǎng)絡(luò)的邊緣服務(wù)集群的一組邊緣服務(wù)vm服務(wù)。該圖分別示出了用于租戶1、2和3的邏輯網(wǎng)絡(luò)2701-2703。邏輯網(wǎng)絡(luò)2701使用邊緣服務(wù)集群2711,邏輯網(wǎng)絡(luò)2702使用邊緣服務(wù)集群2712,并且邏輯網(wǎng)絡(luò)2703使用邊緣服務(wù)集群2713。每個邊緣服務(wù)集群包括多個邊緣服務(wù)vm作為邊緣節(jié)點。在一些實施例中,邊緣集群的邊緣節(jié)點處于相同的l2段中,使得邊緣集群的分組轉(zhuǎn)發(fā)和流委派操作通過l2層流量進行(即,相同邊緣集群通信中的邊緣節(jié)點可通過l2mac地址彼此尋址)。

vi.計算設(shè)備

如前面所提到的,本發(fā)明的一些實施例由在用作主機機器的計算設(shè)備上運行的虛擬化軟件或管理程序?qū)崿F(xiàn)。對于一些實施例,圖28示出了操作虛擬化軟件2805的示例主機機器2800。虛擬化軟件2805允許主機機器托管虛擬機2811-2814以及將虛擬機連接到物理網(wǎng)絡(luò)2890。該物理網(wǎng)絡(luò)2890可以跨越一個或更多數(shù)據(jù)中心,并且包括各種物理交換機和路由器。

如圖所示,主機2800能夠通過物理nic(pnic)2895訪問物理網(wǎng)絡(luò)2890。虛擬化軟件2805用作托管的vm2811-2814與物理nic2895(以及其它物理資源,諸如處理器和存儲器)之間的接口。每個vm包括用于通過虛擬化軟件2805訪問網(wǎng)絡(luò)的虛擬nic(vnic)。vm中的每個vnic負(fù)責(zé)在vm和虛擬化軟件2805之間交換分組。在一些實施例中,vnic是由虛擬nic仿真器實現(xiàn)的物理nic的軟件抽象。

虛擬化軟件2805管理vm2811-2814的操作,并且包括用于管理vm對物理網(wǎng)絡(luò)的訪問(在一些實施例中通過實現(xiàn)vm連接到其的邏輯網(wǎng)絡(luò))的若干組件。如圖所示,虛擬化軟件2805包括物理交換元件2820、物理路由元件2830、控制器接口2840、上行鏈路模塊2870。

控制器接口2840從控制器或控制器集群2860接收控制平面消息。在一些實施例中,這些控制平面消息包括用于配置虛擬化軟件和/或虛擬機的各種組件(諸如物理交換元件2820和物理路由元件2830)的配置數(shù)據(jù)。在一些實施例中,控制平面消息還包括來自中央網(wǎng)絡(luò)管理器或本地網(wǎng)絡(luò)管理器的用于動態(tài)調(diào)整邊緣集群大小的消息。

物理交換元件2820(或受管理的物理交換元件mpse)向和從與物理網(wǎng)絡(luò)2890接口的物理nic2895傳遞網(wǎng)絡(luò)數(shù)據(jù)。物理交換元件還包括多個虛擬端口(vports),其將物理nic與vm2811-2814、物理路由元件2830和控制器接口2840通信地互連。在一些實施例中,每個虛擬端口與唯一的l2mac地址相關(guān)聯(lián)。物理交換元件在連接到其虛擬端口的任何兩個網(wǎng)絡(luò)元件之間執(zhí)行l(wèi)2鏈路層分組轉(zhuǎn)發(fā)。物理交換元件還在連接到其虛擬端口中的任何一個端口的任何網(wǎng)絡(luò)元件與物理網(wǎng)絡(luò)2890上可達的l2網(wǎng)絡(luò)元件(例如,在另一個主機上運行的另一個vm)之間執(zhí)行l(wèi)2鏈路層分組轉(zhuǎn)發(fā)。

物理路由元件2830(或受管理的物理路由元件mpre)對從物理交換元件2820上的虛擬端口接收到的數(shù)據(jù)分組執(zhí)行l(wèi)3路由(例如,通過執(zhí)行l(wèi)3ip地址到l2mac地址解析)。在一些實施例中,物理路由元件2830附接到其的虛擬端口是宿端口(sinkport)。然后,每個路由數(shù)據(jù)分組被發(fā)送回到物理交換單元2820,以根據(jù)解析的l2mac地址轉(zhuǎn)發(fā)到其目的地。該目的地可以是連接到物理交換元件2820上的虛擬端口的另一個vm,或物理網(wǎng)絡(luò)2890上可達的l2網(wǎng)絡(luò)元件(例如,在另一個主機上運行的另一個vm、物理非虛擬化機器等)。

上行鏈路模塊2870在物理交換元件2820和物理nic2895之間中繼數(shù)據(jù)。在一些實施例中,上行鏈路模塊2870允許主機機器2800用作諸如vxlan和vlan之類的封裝覆蓋網(wǎng)絡(luò)的隧道端點。vxlan是覆蓋網(wǎng)絡(luò)封裝協(xié)議。由vxlan封裝創(chuàng)建的覆蓋網(wǎng)絡(luò)有時被稱為vxlan網(wǎng)絡(luò),或簡稱為vxlan。當(dāng)主機2800上的vm將數(shù)據(jù)分組(例如,以太網(wǎng)幀)發(fā)送到相同vxlan網(wǎng)絡(luò)中但在不同主機上的另一個vm時,在將分組發(fā)送到物理網(wǎng)絡(luò)之前,上行鏈路模塊2870使用vxlan網(wǎng)絡(luò)的vni和vtep的網(wǎng)絡(luò)地址來封裝數(shù)據(jù)分組。分組通過物理網(wǎng)絡(luò)(即,封裝使得底層分組對于中間網(wǎng)絡(luò)元件透明)被隧道化到目的地主機。上行鏈路模塊2870還對傳入的vxlan分組進行解封裝,并只將原始的內(nèi)部數(shù)據(jù)分組轉(zhuǎn)發(fā)到目的地vm。

圖29示出了在主機機器2800中運行的邊緣服務(wù)vm2900(例如,作為vm2811-2814之一)。邊緣vm2900與物理交換元件2820交換數(shù)據(jù)平面分組以及與控制器接口2840交換控制平面消息。如圖所示,邊緣服務(wù)vm2900包括有狀態(tài)服務(wù)引擎2910、分組轉(zhuǎn)發(fā)引擎2920、一致性散列引擎2930以及流信息存儲2940。

有狀態(tài)邊緣服務(wù)引擎2910是用于基于來自物理交換分組的傳入分組以及存儲在流信息存儲2940中的流的狀態(tài)來提供有狀態(tài)邊緣服務(wù)(例如,防火墻、nat)。在一些實施例中,有狀態(tài)服務(wù)引擎2910向到轉(zhuǎn)發(fā)引擎2920的分組提供必要的數(shù)據(jù)。

轉(zhuǎn)發(fā)引擎2920經(jīng)由物理交換元件2820接收和轉(zhuǎn)發(fā)網(wǎng)絡(luò)分組。在一些實施例中,轉(zhuǎn)發(fā)引擎基于由有狀態(tài)邊緣服務(wù)引擎2910提供的信息、諸如地址轉(zhuǎn)換或防火墻決定的信息做出其轉(zhuǎn)發(fā)決定或更改分組。在一些實施例中,轉(zhuǎn)發(fā)引擎2920將每個傳入分組的流標(biāo)識符發(fā)送到一致性散列引擎2930,以便確定其所有者節(jié)點。轉(zhuǎn)發(fā)引擎2920還使用流信息存儲2940中的信息來決定是否轉(zhuǎn)發(fā)分組或?qū)⒎纸M轉(zhuǎn)發(fā)到哪里。在一些實施例中,轉(zhuǎn)發(fā)引擎2920執(zhí)行諸如700、900、1500、1600和1700的過程。

一致性散列引擎2930對分組的流標(biāo)識符執(zhí)行一致性散列函數(shù),以便識別其所有者節(jié)點。在一些實施例中,散列結(jié)果還基于由網(wǎng)絡(luò)管理器經(jīng)由控制器接口2830提供的邊緣集群的成員資格(例如,集群中邊緣節(jié)點的數(shù)量)。

在一些實施例中,流信息存儲2940存儲用于實現(xiàn)流委派所需的表,諸如固定流表2950和間接表2955。在一些實施例中,流信息存儲2940還包括本地流表2960,其維護邊緣vm正在處理的流的狀態(tài)信息。在一些實施例中,固定流表2950和本地流表2960被實現(xiàn)為跟蹤邊緣vm2900正在處理的所有流的一個表。存儲的狀態(tài)被提供給有狀態(tài)服務(wù)引擎2910用于執(zhí)行有狀態(tài)服務(wù)。

在本文檔中,術(shù)語“分組”是指跨網(wǎng)絡(luò)發(fā)送的特定格式的位集合。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,術(shù)語分組在本文中可以用于指可跨網(wǎng)絡(luò)發(fā)送的各種格式化的位集合,諸如以太網(wǎng)幀、tcp段、udp數(shù)據(jù)報、ip分組等。

貫穿本說明書提到包括虛擬機(vm)的計算和網(wǎng)絡(luò)環(huán)境。但是,虛擬機只是數(shù)據(jù)計算節(jié)點(dcn)或數(shù)據(jù)計算端節(jié)點(也被稱為可尋址節(jié)點)的一個示例。dcn可以包括非虛擬化物理主機、虛擬機、在主機操作系統(tǒng)之上運行而不需要管理程序或單獨的操作系統(tǒng)的容器、以及管理程序內(nèi)核網(wǎng)絡(luò)接口模塊。

在一些實施例中,vm使用由虛擬化軟件(例如,管理程序、虛擬機監(jiān)視器等)虛擬化的主機的資源與在主機上其自己的客戶操作系統(tǒng)一起操作。租戶(即vm的所有者)可以選擇在客戶操作系統(tǒng)之上要操作哪些應(yīng)用。另一方面,一些容器是在主機操作系統(tǒng)之上運行而不需要管理程序或單獨的客戶操作系統(tǒng)的結(jié)構(gòu)。在一些實施例中,主機操作系統(tǒng)使用名稱空間將容器彼此隔離,并且因此提供在不同容器內(nèi)操作的不同應(yīng)用組的操作系統(tǒng)級隔離。這種隔離類似于在虛擬化系統(tǒng)硬件的管理程序虛擬化環(huán)境中提供的vm隔離,并且因此可以被視為隔離在不同容器中操作的不同應(yīng)用組的一種虛擬化形式。這種容器比vm更輕巧。

在一些實施例中,管理程序內(nèi)核網(wǎng)絡(luò)接口模塊是包括具有管理程序內(nèi)核網(wǎng)絡(luò)接口和接收/發(fā)送線程的網(wǎng)絡(luò)堆棧的非-vmdcn。管理程序內(nèi)核網(wǎng)絡(luò)接口模塊的一個示例是作為vmware公司的esxitm管理程序的一部分的vmknic模塊。

本領(lǐng)域普通技術(shù)人員將認(rèn)識到,雖然本說明書提到vm,但是給出的示例可以是任何類型的dcn,包括物理主機、vm、非-vm容器和管理程序內(nèi)核網(wǎng)絡(luò)接口模塊。事實上,在一些實施例中,示例網(wǎng)絡(luò)可以包括不同類型的dcn的組合。

vii.電子系統(tǒng)

許多上述特征和應(yīng)用被實現(xiàn)為軟件過程,其被指定為記錄在計算機可讀存儲介質(zhì)(也被稱為計算機可讀介質(zhì))上的一組指令。當(dāng)這些指令被一個或多個處理單元(例如,一個或多個處理器、處理器核心、或其它處理單元)執(zhí)行時,它們使得該(一個或多個)處理單元執(zhí)行在指令中指示的動作。計算機可讀介質(zhì)的示例包括,但不限于,cd-rom、閃存驅(qū)動器、ram芯片、硬盤驅(qū)動器、eprom等。計算機可讀介質(zhì)不包括無線或通過有線連接傳遞的載波和電子信號。

在本說明書中,術(shù)語“軟件”是指包括駐留在只讀存儲器中的固件或者可以被讀入到存儲器中用于被處理器處理的存儲在磁存儲中的應(yīng)用。此外,在一些實施例中,若干軟件發(fā)明可以被實現(xiàn)為更大程序的子部分,同時保持明顯的軟件發(fā)明。在一些實施例中,若干軟件發(fā)明也可以被實現(xiàn)為單獨的程序。最后,一起實現(xiàn)本文所描述的軟件發(fā)明的單獨程序的任意組合是在本發(fā)明的范圍之內(nèi)。在一些實施例中,當(dāng)軟件程序被安裝,以在一個或多個電子系統(tǒng)上操作時,軟件程序定義執(zhí)行該軟件程序的操作的一個或多個特定的機器實現(xiàn)。

圖30概念性地示出了實現(xiàn)本發(fā)明的一些實施例的電子系統(tǒng)3000。電子系統(tǒng)3000可以用于執(zhí)行任何控制、虛擬化或上述操作系統(tǒng)應(yīng)用。電子系統(tǒng)3000可以是計算機(例如,臺式計算機、個人計算機、平板計算機、服務(wù)器計算機、大型機、刀片計算機等)、電話、pda或任何其它種類的電子設(shè)備。這種電子系統(tǒng)包括用于各種其它類型的計算機可讀介質(zhì)的各種類型的計算機可讀介質(zhì)和接口。電子系統(tǒng)3000包括總線3005、(一個或多個)處理單元3010、系統(tǒng)存儲器3025、只讀存儲器3030、永久存儲設(shè)備3035、輸入設(shè)備3040、以及輸出設(shè)備3045。

總線3005統(tǒng)一地表示通信連接電子系統(tǒng)3000的眾多內(nèi)部設(shè)備的所有系統(tǒng)、外設(shè)和芯片組總線。例如,總線3005將(一個或多個)處理單元3010與只讀存儲器3030、系統(tǒng)存儲器3025、永久存儲設(shè)備3035通信地連接。

從這些各種存儲器單元中,(一個或多個)處理單元3010檢索要執(zhí)行的指令和要處理的數(shù)據(jù),以便執(zhí)行本發(fā)明的過程。(一個或多個)處理單元在不同實施例中可以是單個處理器或多核心處理器。

只讀存儲器(rom)3030存儲由(一個或多個)處理單元3010和電子系統(tǒng)的其它模塊所需的靜態(tài)數(shù)據(jù)和指令。另一方面,永久存儲設(shè)備3035是讀和寫存儲器設(shè)備。這個設(shè)備是即使當(dāng)電子系統(tǒng)3000關(guān)閉時也存儲指令和數(shù)據(jù)的非易失性存儲單元。本發(fā)明的一些實施例使用大容量存儲設(shè)備(諸如磁或光盤及其對應(yīng)的盤驅(qū)動器)作為永久存儲設(shè)備3035。

其它實施例使用可移除存儲設(shè)備(諸如軟盤、閃存驅(qū)動器等)作為永久存儲設(shè)備。與永久存儲設(shè)備3035一樣,系統(tǒng)存儲器3025是讀和寫存儲器設(shè)備。但是,與存儲設(shè)備3035不同,系統(tǒng)存儲器是易失性讀和寫存儲器,諸如隨機存取存儲器。系統(tǒng)存儲器存儲處理器在運行時需要的一些指令和數(shù)據(jù)。在一些實施例中,本發(fā)明的過程被存儲在系統(tǒng)存儲器3025、永久存儲設(shè)備3035和/或只讀存儲器3030中。從這些各種存儲器單元中,(一個或多個)處理單元3010檢索要執(zhí)行的指令和要處理的數(shù)據(jù),以便執(zhí)行一些實施例的過程。

總線3005還連接到輸入和輸出設(shè)備3040和3045。輸入設(shè)備使用戶能夠傳遞信息和選擇到電子系統(tǒng)的命令。輸入設(shè)備3040包括字母數(shù)字鍵盤和定點設(shè)備(也稱為“光標(biāo)控制設(shè)備”)。輸出設(shè)備3045顯示由電子系統(tǒng)生成的圖像。輸出設(shè)備包括打印機和顯示設(shè)備,諸如陰極射線管(crt)或液晶顯示器(lcd)。一些實施例包括諸如用作輸入和輸出設(shè)備兩者的觸摸屏的設(shè)備。

最后,如在圖30中所示,總線3005還通過網(wǎng)絡(luò)適配器(未示出)將電子系統(tǒng)3000耦合到網(wǎng)絡(luò)3065。以這種方式,計算機可以是計算機的網(wǎng)絡(luò)(諸如局域網(wǎng)(“l(fā)an”)、廣域網(wǎng)(“wan”)、或內(nèi)聯(lián)網(wǎng)、或諸如互聯(lián)網(wǎng)的網(wǎng)絡(luò)的網(wǎng)絡(luò))的一部分。電子系統(tǒng)3000的任何或所有組件可以與本發(fā)明結(jié)合使用。

一些實施例包括電子組件,諸如微處理器、在機器可讀或計算機可讀介質(zhì)(可替代地稱為計算機可讀存儲介質(zhì)、機器可讀介質(zhì)或機器可讀存儲介質(zhì))中存儲計算機程序指令的存儲設(shè)備和存儲器。這種計算機可讀介質(zhì)的一些示例包括ram、rom、只讀壓縮盤(cd-rom)、可記錄壓縮盤(cd-r)、可重寫壓縮盤(cd-rw)、只讀數(shù)字多功能盤(例如,dvd-rom,雙層dvd-rom)、各種可記錄/可重寫dvd(例如,dvd-ram、dvd-rw、dvd+rw等)、閃存存儲器(例如,sd卡、小型sd卡、微型sd卡等)、磁和/或固態(tài)硬盤驅(qū)動器、只讀和可記錄blu-盤、超密度光盤、任何其它光或磁介質(zhì)、以及軟盤。計算機可讀介質(zhì)可以存儲可由至少一個處理單元執(zhí)行的并且包括用于執(zhí)行各種操作的指令集的計算機程序。計算機程序或計算機代碼的示例包括諸如由編譯器產(chǎn)生的機器代碼,以及包括由計算機、電子組件、或利用解釋器的微處理器執(zhí)行的更高級代碼的文件。

雖然以上討論主要指執(zhí)行軟件的微處理器或多核處理器,但是一些實施例通過一個或多個集成電路來執(zhí)行,諸如專用集成電路(asic)或現(xiàn)場可編程門陣列(fpga)。在一些實施例中,這種集成電路執(zhí)行在該電路自身上存儲的指令。

如在本說明書中所使用的,術(shù)語“計算機”、“服務(wù)器”、“處理器”、以及“存儲器”都是指電子或其它技術(shù)設(shè)備。這些術(shù)語不包括人或人群。為了本說明書的目的,術(shù)語顯示或正在顯示意味著在電子設(shè)備上顯示。如本說明書中所使用的,術(shù)語“計算機可讀介質(zhì)”、“多個計算機可讀介質(zhì)”和“機器可讀介質(zhì)”被完全限制為以由計算機可讀的形式存儲信息的、有形的、物理的對象。這些術(shù)語不包括任何無線信號、有線下載信號、以及任何其它短暫信號。

雖然本發(fā)明已經(jīng)參考許多特定細節(jié)進行了描述,但是本領(lǐng)域普通技術(shù)人員將認(rèn)識到,在不脫離本發(fā)明的精神的情況下,本發(fā)明可以以其它特定形式體現(xiàn)。此外,多個圖(包括圖7、9、15、16、17a-b)概念性地示出了過程。這些過程的特定操作可能沒有以與所示出和描述的確切順序執(zhí)行。特定操作可能沒有在一系列連續(xù)的操作中執(zhí)行,并且不同的特定操作可能在不同的實施例中執(zhí)行。此外,過程可以利用幾個子過程來實現(xiàn),或者作為較大的宏過程的一部分來實現(xiàn)。因此,本領(lǐng)域普通技術(shù)人員將理解,本發(fā)明不受上述說明性細節(jié)的限制,而是由所附權(quán)利要求來限定。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
韶山市| 永靖县| 姚安县| 桑日县| 大埔县| 合作市| 浏阳市| 湖北省| 西和县| 西安市| 嘉黎县| 达尔| 灵台县| 蕉岭县| 贡嘎县| 横峰县| 长岛县| 菏泽市| 广宁县| 青阳县| 肇庆市| 渭源县| 乌拉特中旗| 手机| 天津市| 南陵县| 河东区| 渭南市| 凤山县| 阿图什市| 怀仁县| 会东县| 武宣县| 安乡县| 宣恩县| 安平县| 山阴县| 綦江县| 特克斯县| 临澧县| 仪陇县|