對于拓撲變化有彈性的分布式按次序負載分布的制作方法
【專利摘要】用于以對系統拓撲變化有彈性的方式分配網絡負載的方法、裝置和系統。在多個負載拆分器上實施分配函數及相關聯操作,以使得如果負載拆分器成為無效的,則另一個或其他負載拆分器可以轉發對應于以前由無效的負載拆分器處理的流的分組,而無需要求在負載拆分器之間保持流狀態同步。通過系統拓撲變化,以將用于相同流的分組分配給相同服務器的方式實施分配函數,解決了當服務器故障和/或離線時,及當這種服務器或替換服務器恢復在線時的情形。經由使用被標記以追蹤重分配流的重分配流列表和/或布隆過濾器而部分地促進該技術。還公開了一種新穎的布隆過濾器再循環方案。
【專利說明】對于拓撲變化有彈性的分布式按次序負載分布
【背景技術】
[0001] 自從引入微處理器以來,計算機系統已經變得越來越塊。大致按照摩爾定律(基 于預測集成電路上的晶體管數量每兩年加倍的Intel?公司共同創始人GordonMoore的 1965年出版物),在幾乎三十年中,速度增大以相當均勻的速率急速上升。同時,存儲器和 非易失性儲存設備的尺寸也穩定地增大,使得許多當前個人計算機比僅僅10-15年之前的 超級計算機更強大。另外,類似地見證了網絡通信速度的極大增加。
[0002] 處理器速度、存儲器、儲存設備和網絡帶寬技術中的增大導致了具有不斷增大的 容量的網絡的擴建和部署。最近,諸如由亞馬遜(例如,亞馬遜彈性計算云(EC2)和簡單儲 存服務(S3))和微軟(例如,Azure和0ffice365)所提供的基于云的服務的引入,導致了用 于公用網絡基礎結構的額外的網絡擴建以及大容量數據中心的增加,用以支持使用專用網 絡基礎結構的這些服務。另外,在不久的進來,預期新一代(例如4G)移動網絡數據服務會 相當大地影響陸線網絡的使用。這些及其他考慮的結果是預期計算機網絡的使用在可預見 的未來以高速繼續增長。
[0003] 諸如電子商務網站、社交網站、內容托管網站和新聞網站之類的用于云服務及其 他在線網站的公共架構使用多層架構,所述多層架構具有耦合到服務器(諸如應用服務器 和數據庫或儲存服務器)的一層或多層的網絡服務器前端。網絡服務器層自身可以使用負 載分配方案,其以扇出模型方式使用多個級。負載分布還通常部署在網絡服務器與應用服 務器層之間。
[0004] 在技術上,網絡服務器應被更準確地稱為HTTP(超文本傳輸協議)服務器。HTTP 采用使用客戶機-服務器模型的請求-應答協議。HTTP是無狀態協議,最初實施它以便在 單一應答對后關閉連接。在HTTP1.1中,增加了保持活動機制,其中,連接可以用于多個請 求;這些連接被稱為"持久"連接。另外,HTTP1.1引入了分塊傳輸編碼以支持使用持久連 接的數據流。
[0005] 每一個服務器都具有其自身的網絡地址,公共網絡服務器具有公共因特網協議 (IP)網絡地址,其被按照使用32位尋址方案的IPv4或者按照使用128位尋址方案的IPv6 進行編碼。域名系統0NS)用于將網站URL映射到其公共IP地址。典型地,對于諸如www. facebook.com和www.youtube,com的網站的主頁,僅有單一公共IP地址。為了處理每天接 收到的上百萬的請求,這些網站實施負載分布方案,根據這個方案,使用扇出的一級或多級 在網站的專用網絡內部路由每一個請求。
[0006] 早期的負載分布方案采用負載平衡器等,其使用簡單算法以便跨越多個服務器而 平衡輸入請求。例如,鑒于原始HTTP請求/應答預期,采用了循環法方案等,根據這種方案, 如果存在1對n負載平衡器,則每個服務器就會處理每一第n個請求。根據在樹狀層級結 構中將低層應用服務器耦合到高層服務器的架構,僅可以經由單一路由路徑訪問給定應用 服務器。因而,對于這些架構中的流連接,沿著相同路徑路由對應于主機的專用網絡內的連 接的所有分組。
[0007] 與專用IP網絡相反,因特網由大量相互連接的公用網絡組成,并且采用極其大量 的交換元件,例如交換機、路由器、橋接器等。根據因特網的基本概念,可以使用不同路線在 相同源與目的地端點之間路由分組,因而提供了如果一些交換元件成為被禁用情況下的彈 性,并實現了對網絡拓撲的動態變化。但對于流連接等,在路線的公用因特網部分和路線的 專用網絡部分上,沿著相同路線路由分組是有利的。
[0008] 通常優選的是,與流相關聯的分組按次序到達目的地。為了便于這樣,典型地將路 由器和交換機配置成對給定流選擇相同的下一跳。類似地,通常優選地,負載平衡器和負載 拆分器被配置成將屬于相同流的分組發送到相同的服務器。
【專利附圖】
【附圖說明】
[0009] 通過結合附圖參考以下的詳細說明,會更易于意識到本發明的前述方案和許多伴 隨優點,并且會更好地理解它,在附圖中,除非另外指出,否則在貫穿各個視圖中相似的參 考標記指代相似的部分:
[0010] 圖la是示例性系統架構的示意圖,所述系統架構采用多個負載拆分器來將分組 分配給多個服務器,而服務器又反過來提供對到由儲存層中的設備存儲的數據的訪問;
[0011] 圖lb顯示了圖la的系統拓撲中的變化,其中一個服務器成為不可用的;
[0012] 圖1C顯示了圖la和lb的系統拓撲中的變化,其中兩個服務器成為不可用的;
[0013] 圖Id顯示了系統拓撲通過使得不可用服務器之一恢復開機而從圖lc的配置返回 到圖lb的配置。
[0014] 圖le顯示了其中由備用服務器代替有故障的服務器的系統拓撲;
[0015] 圖If顯示了圖lc的系統拓撲中的變化,其中負載拆分器之一變為不可用的;
[0016] 圖2顯示了圖la的系統架構的變化,其中,耦合到負載拆分器的服務器經由LAN 連接到應用服務器層中的應用服務器;
[0017] 圖3a_3c示出了采用多個哈希算法和一維位向量的布隆過濾器如何操作;
[0018] 圖4a_4c示出了采用多個哈希算法和各自的位向量的布隆過濾器如何操作; [0019] 圖5顯示了根據一個實施例的用于一對布隆過濾器的位向量數據的時間流,用于 示出采用當前和下一布隆過濾器的布隆過濾器方案的實現方式;
[0020] 圖6是示出根據一個實施例的有利于根據圖la-lf?中所示的實施例的通用分組分 配/再分配方案的操作和邏輯的流程圖;及
[0021] 圖7是示出被配置為實施本文公開的實施例的方案的裝置的架構的示意圖。
【具體實施方式】
[0022] 本文說明了用于以對于拓撲變化有彈性的方式來分配網絡負載的系統、裝置、方 法的實施例。在以下說明中,闡述了許多具體細節,例如負載拆分器的示例性實施例,以提 供對本發明的實施例的透徹理解。但相關領域技術人員會認識到,可以無需一個或多個具 體細節,或者借助其他方法、組件、材料等來實踐本發明。在其他實例中,沒有詳細顯示或說 明公知的結構、材料或操作以避免使得本發明的方案模糊不清。
[0023] 在本說明書通篇中對"一個實施例"或"實施例"的提及表示結合實施例說明的特 定特征、結構或特性包括在本發明的至少一個實施例中。因而,短語"在一個實施例中"或 "在實施例中"在本說明書通篇中多個位置的出現不一定全都指代相同的實施例。而且,可 以在一個或多個實施例中以任何適合的方式組合特定特征、結構或特性。
[0024] 如上所述,在網絡中通常沿相同路徑來路由與相同流相關聯的分組。更具體地,也 可以稱為負載拆分器(本文所使用的)的負載平衡器被配置為將屬于相同流的分組轉發到 相同的服務器。對于將前端服務器連接到其他層上的服務器的樹狀層級而言,應總是將與 給定服務和相同流相關聯的分組發送到用于實施該服務的相同服務器。例如,基于云的數 據上載或下載可以沿包括前端網絡服務器、被配置為服務數據文件訪問請求的應用服務器 和在其上存儲數據的儲存服務器的路徑來路由分組??蛇x地,可以在相同服務器上實現網 絡服務器和應用服務器功能。結合數據文件請求,打開持久連接,使用運行在應用服務器上 的應用程序并結合使用在網絡服務器上實施的HTTP數據分塊而從儲存服務器流送數據或 向儲存服務器流送數據。由于HTTP數據分塊實際上涉及多個請求/應答,每一個請求都由 相同的網絡服務器和應用服務器來服務。
[0025] 為了支持使用相同的路由/轉發路徑,當前使用的有兩個基本機制。本文所述的 這些機制適用于負載拆分器,但是可以由其他網絡元件(例如交換機)來使用類似的機制。 根據第一機制,負載拆分器為每個當前流保持狀態:(流標識符、選擇來轉發流的服務器)。 這存在兩個問題;一個是,尤其是借助分布式拒絕服務(DD0S)攻擊,該狀態或許變為耗盡 的。另一個問題是如果服務器選擇是任意的(即,在流開始時選擇最小負載的服務器),如 果網絡路徑改變且將流路由到不同負載拆分器,則第二負載拆分器就會無法獲知由第一負 載拆分器所做出的選擇(在負載拆分器之間沒有極為昂貴的狀態同步)。
[0026] 第二個機制采用分組中選定字段值的哈希,以做出無狀態確定選擇。這允許另一 負載拆分器計算相同的選擇。但如果服務器組變化,就會不同地哈希處理所有流,從而不必 要移動流(不僅僅是前往現在的廢棄選擇的流)。
[0027] 根據本文所公開實施例的方案,解決了前述兩個問題,實現了網絡拓撲改變,同時 確保由指定給給定請求的原始應用服務器或者其他服務器服務于該請求以進行完成。另 夕卜,該技術是可縮放的,使得多個負載拆分器可以實施相同的分配邏輯,如果這些負載拆分 器之一發生故障,則另一負載拆分器可以接管處理由故障的負載拆分器先前處理的流的分 配。此外,這可以以在負載拆分器之間無需昂貴的狀態同步的方式來完成。
[0028] 圖la示出了系統100,包括n個運行服務器S(標記為SI、S2、……、Sn)和兩個 備用服務器102-1與102-2,其耦合到三個負載拆分器L(標記為LI、L2和L3)。每一個服 務器S和備用服務器102還耦合到包括多個大容量儲存設備106的儲存層104和儲存訪問 服務器或前端等(未示出),其提供對存儲在大容量儲存設備上的數據的訪問。負載拆分器 L1、L2和L3從系統外部的客戶端經由適用的網絡基礎結構(為了簡單和清楚而沒有示出) 接收輸入請求108。例如,系統100可以是基于云的儲存服務的部分,用戶使用URL門戶經 由因特網進行訪問。在由圖2中的系統200所示的另一配置中,服務器S包括網絡服務器, 其經由局域網(LAN) 103耦合到應用服務器層105,應用服務器層105包括多個應用服務器 107。另外,如果在應用服務器層或者其他中間層中實現服務器S,則可以從諸如前端網絡服 務器層(未示出)的系統100中的另一層接收輸入請求108,或者否則就在系統架構中的層 之間放置多個負載拆分器。
[0029] 每一個負載拆分器L都包括分配邏輯110,其被配置為將輸入請求路由/轉發到 服務器S。更具體地,配置分配邏輯110,以使得將對應于給定流的所有分組轉發到用于服 務相關聯請求的相同服務器S,包括通過系統拓撲變化,除非在流期間服務器變為被禁用的 或者變為不可用的。根據常用術語,將可用于支持服務的服務器稱為"在線"、"開機"或"活 動",而將不可用的服務器稱為"離線"或"停機"或禁用的、有故障的等。其他服務器可以處 于備用,同時在技術上為在線且運行中(盡管以減小的級別),但不可用于服務請求。出于 在這個詳細說明及以下權利要求書中的目的,將運行中的、在線的和/或以其它方式可用 于服務請求的服務器稱為"可用的"服務器,而將停機的、離線的、被禁用的和/或以其它方 式不可用于服務請求的服務器稱為"不可用的"服務器。
[0030] 根據圖la中的系統100的配置,n個服務器是可用的,而兩個服務器是離線的處于 備用模式中,由"Sb"標記。因此,分配邏輯110采用n路確定性分配函數(例如,在一個實 施例中是n路哈希函數)來將輸入請求分配到n個可用服務器。在所示的示例中,在每一 個輸入分組報頭中的字段的元組上進行哈希處理,例如用于IP分組報頭的公知的5元組哈 希。這個方案通常稱為k元組哈希。也可以使用其他公知的哈希函數。出于說明性目的, 隨后使用n作為除數,計算k元組哈希結果的余數R,其中,R識別將分組路由到哪個服務器 S。相應的查找表(未示出)用于將分配函數結果(例如余數R)映射到相應服務器S的地 址,隨后將分組轉發到該服務器。由于用于屬于給定流的所有分組的元組字段值會是相同 的(借助定義,根據標準流分類方案),所以哈希計算和余數結果同樣總是相同的,為相同 流中的所有分組產生相同的余數R。
[0031] 圖lb顯示了系統100的配置,其中服務器S2成為無效的或者成為不可用的,由 "X"標記。結果,當前有n-1個服務器S可用。根據傳統方案,將重新配置每一個負載拆分 器L1、L2和L3中的分配邏輯,以將新的輸入請求分配到(當前)n-l個可用服務器。例如, 這可以使用與圖la中所示的相同的哈希函數來完成,其中,以n-1代替模數n。而這通過 在n-1個可用服務器S中拆分輸入請求108,而有利于負載平衡目的,(n-1)路確定性哈希 函數可以為給定流產生與為n路確定性哈希函數所獲得的結果不同的結果R。
[0032] 前述是存在問題的,因為會將配置變化后的輸入分組不必要地轉發到不同服務 器。本應前往保持開機的服務器的流仍會被路由到那些服務器,但本應路由到不可達的服 務器的流會被重新定向到不同的服務器。此外,一旦服務器恢復,從該服務器重新定向的流 會保持重新定向到替換服務器,直到流完成。典型地,將對應于在前請求的分組轉發到不同 服務器會導致請求的服務不得不重新開始,或者至少產生額外的開銷,這取決于所請求的 服務的類型。盡管有可能構造系統以在無需請求重新開始的情況下支持中游傳輸,但這引 起大量開銷(例如狀態同步、負載拆分器上額外的狀態信息等),并且不可縮放。相反,實施 了技術,以確保不管配置如何變化,都將與給定流相關聯的分組轉發到相同服務器,只要該 服務器在整個流中保持可用。根據傳統實踐,這通過使用輔助信息(例如流識別和映射、流 狀態數據等)和邏輯來完成,這會在DD0S攻擊下被壓制和/或增大負載拆分器復雜性和成 本。
[0033] 根據圖la-lc中所示的實施例的方案,使用了不同的成本較低的方案。不是將確 定性分配函數從n路哈希函數改變為(n-1)路哈希函數,而是在第一分配迭代期間使用相 同的n路哈希函數。在一個實施例中,每一個負載拆分器L保留服務器S及其可用狀況的 列表。如果n路分配函數的結果導致到可用服務器S的映射(稱為"命中"),則將分組簡單 地轉發到該服務器。但如果n路分配函數導致到不可用服務器的映射(稱為"未命中"), 例如圖lb中的服務器S2,則執行第二(n-1)路確定性分配函數,其會導致將分組分配給可 用的n-1個服務器S之一。如圖lc進一步所示的,如果(n-1)路分配函數導致另一個未命 中,則執行第三(n_2)路分配函數。如果(n-2)路分配函數導致未命中,則執行第四(n-3) 路分配函數,以此方式繼續,直至分配函數結果映射到可用服務器。
[0034] 前述方案確保了將對應于現有流的分組轉發到借助對應于圖la中所示的原始系 統100配置的n路分配函數將流原始分配到的相同服務器(只要該服務器可用)。此外,這 在無需要求負載拆分器保留傳統方案所需的流狀態的級別和映射信息的情況下實現了這 個結果。另外,這個方案對于DD0S攻擊更具有彈性,因為它無需為每一個流保持相同級別 的狀態信息。
[0035] 盡管圖la-lc中所示的和以上論述的技術實現了在無需相當大的流級別追蹤信 息的情況下,將分組流分配給相同服務器,但它沒有解決當由于(以前)不可用服務器恢復 在線(因而再次成為可用的)而引起可用服務器的數量增大時的分配。例如,如果圖lb和 lc中的無效服務器S2或者S4的任意一個恢復在線時,會發生這種增大。
[0036] 假定服務器S2恢復在線,并且可再次用于服務輸入請求。在服務器S2不可用時, 一個或多個負載拆分器L(如果適用的話)將正常情況下哈希處理到服務器S2 (假定原始 的n個服務器可用)的流分配給一個或多個其他服務器S。期望的是,負載拆分器104能夠 開始將對應于新請求的流分配給服務器S2,而不是移動在服務器S2不可用時重新分配給 另一服務器的現有流。因此,每一個負載拆分器104應能夠識別它在服務器S2不可用時分 配給其他服務器的流,并實施這樣的流分配機制:其將對應于重新定向的流的分組轉發到 在服務器S2不可用時將每一個重新定向的流所重新定向到的服務器,直至該流完成。如本 文所用的,將轉發到其他服務器的流稱為"重分配的"流,因為它們被轉發到與由分組的分 配函數的初始迭代所識別出的服務器不同的服務器(換句話說,分組必須從不可用服務器 重分配給另一個服務器)。
[0037] 根據各個實施例,每一個負載拆分器保留重分配流的一個或多個列表,使用一個 或多個布隆過濾器,或者使用二者的組合,其中,使用具有預定或可變尺寸的列表或表格, 隨后在沒有更多空間來將額外重分配的流添加到列表/表格時,使用布隆過濾器。當流哈 希處理到服務器S2時,處理分組的負載拆分器核對以查看它是否對應于在服務器S2不可 用時重分配給另一服務器S的流的列表中的流(或者由布隆過濾器標記的流)。如果流在 列表中,那么更新與何時最后見到來自流的分組相關聯的計時器,并按照重分配的結果重 新定向流。對于下述的當前/下一個布隆過濾器方案,如果流在當前布隆過濾器中,那么將 相應的位設定在下一個布隆過濾器中,并重新定向流。如果流既不在列表中也不在布隆過 濾器中,那么將它發送到由分配函數所識別的服務器。
[0038] 假定系統100配置是圖Id中所示的,而在前配置(在服務器S2恢復在線之前)是 圖lc中所示的。在保留重分配流列表114和/或布隆過濾器116的負載拆分器L1處接收 新的分組112。在所示的實施例中,重分配流列表114為每一個服務器S,或者可任選地,為 近來不可用的每一個服務器存儲重分配流條目的列表。在一個實施例中,重分配流由它們 的FlowID識別。通常,可以使用用于定義并確定FlowID的幾個公知的技術的任意一個來確 定用于給定流的FlowID,諸如在多個分組報頭字段值上執行哈希函數,例如在前述n元組 哈希中所使用的,或者簡單地串聯多個字段值。在一個實施例中,哈希函數與用于流分配的 類似或相同,但沒有模數運算。例如,在一個實施例中,分配函數是在分組的相關聯FlowID上執行的簡單模數運算。如下所述的,典型地在分組分類過程中執行用于分組的FlowID。 此外,可以緩存分組,以使得可以取回它們的(已經確定的)FlowID,而無需在流分配函數 中執行類似的哈希函數。
[0039] 繼續分組112的處理,假定在分組112上的n路分配哈希處理導致將分組轉發到 不可用的服務器S4。如前所述,將執行第二(n-1)路分配哈希處理,如有必要則重復,直至 分配哈希處理導致將分組轉發到可用服務器。現在假定在分組120上的n路分配哈希處理 導致將分組轉發到服務器S2。由于這個服務器近來不可用,所以可以有在重新哈希處理的 流列表114中的一個或多個條目或者布隆過濾器116之一中的標記,其識別如果服務器S2 可用時會分配給它的、但需要一個或多個重新哈希處理的一個或多個以前的流,導致將一 個或多個流被重分配給不同的一個或多個服務器。
[0040] 考慮到與重分配流相關聯的分組的可能性,在一個實施例中,為每一個接收到的 分組執行重分配流列表114的查找。由于重分配流列表可以存儲為表格,所以可以使用例 如對應于服務器S2的ServerlD執行針對表格的相應查詢,ServerlD是針對包含ServerlD 值的索引(或者簡單地,包含ServerlD值的列)而查詢的,或者計算或取回FlowID,并用作 用于查找的輸入值。取決于恢復開機或被代替的以前不可用服務器的數量,可能需要執行 分配函數的額外迭代。以下參考圖6中的流程圖600論述用于處理多個服務器可用性配置 的更普遍過程。
[0041] 響應于服務器故障等(例如,為了維護、重配置等而離線),一般慣例是用備用服 務器代替有故障的或不可用的服務器。圖le中示出了這種代替的示例,其中,故障服務器 S2由備用服務器102-1代替。通常,在服務器變為不可用的時間與替換服務器被配置和開 機并運行和使其可用以接管由不可用服務器提供的服務及其他操作的時間之間會存在某 一時間段。在這個時間段,可以將分組流重分配給其他服務器,如前所述。但不是故障服務 器(例如服務器S2)恢復開機并使其可用以再次接收流,而是那些流現在會轉發到替換服 務器。
[0042] 在一個實施例中,希望服務器替換的實現方式對于與實際中同樣多的系統是透明 的。在圖le所示的實施例中,保留了服務器映射表120,其將ServerlD映射到物理或虛擬 服務器及其相應的IP地址??扇芜x地,可以將服務器映射到用于使用層2轉發的系統的 MAC地址。從分配函數的一個實施例的角度來看,函數輸出整數,使用該服務器的IP地址 將流分配到與所述整數相關聯的服務器。通過更新要被替換的服務器的映射信息,以使得 ServerlD現在映射到替換服務器的IP地址,可以部分地有利于服務器替換。如圖le所示 的,用于ServerlD2的IP地址從分配給服務器S2的10. 0. 10. 102更新為分配給替換服務 器 102-1 的 10.0?10.110。
[0043] 如上所述,在一些實施例中,布隆過濾器用于追蹤被重分配的流。布隆過濾器是空 間高效的數據結構,其用于概率性地測試元素是否是集合的成員。最簡單形式的布隆過濾 器采用單一哈希算法,其用于在適用的位位置為元素的單行或列產生位值,通常稱為一維 位向量。另一個布隆過濾器方案采用多個哈希算法,其具有映射到一維位向量的位結果。根 據更高級的布隆過濾器,用于多個哈希算法中每一個的位向量存儲在各自的位向量中,其 也可以稱為多維位向量。
[0044] 在圖3a_3c中顯示了使用具有映射到一維位向量中的位值的多個哈希算法來實 施的布隆過濾器的示例。在這個示例中,存在三個哈希算法,示為仏〇〇、11 2〇〇和成〇〇,其 中,元素1是輸入值。對于給定輸入11,計算每一個哈希算法111〇〇、11 2〇〇和113〇〇的結 果,并在對應于哈希結果的位位置標記(例如設置為1)相應的位。例如,如圖3a所示的, 哈希函數氏〇〇的結果是26,H2(Xl)是43、成〇〇是14。因此,設置在位置26、43和14的 位(例如將位值從"0"(清除)翻轉為"1"(置位))。隨后為后續輸入Xi值重復這個過程, 結果得到圖3b中所示的位向量,其中,設置的位以灰色和黑色示出。圖3b還示出了對于輸 入^的命中的結果(以黑色示出的位)。通過使用^作為輸入值來應用每一個布隆過濾 器的哈希算法來驗證命中(也稱為對元素x2的查詢),隨后確認對于每一個哈希算法結果, 在位位置是否存在位設置。例如,如果對于每一個哈希算法結果的位置存在位設置,則結果 就是命中,表示元素xk對應于應用了哈希算法并設置了相應位的以前輸入值\的概率很高 (取決于位向量的稀疏性)。
[0045] 圖3c顯示了對于輸入&的未命中的結果。在此情況下,沒有設置對應于哈希算法 結果的位向量中的一個或多個位位置。圖3b和3c示出了布隆過濾器所固有的幾個特點。 首先,布隆過濾器可能產生錯誤肯定。這是因為通過相對于多個輸入x評價哈希算法所形 成的位向量是對于每一個輸入x的單個結果的合并。因此,可以存在設置位位置的組合,該 設置位位置對于在針對布隆過濾器的位向量應用時的測試輸入Xi產生命中結果,而輸入Xi 不用于產生位向量。這稱為錯誤肯定。布隆過濾器的另一個固有特點是它們不產生錯誤否 定。如果在應用于布隆過濾器的位向量時的輸入Xi的評價得到未命中,則必然會知道Xif 是以前布隆過濾器輸入的集合的成員。
[0046] 圖4a_4c示出了為每一個布隆過濾器哈希算法保留單獨的表格行(和一維位向 量)的布隆過濾器的示例。盡管將每一行示出為具有相同的長度,但可以是不同哈希算法 會產生不同長度的位向量。在針對輸入x值(例如圖4a中針對Xl)評價哈希算法時,在對應 于哈希算法結果的表格行的位位置處設置相應的位。如同以前一樣,輸入^導致命中(無 論是真實命中還是錯誤肯定),而輸入x3導致未命中。
[0047] 由于哈希算法對于兩個或更多個不同輸入可以產生相同的結果(因而在布隆過 濾器位向量中設置相同位),所以不可能在保證不清除對應于其他輸入結果的位的同時,去 除單個集合成員(通過清除它們的位)。因而,傳統布隆過濾器技術是單向的:僅對應于將 額外成員添加到集合,而將額外的位添加到位向量。
[0048]添加額外集合成員的問題是減小了位向量稀疏性,這導致錯誤肯定的增加,如上 所述。同時,期望在持續的基礎上繼續添加新的集合成員,以有效地存儲便于確定是否重分 配流的標記。根據采用布隆過濾器的一些實施例的方案,提供了一種新穎的技術,其實現了 布隆過濾器追蹤重分配的流,同時保持布隆過濾器稀疏。
[0049]更具體地,如下實施技術的一個實施例。參考圖5,為根據傳統方案會使用的每一 個單一布隆過濾器保留兩個布隆過濾器。例如,在一個實施例中,存在每個服務器S保留一 對布隆過濾器。布隆過濾器的目的是保持追蹤從服務器S重新定向到另一個服務器的重新 定向的流。根據一個方案,以循環方式交換布隆過濾器的狀態,一個布隆過濾器的狀態稱為 "當前"布隆過濾器,而另一個布隆過濾器的狀態稱為"下一個"布隆過濾器。當服務器S停 機時,隨著重分配新的流,在當前和下一個布隆過濾器中設置相同的位(或者將相同的位 添加到下一個布隆過濾器,用于屬于在當前布隆過濾器中已經標記的流的分組),同時僅針 對當前布隆過濾器應用命中測試。當服務器S開機時,當前布隆過濾器僅用于測試分組是 否屬于重新定向的流;不將新的位添加到當前布隆過濾器。只有在分組屬于進行中的重新 定向的流時,才在下一個布隆過濾器中設置用于該分組的布隆過濾器位,如以下進一步詳 細解釋的。
[0050] 最初,清除在第一當前布隆過濾器和第一下一個布隆過濾器中的所有位,如圖5 中在時間h所示的。正是對于這些第一當前和第一下一個布隆過濾器,隨著在第一時間 段中處理新的重分配流,將新設置位(以灰色示出)僅添加到第一當前布隆過濾器。此時 (時間,在如由在時間h和t2之間的時間差所示的第二時間段中,將新的設置位添加到 第一當前和第一下一個布隆過濾器。在一個實施例中,第一和第二(及隨后的)時間段相 同。以黑色顯示在第二時間段中已經添加到第一當前和第一下一個布隆過濾器中的位向量 的設置位。由于在比第一下一個布隆過濾器更長的時間段中將設置位添加到第一當前布隆 過濾器中的位向量(在下一個和當前布隆過濾器中的填充位在時間上偏移),所以在第一 當前布隆過濾器(及隨后的當前布隆過濾器)中的位向量會總是不如第一下一個布隆過濾 器(及隨后的下一個布隆過濾器)中的稀疏,除非在給定循環周期中沒有將設置位添加到 任一布隆過濾器。
[0051] 在此階段,如在時間t2+所示的(" + "指示剛剛在時間12之后),將第一下一個布 隆過濾器提生成為第二當前布隆過濾器,而第一布隆過濾器再循環并再用作第二下一個布 隆過濾器。結合當前布隆過濾器的再循環,清除其位向量。如果在時間&和〖 2之間的時間 段中已經將設置位添加到第一當前和第一下一個布隆過濾器,那么當第一當前布隆過濾器 再循環時,新的當前布隆過濾器位向量將包括設置的至少一些位,而新的下一個布隆過濾 器位向量將不包括設置位,如圖5所示。
[0052] 隨后在進行中的基礎上重復前述布隆過濾器提升和再循環過程,當前布隆過濾器 再循環并以下一個布隆過濾器代替。例如,借助在時間t3和t3+所示的布隆過濾器位向量, 在圖5中示出了從第二當前與下一個布隆過濾器到第三當前與下一個布隆過濾器的序列。
[0053] 使用重分配流列表和布隆過濾器的組合可以提供優于單獨的重分配流列表或者 布隆過濾器的優點。與借助布隆過濾器不同,由于重分配流列表中的每一個條目都對應于 各自的重分配流,所以錯誤肯定是不可能的。如上所述,布隆過濾器為驗證條目是否是由布 隆過濾器位向量數據所標記的條目集合的成員提供了極為有效的機制。通過組合兩個方 案,重分配流列表可以用于主要命中測試,如果空間可用則將FlowID或其他標記添加到重 分配流列表,同時布隆過濾器可以用于溢出情況(例如,當重分配流列表空間耗盡時)。與 布隆過濾器不同,當條目不再相關時,例如當流完成時,條目可以并且優選地應從重分配流 列表中去除。可以使用幾個公知的技術之一來確定流完成的指示,在一個實施例中,響應于 確定已經完成重分配流,從重分配流列表中去除用于該流的FlowID或其他標記。
[0054] 還存在將經由布隆過濾器標記的現有重分配流"添加"到重分配流列表是有利的 情況。如果在用于不可用服務器的重分配流列表已滿的同時,重分配用于重分配流的第一 分組,則將用于流的相應標記(設置位)添加到與服務器相關聯的布隆過濾器(或者在使 用布隆過濾器再循環方案的情況下,添加到當前和下一個布隆過濾器兩者)。如果在重分配 流列表中具有FlowID或其他標記的重分配流完成,則可以從列表去除那些條目,從而釋放 空間以添加新的條目。如果是對應于在布隆過濾器中標記的、但不在重分配流列表中的現 有重分配流的分組,并且列表中有空間,則可以將相應的標記添加到重分配流列表,同時不 影響布隆過濾器位。最后,對應于布隆過濾器中的流的位會老化移出,僅留下與重分配流列 表中的流相關的標記。
[0055] 在一個實施例中,使用了以下技術。響應于將用于流的分組哈希處理到服務器Si, 執行以下操作。
[0056] 針對重分配流的列表檢查分組。如果它被列出,那么按照列表中所指示的重分配 流(或者如果你沒有標記將特定流重新定向到的服務器的列表條目,則進行重新哈希處 理)。
[0057] 否則(列表中沒有),就針對布隆過濾器檢查它。如果布隆過濾器指示不存在流, 那么將流轉發到服務器Si。
[0058] 否則(不在列表中,但在當前布隆過濾器中),那么(不修改下一個布隆過濾器) 將用于該特定流的標記(例如FlowID)添加到重分配流的列表。
[0059] 最后,如果你運氣好,從Si重新定向的僅有的流會是幾個極其長時間的流,在再 循環布隆過濾器一次或多次后,布隆過濾器將保持全為零,因為識別所有長時間流的標記 都將進入到重分配流列表中。
[0060] 圖6是示出了使用架構100并根據圖la-lf中所示實施例來促進通用分組分配/ 重分配方案的操作和邏輯的流程圖600。首先,在塊602中,確定初始數量的可用服務器n。 如由開始和結束循環塊604和624所示的,在由負載拆分器接收并屬于要轉發到服務器S 之一的流的每一個分組上執行在流程圖的外循環內所示的操作和邏輯。在塊606中,將整 數計數i初始化為n;i用作整數變量,其借助由開始和結束循環塊610和616所示的內循 環中的分配函數的每一次迭代而倒計數。
[0061] 在塊608中,執行流分類操作以分類分組。流分類是本領域中公知的,可以使用各 種不同的流分類方案,包括上述的n元組哈希分類方案。在所示的實施例中,為每一個流確 定FlowID,并利用FlowID將分組與流相關聯。例如,可以以通過指針或其他類型的鏈接機 制將每一個分組鏈接到其FlowID的方式緩存分組。優選地,用于得到FlowID的技術應保 證每一個流都具有唯一的FlowID(在預期的操作參數內)。
[0062] 如上提及的,開始和結束循環塊610和616描繪了內循環,重復執行該內循環,直 至循環退出到塊622。更具體地,在開始循環塊610中,將分組的FlowID用作函數輸入以識 別應將分組分配到的服務器S,來實施使用當前值的i路分配函數。在決策塊612中,確定 所識別的服務器是否是可用服務器。如果所識別的服務器不可用,則不能將分組轉發到該 服務器。因而,對決策塊612的回答是"否",邏輯前進到塊614,其中,要么將FlowID添加 到用于所識別的不可用服務器的重分配流列表,要么將相應的位添加到當前和下一個布隆 過濾器。在一個實施例中,如果存在可用空間以添加新的條目,則將FlowID添加到不可用 服務器的重分配流列表,如果不存在可用空間,那么就將適用的位標記(添加)到當前和下 一個布隆過濾器。邏輯隨后前進到結束循環塊616,其中,i遞減1,循環返回到開始循環塊 610,以使用分組FlowID作為函數輸入來執行下一個i路分配函數,其中,隨著每一次循環 迭代,i減小1。
[0063] 返回到決策塊612,如果所識別的服務器是可用服務器,則回答為"是",邏輯流 動到決策塊618,其中,確定分組是否對應于重分配流。在一個實施例中,通過使用分組 的FlowID作為用于所識別的服務器的重分配流列表的查找以檢查FlowID是否在列表中, 來執行這個確定。如果查找檢查結果得到未命中,那么就針對當前布隆過濾器,通過使用 FlowID作為到命中測試的輸入來執行第二檢查。如果重分配流列表檢查或者當前布隆過 濾器檢查結果得到命中,則分組就屬于重分配流(對于決策塊618的"是"結果),邏輯前 進到塊620,其中,如果FlowID在重分配流列表中,則更新用于FlowID的時間戳以反映當 前時間(時間戳表示重分配流的最近的分組),或者,如果不在列表中,則將從FlowID得到 的相應位添加到用于下一個布隆過濾器的位向量數據;無需將這些位添加到當前布隆過濾 器,因為以前在塊614中為流中較早的分組已經添加了它們。邏輯隨后前進到結束循環塊 616,使得i遞減1,且在開始循環塊610開始循環的下一迭代。
[0064] 這個循環迭代繼續,直至由i路分配函數所識別的服務器是沒有為其重分配分組 的流的可用服務器,結果得到在決策塊612的"是"和在決策塊618的"否"。這導致邏輯退 出循環,并前進到塊622,其中,將分組轉發到所識別的服務器。這完成了分組的處理,并且 邏輯循環從結束循環塊624返回到開始循環塊604,以開始處理由負載拆分器接收到的下 一分組。
[0065] 在一個實施例中,在周期性基礎上檢查用于重分配流列表中的FlowID的時間戳, 以確定在當前時間與FlowID時間戳之間的差是否超過某一預定值。這個時間差表示自接 收到給定重分配流的最后分組以來的時間;超過預定值表示完成了流。結果,從用于適用服 務器的重分配流列表去除FlowID。
[0066] 圖7顯示了示例性負載拆分器700的示意性框圖架構,其可以被配置為實施本文 公開的實施例的方案。負載拆分器700包括多個網絡端口 702,每一個都包括物理(PHY)層 塊704、出口緩沖器E和入口緩沖器I。每一個網絡端口 702還可以包括其他組件,它們是 網絡【技術領域】中技術人員所公知的,為了簡單和清楚而沒有示出這些組件。多個網絡端口 702的每一個都包括標記為U(上游)、D(下游)或M(管理)的塊。當部署并運行于負載拆 分器位于網絡705與網絡服務器層之間的系統中時,全部或部分上游端口將連接到服務器 S,一個或多個下游端口將連接到網絡705。在另一系統環境中(未示出),負載拆分器700 將在不同服務器層之間實施,例如在網絡服務器層與應用服務器層之間。因此,上游端口會 連接到應用服務器層中的服務器,而下游端口會連接到網絡服務器層中的服務器。
[0067] 管理端口通??梢杂糜诠芾淼哪康模鐝墓芾碛嬎銠C706等將軟件下載到負載 拆分器,配置負載拆分器,從負載拆分器接收數據,等等??蛇x地,可以經由上游端口或下游 端口中的一個傳送管理操作。在一些實施例中,管理端口(或另一端口,未示出)可以耦合 到另一負載拆分器L,實現多個負載拆分器共享信息,例如關于重分配流的信息、布隆過濾 器數據、統計數據等。注意,由于用于布隆過濾器的位向量可以作為整數傳送到另一負載拆 分器,所以用于在負載拆分器之間共享布隆過濾器數據的開銷極低。
[0068] 負載拆分器700進一步包括主緩沖器708、存儲器710、存儲器控制器712、指令存 儲器714、互連716和處理器718。出口緩沖器E和入口緩沖器I中的每一個都可操作地耦 合到主緩沖器708,它們可以實施為存儲器710的部分,或者可以單獨實施。存儲器710包 括一類動態隨機存取存儲器(DRAM),在所示實施例中經由存儲器控制器712進行訪問???選地,處理器718可以具有一個或多個集成的存儲器控制器或者代理,其被配置為支持對 存儲器710的訪問。在運行時間操作期間,出于多個目的,分配存儲器710的地址空間內的 存儲器的塊,包括儲存重分配流列表720、布隆過濾器722和一個或多個應用,如由應用空 間724所示的。對應于服務器可用性歷史725的數據也可存儲在存儲器710中,如果此類 數據被追蹤的話。
[0069] 處理器718通常可以包括通用處理器,包括一個或多個核心726,或者專用處理 器,例如網絡處理單元(NPU),包括諸如核心、微引擎等的多個處理元件。處理器718還可以 包括哈希單元728,如圖所示。在運行時間操作期間,將指令從指令存儲器714載入應用空 間724,或者直接載入與核心或微引擎726相關聯的高速緩沖存儲器級,并在核心或微引擎 上執行以實現為其配置指令的操作。通過示例而非限制,將指令存儲器714示出為存儲用 于多個模塊的指令,包括分組識別/流分類模塊730、分配邏輯732、統計引擎734和網絡堆 棧736。公知的,負載拆分器等通??梢园ㄆ渌噶睿詫崿F通常由負載拆分器執行的其 他操作;為了清楚,沒有顯示這些指令。
[0070] 分組識別/流分類模塊730包括被配置為識別和/或分類從網絡705接收到的 輸入分組的指令。例如,如上所述,基于在分組的報頭字段中的信息,可以使給定分組與 FlowID相關聯。流分類和/或分配函數可以采用哈希單元728,它是基于硬件的組件,被配 置為使用一個或多個哈希算法執行哈希運算。可選地,可以經由由處理器718執行軟件指 令,或者經由分離的基于硬件的組件(未示出)來實施全部或部分哈希算法。
[0071] 分配邏輯732包括被配置為實施本文所述的分組分配和重分配操作的指令。在一 些實施例中,這個模塊傳送用于分組的FlowID,隨后使用諸如本文所述的哈希函數的可適 用的確定性分配函數將分組分配給適當的服務器S。分配邏輯還被配置為實現重分配流列 表720和布隆過濾器722。在一些實施例中,使用以上參考圖5所述的當前/下一個布隆過 濾器再循環方案來實施布隆過濾器。
[0072] 統計引擎734包括被配置為實施統計運算的指令,包括但不限于收集用于分組流 的統計信息,并計算由負載拆分器700使用的各種配置參數。例如,統計引擎734可以被配 置為響應于相應分組流數據的處理,動態重配置布隆過濾器再循環頻率。另外或者可選地, 統計引擎734可以被配置為從管理計算機706和/或從另一負載拆分器接收統計數據。此 夕卜,統計引擎734可以被配置為從一個或多個服務器S接收統計數據。例如,可以采用使用 專用邏輯端口的管理通道,以便于在負載拆分器700與服務器S之間的非業務數據的傳送。
[0073] 網絡堆棧736包括用于傳送源自負載拆分器700或者以負載拆分器700為目的地 的數據的指令。例如,這種傳送可以在負載拆分器700與管理計算機706、另一負載拆分器 L、和/或服務器S之間。在一些實例中,可以使用公知的TCP/IP網絡堆棧來實施這種傳送。 另外,可以使用其他公知的協議。
[0074] 在一個實施例中,指令存儲器714包括非易失性儲存設備,例如閃存或大容量儲 存設備(例如硬盤)。可任選地,用于一個或多個前述模塊的指令可以結合負載拆分器的初 始化而從管理計算機706或通過網絡705下載。另外,可以經由管理端口或另一端口下載 對這些模塊的更新。
[0075] 除了經由在通用或專用處理器上執行指令來實施操作以外,可以使用嵌入式邏輯 等來實施由本文所述實施例執行的各種操作。此外,負載拆分器700可以采用多個處理器, 包括一個或多個通用處理器和專用處理器的組合。另外,一個或多個網絡端口 702可以采 用嵌入式邏輯,以執行本文所述的一個或多個操作。例如,可以使用被配置為執行分組識別 和/或流分類的高級單端口或多端口網絡接口控制器(NIC),以代替經由在處理器718上執 行指令而執行的這些操作。
[0076] 根據本文公開的實施例的原理和教導的分配邏輯及相關聯操作的實現方式提供 了比當前技術更顯著的優勢。例如,根據在相同層中使用多個負載拆分器的系統架構,在其 中可以由兩個或更多個不同負載拆分器接收與相同流相關聯的分組,傳統方案要求相當大 程度的流狀態信息在負載拆分器之間同步。這個流狀態信息通常包括與由負載拆分器處理 的每一個流相關的狀態信息。作為簡化示例,這種信息可以表述(大意是)屬于FlowID3 的分組要被輸送到ServerlDS5。盡管這個技術對于處理在連接到單一負載拆分器的上游 層中的拓撲變化適用,但它不能很好地縮放,因為相同的信息需要在其他負載拆分器可用, 以便那些負載拆分器獲知將屬于流的分組轉發到何處,所述流包括已經或將要由另一負載 拆分器處理的分組。
[0077] 根據本文的實施例,由于考慮到系統拓撲變化,結合適于分配函數的方案使用分 配函數來轉發分組,所以每一個負載拆分器都可以將分組轉發到適當的服務器,而無需共 享流狀態信息,或者甚至無需預先獲知這種流狀態信息。
[0078] 在圖If中示出了這個功能的示例,其將負載拆分器L1示為有故障且不可用于轉 發輸入分組。如由分組112a和118a所示的,與以前由負載拆分器L1在它成為不可用之前 處理的流相關聯的分組(例如,分組112和118)現在示出為由負載拆分器L2處理。由于 每一個負載拆分器L1和L2都使用相同的分配函數和邏輯,所以負載拆分器L2會將相同的 分組轉發到適當的服務器,其被指定為處理與分組相關聯的流。此外,在需要重分配的情況 下,兩個負載拆分器L1和L2會將對應于相同流的分組重分配給相同的服務器。盡管未示 出,但負載拆分器L3也被配置為以類似的方式將分組轉發到適當的服務器。
[0079] 除了在負載拆分器上實現外,實施例的方案可以更普遍地在任意類型的網絡交換 或轉發元件上實施,其利用流分配和/或轉發分組,其中將與相同流相關聯的分組分配和/ 或轉發出相同的網絡端口,朝向相同的下一跳(如另一網絡元件)或者到相同的端點(例 如,服務器、計算機等)。
[0080] 除了使用物理負載拆分器或者其他物理交換元件實現外,該技術也可以部署在虛 擬環境中,例如通常用于數據中心和服務器群中的那些環境。例如,服務器平臺可以被配置 為從網絡接收分組,并將那些分組分配給由服務器平臺托管的多個虛擬服務器實例。根據 此類實現方式,交換元件以軟件實現為虛擬交換機、負載拆分器、負載平衡器等。
[0081] 盡管參考特定實現方式描述了一些實施例,但根據一些實施例,其他實現方式也 是可能的。另外,無需以附圖所示和本文所述的特定方式布置所示和/或所述的元件或其 他特征的布置和/或順序。根據一些實施例,許多其他布置是可能的。
[0082] 在附圖中所示的每一個系統中,在一些情況下,元件中的每一個都可以具有相同 的參考標記或不同的參考標記,以暗示所示元件可以是不同的和/或相似的。但元件可以 足夠靈活以具有不同實現方式,并與本文所示或所述的一些或全部系統工作。附圖中所示 的各種元件可以是相同的或不同的。將哪一個稱為第一元件和將哪一個稱為第二元件是任 意的。
[0083] 在說明書和權利要求書中,可以使用術語"耦合"和"連接"及其派生詞。應理解, 這些術語并非旨在作為彼此的同義詞。相反,在特定實施例中,"連接"可以用于指示兩個或 更多個元件彼此直接物理或電氣接觸。"耦合"可以表示兩個或更多個元件直接物理或電氣 接觸。但"耦合"也可以表示兩個或更多個元件彼此沒有直接接觸,但仍彼此協作或相互作 用。
[0084] 實施例是本發明的實現方式或示例。說明書中對"實施例"、"一個實施例"、"一些 實施例"或者"其他實施例"的提及表示結合實施例說明的特定特征、結構或特性包括在本 發明的至少一些實施例中,但不一定是所有實施例中。"實施例"、"一個實施例"或"一些實 施例"的多次出現不一定全都指代相同的實施例。
[0085] 本文所述和所示的全部組件、特征、結構、特性等并非都需要包括在特定的一個或 多個實施例中。例如,如果說明書表述"可以"、"或許"、"能夠"或者"可能"包括了組件、特 征、結構或特性,則該特定組件、特征、結構或特性不是必需被包括。如果說明書或權利要求 書提及"一(a)"或"一(an)"元件,其并非表示僅有一個元件。如果說明書或權利要求書 提及"另外的"元件,其不排除存在多于一個另外的元件。
[0086] 如上所述,通過相應的軟件和/或固件組件和應用可以便于本文實施例的多個方 案,例如由在負載拆分器上的處理器或NPU執行的軟件或固件。因而,本發明的實施例可 以用作或者支持在某一形式的處理核心(例如處理器或NPU,或者多核處理器的一個或多 個核心)上執行的軟件程序、軟件模塊、固件、和/或分布式軟件、運行在處理器或核心上的 或者在機器可讀介質上或內實施或實現的虛擬機。機器可讀介質包括用于存儲或發送以機 器(例如計算機)可讀形式的信息的任何機制。例如,機器可讀介質可以包括只讀存儲器 (ROM);隨機存取存儲器(RAM);磁盤儲存介質;光儲存介質;和閃存設備等。
[0087] 本發明的所示實施例的以上說明,包括在摘要中所述的,并非旨在是窮舉性的,或 者將本發明局限于公開的準確形式。盡管在此出于示例性目的說明了本發明的特定實施例 和示例,但如相關領域技術人員會認識到的,在本發明的范圍內的多個等效修改是可能的。 [0088] 按照以上的詳細說明可以做出這些修改。用于以下權利要求書中的詞語不應解釋 為將本發明局限于在說明書和附圖中公開的特定實施例。相反,本發明的范圍由以下權利 要求書整體上確定,其應按照權利要求解釋的既定原則來解釋。
【權利要求】
1. 一種由負載拆分器實施的方法,所述負載拆分器被配置為接收輸入分組并將所述分 組分配給耦合到所述負載拆分器的多個服務器,所述方法包括: 檢測到η個服務器能用于接收分組; 采用η路分配函數來將分組分配給所述η個服務器,其中,所述η路分配函數被配置為 使得將屬于相同流的分組分配給相同的服務器; 檢測到所述η個服務器的第一服務器不能用于接收分組,留下η-1個能用服務器; 在存在η-1個能用服務器時, 響應于接收到第一分組, 將所述第一分組分類以將所述第一分組與流相關聯;以及 在所述分組上執行所述η路分配函數; 如果所述η路分配函數的結果指示將所述第一分組分配給能用服務器,則將所述第一 分組轉發到所述能用服務器; 如果所述η路分配函數的結果指示將所述第一分組分配給第一不能用服務器,則 采用(η-1)路分配函數來確定能用服務器,以將所述第一分組重分配到所述服務器, 并將所述第一分組轉發到所述服務器; 存儲指示與用于所述第一分組的流相關聯的分組屬于重分配流的標記;以及 當能用服務器的數量返回到η個服務器時, 將隨后接收到的與所述重分配流相關聯的分組轉發到將所述第一分組重分配到的相 同的服務器。
2. 根據權利要求1所述的方法,進一步包括: 響應于接收到分組, 初始化整數i = η ; (a) 執行i路分配函數,以識別將所述分組分配或重分配到的服務器; (b) 如果所述i路分配函數的結果識別出能用服務器,則確定所述分組是否與用于所 述能用服務器的重分配流相關聯;及 i. 如果所述分組與用于所述能用服務器的重分配流相關聯,則將i遞減1,并返回到 (a);否則, ii. 將所述分組轉發到所述能用服務器; (c) 如果所述i路分配函數的結果識別出不能用服務器,則存儲指示屬于與所述分組 相關聯的流的分組屬于重分配流的標記,將i遞減1,并返回到(a);及 (d) 在適用情況下,重復操作(a)、(b)、(b) i和(c),直至在操作(b)中所述i路分配函 數識別出不具有與所述分組相關聯的重分配流的能用服務器。
3. 根據權利要求2所述的方法,進一步包括: 對于每個接收到的分組,執行流分類操作,以識別與所述分組相關聯的流,所述流具有 流標識符(FlowID);以及 采用所述FIowID作為到所述i路分配函數的輸入。
4. 根據權利要求3所述的方法,進一步包括:采用用于被重分配的流的FIowID作為標 記,所述標記指示與那些流相關聯的分組是重分配流。
5. 根據權利要求2-4中任意一項所述的方法,進一步包括: 采用用于向其重分配流的服務器的重分配流列表,其中, 在操作(C)中,將包含標記的重分配流條目添加到用于所述服務器的重分配流列表, 所述標記指示將與所述流相關聯的分組被重分配給另一服務器; 在操作(b)中,通過確定與分組相關聯的流,并針對用于所述服務器的重分配流列表 執行查找,以確定是否存在與和分組相關聯的流匹配的條目,來確定所述分組是否與用于 所述能用服務器的重分配流相關聯;以及 在操作(b)i中,更新用于對應于與所述分組相關聯的重分配流的重分配流條目的時 間戳。
6. 根據權利要求2-5中任意一項所述的方法,進一步包括: 采用一對布隆過濾器來存儲位向量數據,所述位向量數據被配置為促進確認流是否包 括用于與布隆過濾器對相關聯的服務器的重分配流; 通過用下一個布隆過濾器代替當前布隆過濾器來周期性地再循環當前布隆過濾器,其 中,所述下一個布隆過濾器成為新的當前布隆過濾器,清除所述當前布隆過濾器中的位向 量數據,并且所述當前布隆過濾器成為新的下一個布隆過濾器; 在操作(c)中,在與所述不能用服務器相關聯的所述當前布隆過濾器和所述下一個布 隆過濾器中設置位,指示將與所述流相關聯的分組重分配到另一服務器; 在操作(b)中,通過確定與所述分組相關聯的流,并針對用于所述服務器的所述當前 布隆過濾器執行查找,以確定是否存在與和所述分組相關聯的流匹配的條目,來確定所述 分組是否與用于所述能用服務器的重分配流相關聯;以及 在操作(b)i中,在所述下一個布隆過濾器中設置位,指示將與所述流相關聯的分組重 分配到另一服務器。
7. 根據前述權利要求中任意一項所述的方法,進一步包括: 在所述服務器的數量小于η個服務器時, 保留包含數據的重分配流標記,所述數據為當前或者過去不能用的每一個服務器識別 哪些流現在或者過去被從所述服務器重分配到另一服務器, 當能用服務器的數量返回到η個服務器時, 響應于接收到下一分組, 對所述下一分組進行分類,以將所述下一分組與流相關聯,并在所述分組上執行η路 分配函數; 檢查用于由所述η路分配函數識別的服務器的重分配流標記;以及 如果與所述下一分組相關聯的流是由所述重分配流標記識別的流,則將所述分組重定 向到與被重新分配的流相關聯的服務器分組。
8. 根據前述權利要求中任意一項所述的方法,進一步包括:保留包含數據的至少一個 重分配流列表,所述數據為當前或者過去不能用的每一個服務器識別哪些流現在或者過去 被從所述服務器重分配到另一服務器。
9. 根據前述權利要求中任意一項所述的方法,進一步包括: 采用至少一對布隆過濾器來存儲位向量數據,所述位向量數據被配置為促進已經被重 分配的流的識別; 對于每一對布隆過濾器, 以時間上偏移的方式填充所述布隆過濾器中的所述位向量數據,以使得所述布隆過濾 器中的一個具有比另一個更多的位設置,將具有更多位設置的布隆過濾器指定為當前布隆 過濾器,并將另一個布隆過濾器指定為下一個布隆過濾器; 周期性將所述下一個布隆過濾器提升成為新的當前布隆過濾器,并再循環所述當前布 隆過濾器,以用作新的下一個布隆過濾器,其中,再循環當前布隆過濾器向量清除其位向量 數據;以及 針對作為當前布隆過濾器的布隆過濾器執行流識別命中測試。
10. 根據前述權利要求中任意一項所述的方法,進一步包括: 為多個服務器的每一個服務器關聯一對布隆過濾器; 對于每一對布隆過濾器, 指定一個布隆過濾器的狀態為當前布隆過濾器,另一個布隆過濾器的狀態為下一個布 隆過濾器,其中,每一個布隆過濾器的狀態在當前布隆過濾器狀態與下一個布隆過濾器狀 態之間周期性循環, 當服務器在第一時間段中不能用時,響應于檢測到被從與布隆過濾器對相關聯的服務 器重分配出去的流,在所述第一時間段中初始僅以位向量數據填充第一當前布隆過濾器; (a) 在下一時間段中,響應于在所述下一時間段中檢測到被從所述服務器重分配出去 的流,以位向量數據填充所述第一當前布隆過濾器和第一下一個布隆過濾器; (b) 在下一時間段完成后,將所述第一下一個布隆過濾器提升為新的當前布隆過濾器, 并再循環所述第一當前布隆過濾器,以用作新的下一個布隆過濾器,其中,當再循環布隆過 濾器時,清除用于所述布隆過濾器的位向量數據;以及 在持續的基礎上重復操作(a)和(b)。
11. 根據前述權利要求中任意一項所述的方法,進一步包括: 保留包含數據的至少一個重分配流列表,所述數據為當前或者過去不能用的每一個服 務器識別哪些流的至少一部分現在或者過去被從所述服務器重分配到另一服務器;以及 為所述當前或者過去不能用的每一個服務器采用至少一個布隆過濾器來存儲位向量 數據,所述位向量數據被配置為促進確認流是否包括當前或過去被從與包含所述位向量數 據的布隆過濾器相關聯的服務器重分配出去的流。
12. -種裝置,包括: 多個上游網絡端口; 至少一個下游網絡端口; 其中,所述裝置被配置為安裝在系統中,并實施為負載拆分器,其將在所述至少一個下 游端口處接收到的分組分配給與所述多個上游端口通信耦合的多個服務器,其中,服務器 的初始數量是n,當被安裝在所述系統中并運行時,所述裝置進一步被配置為執行包括以下 的操作, 響應于接收到分組, 初始化整數i = η ; 識別與所述分組相關聯的流; (a) 執行i路分配函數,以識別將所述分組分配或重分配到的服務器; (b) 如果所述i路分配函數的結果識別出能用服務器,則確定所述分組是否與用于所 述能用服務器的重分配流相關聯;以及 i. 如果所述分組與用于所述能用服務器的重分配流相關聯,則將i遞減1,并返回到 (a);否則, ii. 將所述分組轉發到所述能用服務器; (c) 如果所述i路分配函數的結果識別出不能用服務器,則存儲指示屬于與所述分組 相關聯的流的分組屬于重分配流的標記,將i遞減1,并返回到(a);以及 (d) 在適用情況下,重復操作(a)、(b)、(b) i和(c),直至在操作(b)中所述i路分配函 數識別出不具有與所述分組相關聯的重分配流的能用服務器,導致在(b)ii中將所述分組 轉發到所述能用服務器。
13. 根據權利要求12所述的裝置,其中,當被安裝在所述系統中并運行時,所述裝置進 一步被配置為執行包括以下的操作: 對于每個接收到的分組,執行流分類操作,以識別與所述分組相關聯的流,所述流具有 流標識符(FlowID); 采用所述FIowID作為到所述η路和(η-I)路分配函數的輸入;以及 使用用于重分配流的FlowID,追蹤與被重分配的分組相關聯的重分配流。
14. 根據權利要求13所述的裝置,其中,當被安裝在所述系統中并運行時,所述裝置進 一步被配置為:使用包含數據的至少一個重分配流列表追蹤已經被重分配的流,所述數據 為當前或者過去不能用的每一個服務器識別當所述服務器現在或過去不能用時哪些流現 在或者過去被從所述服務器重分配到另一服務器。
15. 根據權利要求14所述的裝置,其中,當被安裝在所述系統中并運行時,所述裝置進 一步被配置為: 在操作(c)中,將包含標記的重分配流條目添加到用于所述服務器的重分配流列表, 所述標記指示將與所述流相關聯的分組重分配給另一服務器; 在操作(b)中,通過確定與分組相關聯的流,并針對用于所述服務器的重分配流列表 執行查找,以確定是否存在與和分組相關聯的流匹配的條目,來確定所述分組是否與用于 所述能用服務器的重分配流相關聯; 在操作(b)i中,更新用于對應于與所述分組相關聯的重分配流的重分配流條目的時 間戳;以及 如果在重分配流條目的時間戳與當前時間之間的時間差超過預定值,則去除所述重分 配流條目。
16. 根據權利要求12-15任意一項所述的裝置,其中,當被安裝在所述系統中并運行 時,所述裝置進一步被配置為執行包括以下的操作: 為操作性地耦合到所述上游網絡端口的多個服務器中的每一個服務器關聯一對布隆 過濾器; 對于每一對布隆過濾器, 指定一個布隆過濾器的狀態為當前布隆過濾器,另一個布隆過濾器的狀態為下一個布 隆過濾器,其中,每一個布隆過濾器的狀態在所述當前布隆過濾器狀態與所述下一個布隆 過濾器狀態之間周期性循環, 在服務器在第一時間段中不能用時,響應于檢測到被從與布隆過濾器對相關聯的服務 器重分配出去的流,在所述第一時間段中初始僅以位向量數據填充第一當前布隆過濾器; (a) 在下一時間段中,響應于在所述下一時間段中檢測到被從所述服務器重分配出去 的流,以位向量數據填充所述第一當前布隆過濾器和第一下一個布隆過濾器; (b) 在下一時間段完成后,將所述第一下一個布隆過濾器提升為新的當前布隆過濾器, 并再循環所述第一當前布隆過濾器,以用作新的下一個布隆過濾器,其中,當再循環布隆過 濾器時,清除用于所述布隆過濾器的位向量數據;以及 在持續的基礎上重復操作(a)和(b)。
17. 根據權利要求16所述的裝置,其中,當被安裝在所述系統中并運行時,所述裝置進 一步被配置為執行包括以下的操作: 在操作(c)中,在與所述不能用服務器相關聯的所述當前布隆過濾器和所述下一個布 隆過濾器中設置位,指示將與所述流相關聯的分組重分配到另一服務器; 在操作(b)中,通過針對用于所述服務器的所述當前布隆過濾器執行查找,以確定是 否存在與和所述分組相關聯的流匹配的條目,來確定所述分組是否與用于所述能用服務器 的重分配流相關聯;以及 在操作(b)i中,在所述下一個布隆過濾器中設置位,指示將與所述流相關聯的分組重 分配到另一服務器。
18. 根據權利要求16所述的裝置,其中,當被安裝在所述系統中并運行時,所述裝置進 一步被配置為: 保留包含數據的至少一個重分配流列表,所述數據為當前或者過去不能用的每一個服 務器識別哪些流的至少一部分現在或者過去被從所述服務器重分配到另一服務器; 響應于接收到流的第一分組, 如果用于分組的所述i路重分配函數識別出不能用的服務器,則確定在用于所述不能 用服務器的重分配流列表中是否存在能用于增加新的重分配流條目的任何空間;以及 如果存在能用的空間,則將對應于用于所述第一分組的流的新的重分配流條目增加到 所述重分配流列表;否則 將位向量數據增加到與所述不能用服務器相關聯的所述當前和下一個布隆過濾器,以 指示所述流是重分配流。
19. 根據權利要求12-18中任意一項所述的裝置,其中,所述裝置進一步包括: 處理器,具有一個或多個處理元件; 至少一個存儲器,操作性地耦合到所述處理器; 儲存設備,所述儲存設備具有存儲于其中的指令,所述指令被配置為在所述處理器上 執行,以使得當所述裝置被安裝在所述系統中并運行時,執行所述的操作。
20. 根據權利要求13所述的裝置,其中,所述裝置進一步包括管理網絡端口,當被安裝 在采用具有類似配置的第二裝置的系統中時,所述裝置被配置為與所述第二裝置共享關于 重分配流的信息。
21. -種有形非暫時性機器可讀介質,具有存儲于其上的指令,所述指令被配置為由負 載拆分器上的至少一個處理元件執行,以使得當負載拆分器被安裝在系統中并運行時,所 述負載拆分器能夠實現分組分配和重分配操作,所述分組分配和重分配操作包括: 響應于接收到分組, 初始化整數i = η ; 識別與所述分組相關聯的流; (a) 執行i路分配函數,以識別將所述分組分配或重分配到的服務器; (b) 如果所述i路分配函數的結果識別出能用服務器,則確定所述分組是否與用于所 述能用服務器的重分配流相關聯;以及 i. 如果所述分組與用于所述能用服務器的重分配流相關聯,則將i遞減1,返回到(a); 否則, ii. 將所述分組轉發到所述能用服務器; (c) 如果所述i路分配函數的結果識別出不能用服務器,則存儲指示屬于與所述分組 相關聯的流的分組屬于重分配流的標記,將i遞減1,并返回到(a);以及 (d) 在適用情況下,重復操作(a)、(b)、(b) i和(c),直至在操作(b)中所述i路分配函 數識別出不具有與所述分組相關聯的重分配流的能用服務器,導致在(b)ii中將所述分組 轉發到所述能用服務器。
22. 根據權利要求21所述的有形非暫時性機器可讀介質,其中,所述指令被配置為執 行進一步的操作,在執行時,包括: 對于每個接收到的分組,執行流分類操作,以識別與所述分組相關聯的流,所述流具有 流標識符(FlowID),或者取回通過先前的流分配操作產生的與所述分組相關聯的FIowID ; 采用所述FIowID作為到所述i路分配函數的輸入;以及 使用用于重分配流的FlowID,追蹤與被重分配的分組相關聯的重分配流。
23. 根據權利要求21或22所述的有形非暫時性機器可讀介質,其中,所述指令被配置 為執行進一步的操作,在執行時,包括: 使用包含數據的至少一個重分配流列表追蹤已經被重分配的流,所述數據為當前或者 過去不能用的每一個服務器識別當所述服務器現在或過去不能用時現在或過去被重分配 的流; 在操作(c)中,將包含標記的重分配流條目添加到用于所述服務器的重分配流列表, 所述標記指示將與所述流相關聯的分組重分配給另一服務器; 在操作(b)中,通過確定與分組相關聯的流,并針對用于所述服務器的重分配流列表 執行查找,以確定是否存在與和分組相關聯的流匹配的條目,來確定所述分組是否與用于 所述能用服務器的重分配流相關聯; 在操作(b)i中,更新用于對應于與所述分組相關聯的重分配流的重分配流條目的時 間戳;以及 如果在重分配流條目的時間戳與當前時間之間的時間差超過預定值,則去除所述重分 配流條目。
24. 根據權利要求21-23中任意一項所述的有形非暫時性機器可讀介質,其中,所述指 令被配置為執行進一步的操作,在執行時,包括: 為操作性地耦合到上游網絡端口的多個服務器中的每一個服務器關聯一對布隆過濾 器; 對于每一對布隆過濾器, 指定一個布隆過濾器的狀態為當前布隆過濾器,另一個布隆過濾器的狀態為下一個布 隆過濾器,其中,每一個布隆過濾器的狀態在所述當前布隆過濾器狀態與所述下一個布隆 過濾器狀態之間周期性循環, 在服務器在第一時間段中不能用時,響應于檢測到被從與布隆過濾器對相關聯的服務 器重分配出去的流,在所述第一時間段中初始僅以位向量數據填充第一當前布隆過濾器; (a) 在下一時間段中,響應于在所述下一時間段中檢測到被從所述服務器重分配出去 的流,以位向量數據填充所述第一當前布隆過濾器和第一下一個布隆過濾器; (b) 在下一時間段完成后,將所述第一下一個布隆過濾器提升為新的當前布隆過濾器, 并再循環所述第一當前布隆過濾器,以用作新的下一個布隆過濾器,其中,當再循環布隆過 濾器時,清除用于所述布隆過濾器的位向量數據;以及 在持續的基礎上重復操作(a)和(b)。
25.根據權利要求24所述的有形非暫時性機器可讀介質,其中,所述指令被配置為執 行進一步的操作,在執行時,包括: 在操作(c)中,在與所述不能用服務器相關聯的所述當前布隆過濾器和所述下一個布 隆過濾器中設置位,指示將與所述流相關聯的分組重分配到另一服務器; 在操作(b)中,通過針對用于所述服務器的所述當前布隆過濾器執行查找,以確定是 否存在與和所述分組相關聯的流匹配的條目,來確定所述分組是否與用于所述能用服務器 的重分配流相關聯;以及 在操作(b)i中,在所述下一個布隆過濾器中設置位,指示將與所述流相關聯的分組重 分配到另一服務器。
【文檔編號】H04L29/08GK104519125SQ201410729357
【公開日】2015年4月15日 申請日期:2014年9月26日 優先權日:2013年9月27日
【發明者】R·珀爾曼 申請人:英特爾公司