用于數(shù)據(jù)組塊去復制的系統(tǒng)和方法
【專利摘要】一種方法包括:接收關于多個數(shù)據(jù)組塊的信息,并且確定多個后端節(jié)點中的一個或多個是否已經(jīng)存儲多于閾值量的多個數(shù)據(jù)組塊,其中所述多個后端節(jié)點中的一個被指定為粘性節(jié)點。所述方法進一步包括:響應于確定所述多個后端節(jié)點中的任何一個沒有已經(jīng)存儲多于閾值量的多個數(shù)據(jù)組塊,對照被指定為粘性節(jié)點的后端節(jié)點對所述多個數(shù)據(jù)組塊去復制。最后,所述方法包括:響應于正在被處理的數(shù)據(jù)量,把不同的后端節(jié)點指定為粘性節(jié)點。
【專利說明】用于數(shù)據(jù)組塊去復制的系統(tǒng)和方法
【背景技術】
[0001] 數(shù)據(jù)去復制是用于消除冗余數(shù)據(jù)的數(shù)據(jù)壓縮技術,并且對于改進存儲利用率(例 如,當定期備份大量數(shù)據(jù)時)特別有用。當把基于組塊的內聯(lián)去復制用于備份時,將備份的 數(shù)據(jù)流被使用分塊算法分解成稱為"組塊"的較小塊(典型地大約幾千字節(jié))并且例如,使用 MD5哈希函數(shù)或SHA哈希函數(shù)為每個組塊計算哈希。用于將備份組塊的哈希在一個或多個 索引和/或由系統(tǒng)維護的其它數(shù)據(jù)結構中被查找。如果系統(tǒng)確定作為結果其已經(jīng)具有采用 那個哈希的組塊,則那個組塊是已被存儲在系統(tǒng)中的數(shù)據(jù)的復制并且無需再次被存儲。因 此,用于每個進入的組塊的哈希在一個或多個索引和/或由系統(tǒng)維護的其它數(shù)據(jù)結構中被 查找。
[0002] 為了在保持性能的同時限制所需的昂貴存儲器的量,復雜的索引方法可以在實 踐中被使用。在一個示例("稀疏索引方法")中,系統(tǒng)維護"稀疏索引",其把被稱為"鉤子 (hook)"的哈希的小的子集(例如,每32或64個唯一哈希中一個)映射到具有關于具有那 個鉤子的組塊以及在過去靠近那個組塊出現(xiàn)的組塊的信息的索引。
[0003] 在另一個示例("布?。˙loom)過濾器方法")中,布隆過濾器跟蹤由系統(tǒng)存儲的組 塊的哈希,并且全組塊索引把由系統(tǒng)存儲的每個組塊的哈希映射到具有信息的索引,所述 信息關于具有那個哈希的組塊以及在過去靠近那個組塊出現(xiàn)的組塊。僅當布隆過濾器確定 輸入組塊已經(jīng)被存儲時,全組塊索引才被考慮,以減少對全組塊索引的訪問的數(shù)量。
[0004] 使用以上所描述的方法中的一個的單個節(jié)點為應用(其中備份的數(shù)據(jù)量是低的, 或者其中不需要高的吞吐量)提供可接受的性能。然而,對于其中數(shù)據(jù)備份需求高得多的企 業(yè)類型的應用,使用多節(jié)點存儲系統(tǒng)可能是有益的。做到這樣的一種方式是在多個大部分 自治的后端節(jié)點之間適當?shù)芈酚蛇M入的數(shù)據(jù),后端節(jié)點的每一個可能正在使用上面示例性 方法中的一個。在這個架構下,每批量進入的數(shù)據(jù)僅對照一個后端節(jié)點被去復制,因此,重 要的是:把相似批量的數(shù)據(jù)路由到相同的后端節(jié)點以確保高效的去復制,從而最小化備份 數(shù)據(jù)的存儲空間影響。
【專利附圖】
【附圖說明】
[0005] 為了詳細描述示例性實現(xiàn)方式,對附圖的參考現(xiàn)在將被做出,其中: 圖la示出了依據(jù)各種示例的多節(jié)點數(shù)據(jù)去復制系統(tǒng)的框圖; 圖lb示出了依據(jù)各種示例的前端節(jié)點的示例架構; 圖2示出了依據(jù)各種示例的交錯數(shù)據(jù)流的示例圖;以及 圖3示出了依據(jù)各種示例的方法流程圖。
[0006] 符號和術語 某些術語貫穿接下來的說明書和權利要求被使用以指代特定系統(tǒng)部件。作為本領域的 技術人員將認識到的是:計算機公司可以采用不同的名稱指代部件。本文檔不旨在區(qū)分名 稱上不同而不是功能上不同的部件。在接下來的討論中以及在權利要求中,術語"包括"和 "包含"以開放的形式被使用,并且因此應被解釋為表示"包括,但不限于……"。此外,術語 "耦合"旨在表示間接、直接、光學或無線電氣連接。因此,如果第一設備耦合到第二設備,則 那個連接可以通過直接電氣連接、通過經(jīng)由其它設備和連接的間接電氣連接、通過光學電 氣連接、或通過無線電氣連接。
[0007] 如在此所使用的,術語"組塊"是指使用分塊算法生成的數(shù)據(jù)流的子集。
[0008] 如在此所使用的,術語"段"是指使用分段算法生成的一組組塊。
[0009] 如在此所使用的,術語"哈希"是指使用哈希函數(shù)創(chuàng)建的組塊的標識。
[0010] 如在此所使用的,術語"鉤子"是指已被采樣的組塊的哈希。
[0011] 如在此所使用的,術語"塊"是指與其它文件或數(shù)據(jù)流交錯的文件或數(shù)據(jù)流的劃 分。例如,交錯的數(shù)據(jù)可以包括la,2a,3a,lb,2b,lc,3b,2c,其中,la是底層流一的 第一塊,lb是底層流一的第二塊,2a是底層流二的第一塊等。在一些情形下,所述塊在長度 上可以不同。
[0012] 如在此所使用的,術語"去復制"是指以在系統(tǒng)或節(jié)點處物理上僅具有每個唯一組 塊的一個(或者,在非理想罕見的照管下為:幾個)副本的方式,在存儲系統(tǒng)中或在存儲節(jié)點 處邏輯上存儲數(shù)據(jù)的組塊、段或其它劃分的動作。例如,依次對照初始為空的存儲節(jié)點對 ABC,DBC和EBF (其中每個字母表示唯一組塊)去復制導致僅有一個B的物理副本,但三個 邏輯副本。
[0013] 例如,如果組塊被對照存儲位置去復制并且所述組塊之前未被存儲在所述存儲位 置,則所述組塊被物理上存儲在所述存儲位置。然而,如果組塊被對照存儲位置去復制并且 所述組塊已經(jīng)被存儲在所述存儲位置,則所述組塊不再次被物理上存儲在所述存儲位置。 作為又一個示例,如果多個組塊被對照存儲位置去復制并且僅所述組塊中的一些已經(jīng)被存 儲在所述存儲位置,則僅之前未被存儲在所述存儲位置的組塊作為去復制的一部分被物理 上存儲在所述存儲位置。
[0014] 如在此所使用的,術語"粘性路由"是指新數(shù)據(jù)存儲路由算法,新數(shù)據(jù)存儲路由算 法趨向于把大的連續(xù)片的新數(shù)據(jù)均存儲在單個后端節(jié)點,但均對照其看起來最相似的任何 一個后端節(jié)點對小片中的舊數(shù)據(jù)去復制。在一些情形下,新的段被對照當前指定的"粘性" 存儲節(jié)點去復制,當足夠的新數(shù)據(jù)被積聚在當前指定的"粘性"存儲節(jié)點時,該"粘性"存儲 節(jié)點被改變。
【具體實施方式】
[0015] 圖la示出了包括存儲系統(tǒng)101的示例多節(jié)點去復制架構100。盡管被描述為使用 稀疏索引方法,但布隆過濾器方法以及索引的其它方法可以被替代地使用。多節(jié)點架構1〇〇 包括耦合到前端節(jié)點l〇4a的客戶端102a。附加的客戶端102b,102c,102d以及附加的前 端節(jié)點l〇4b被作為示例示出,不過其它的示例不需要多個客戶端或前端節(jié)點。在其中具有 多個客戶端和/或前端節(jié)點的情形下,客戶端擁有相似于示例性客戶端l〇2a的功能性,并 且前端節(jié)點擁有相似于示例性前端節(jié)點l〇4a的功能性;換言之,在此描述的功能性可以由 并行操作的多個客戶端和前端節(jié)點執(zhí)行。在一些情形下,客戶端l〇2a_d和前端節(jié)點104a, l〇4b之間的關聯(lián)性可以隨著時間而改變。
[0016] 客戶端102a可以包括典型客戶端-服務器網(wǎng)絡中的服務請求程序,并且前端節(jié)點 104a可以包括服務器的處理單元以及其它功能元件,所述服務器把資源或服務提供到客戶 端102a。附加地,前端節(jié)點104a可以耦合到或包括機器可讀存儲設備112(如在圖lb中所 示的),諸如,壓縮盤、軟盤、基于閃存的存儲器、或其它非臨時性存儲設備。前端節(jié)點104a可 以執(zhí)行在機器可讀存儲設備112上所包含的指令,并且因此執(zhí)行以下所描述的各種功能。
[0017] 前端節(jié)點104a被示出為包括分段模塊105a。所述分段模塊105a執(zhí)行分塊和分段 算法以對從客戶端l〇2a和102b接收的進入的數(shù)據(jù)流分塊和分段。在一些情形下,分塊算 法可以按物理層約束(例如,任意位置寫入文件布局(WAFL)中的4千字節(jié)組塊大小)定義組 塊,而在其它情形下,組塊可以被使用"滑動組塊"算法定義,其中窗口被沿著數(shù)據(jù)流傳遞以 識別更多自然出現(xiàn)的內部文件邊界。分段算法把組塊分組成段,并且可以采用相似于分塊 算法可以如何選擇組塊邊界的方式選擇段邊界。例如,段邊界可以基于大小(例如,10兆字 節(jié)的段)或基于更多自然出現(xiàn)的或邏輯的組塊邊界。在可替代的示例中,分段模塊l〇5a可 以在本地駐留在客戶端102a-b或在本地部分地駐留在客戶端102a-b。在這些示例中,客戶 端102把組塊、哈希和/或段(而不是面向字節(jié)的數(shù)據(jù)流)發(fā)送到前端節(jié)點104a。
[0018] 前端節(jié)點104a被通過一個或多個網(wǎng)絡106耦合到多個后端節(jié)點108。網(wǎng)絡106 可以包括本領域已知的高速總線,并且后端節(jié)點108可以包括或被耦合到非易失性存儲設 備,諸如,硬盤驅動器、固態(tài)驅動器等。網(wǎng)絡106允許把請求、數(shù)據(jù)流、組塊、段等從前端節(jié)點 104a路由到一個或多個后端節(jié)點108例如來備份數(shù)據(jù)流。本領域的技術人員認識到數(shù)據(jù)流 可以包括文件、圖像、虛擬磁帶圖像、數(shù)據(jù)庫備份、文檔等。
[0019] 在一些示例中,客戶端102a期望對由備份代理生成的數(shù)據(jù)流去復制??蛻舳?02a 把數(shù)據(jù)流發(fā)送到前端節(jié)點l〇4a的分段模塊105a,分段模塊105a后續(xù)對數(shù)據(jù)流進行分塊和 分段。前端節(jié)點l〇4a為每個段的每個組塊計算哈希,并且因為這個示例使用稀疏索引方 法,所以通過采樣每個段的組塊的哈希計算針對每個段的鉤子。組成所述鉤子的所采樣的 哈希被稱為"鉤子哈希"。可替代地,與上面相似,客戶端l〇2a (例如,使用本地分段模塊) 對數(shù)據(jù)進行分塊和分段、以及計算每個段的每個組塊的哈希,以及計算用于每個段的鉤子。 可替代地,客戶端l〇2a把每個組塊的哈希分塊并發(fā)送到前端節(jié)點104a,并且前端節(jié)點104a 執(zhí)行分段和鉤子選擇。這些任務的其它劃分可以被等同地使用。
[0020] 如以上所解釋的,存儲系統(tǒng)101使用其中進入的數(shù)據(jù)的每個段被僅對照一個相對 自治的后端節(jié)點去復制的架構。在這個架構下,重要的是:具有相當大量舊組塊的每個段被 對照包含其舊組塊中的大多數(shù)的后端節(jié)點去復制。針對包含舊數(shù)據(jù)的段做到這樣的一種方 式是進行競拍,其中每個后端節(jié)點基于所述后端節(jié)點認為其有多大可能來很好地把所述段 去復制而"投標"。
[0021] 每個后端節(jié)點108維護相關聯(lián)的稀疏索引109,稀疏索引109把在那個特定后端節(jié) 點處存儲的段的鉤子映射到包含關于那些鉤子(未示出)的信息的索引。為了確保進入的段 被對照最適合的后端節(jié)點108去復制,前端節(jié)點104a把為數(shù)據(jù)流的每個段所計算的鉤子哈 希廣播到后端節(jié)點108。
[0022] 盡管參考去復制一個段來描述,但在實踐中,段可以被相繼地或采用某個并行性 程度(例如,管道可以與每個階段中的一個或多個段一起被使用)去復制。針對給定段,每個 后端節(jié)點108把投標返回到前端節(jié)點104a。投標可以由那個后端節(jié)點的稀疏索引中發(fā)現(xiàn)的 給定段的鉤子的數(shù)量構成。投標越大,給定段將對照那個后端節(jié)點很好地去復制(例如,需 要最少的物理拷貝)的可能性越大。
[0023] 然后,基于從后端節(jié)點108接收的投標,前端節(jié)點104a把給定段的剩余哈希發(fā)送 到生成最高投標的后端節(jié)點1〇8(為了在接下來的討論中簡單化,假設108a已生成高投標)。 投標可以是在那個后端節(jié)點108的稀疏索引109中出現(xiàn)的鉤子哈希的數(shù)量,或可以是給定 段是否可能被對照那個后端節(jié)點很好地去復制的另一個指標。
[0024] 如果布隆過濾器方法在這個示例架構中正在被使用,則稀疏索引109會被布隆過 濾器以及全組塊索引取代。可替代地,所述鉤子可以是所有給定段的哈希,以及所述投標可 以由在相關布隆過濾器中發(fā)現(xiàn)的鉤子的數(shù)量構成。
[0025] 高投標后端節(jié)點(108a)然后確定其尚未使對應的組塊被針對剩余哈希和鉤子哈 希中的哪些存儲,并且通知前端節(jié)點l〇4a針對未被存儲的組塊的哈希。例如,這個確定可 以通過把哈希與通過在其稀疏索引109中查找鉤子而發(fā)現(xiàn)的一個或多個索引相比較而發(fā) 生。布隆過濾器方法會是相似的,除了鉤子可以在全組塊索引中被查找之外(如果它們未被 在任何可用的所緩存的索引中發(fā)現(xiàn))。
[0026] 如果前端節(jié)點104a已執(zhí)行所述分塊和分段,則前端節(jié)點104a把被指示為未被存 儲的組塊發(fā)送到后端節(jié)點l〇8a,該后端節(jié)點108a然后存儲那些組塊。如果客戶端102a已 執(zhí)行所述分塊和分段,則前端節(jié)點l〇4a把針對未在后端節(jié)點108a存儲的組塊的哈希中繼 到客戶端l〇2a,并且所述客戶端102a把被指示為未存儲的組塊發(fā)送到前端節(jié)點104a,所述 前端節(jié)點l〇4a把那些組塊轉發(fā)到后端節(jié)點108a以便存儲??商娲兀蠖斯?jié)點108a可以 與客戶端l〇2a直接通信,旁路所述前端節(jié)點104a。
[0027] 如果沒有非零投標被接收,則所述段最可能是新數(shù)據(jù),并且因此可以對照例如最 少被加載的后端節(jié)點108 (S卩,具有最多可用存儲空間的后端節(jié)點)去復制。可替代地,在 后端節(jié)點108之間投標相等的情形下,所述段可以被存儲在具有相等投標的節(jié)點中的最少 被加載的后端節(jié)點108處。此外,如果所述投標相等并且后端節(jié)點108被相等地加載,則所 述段可以被存儲在具有最1?投標的后端節(jié)點中的隨機選擇或者輪換的后端節(jié)點108處。
[0028] 上面的去復制方案是來自客戶端102a的數(shù)據(jù)流可以如何被對照后端節(jié)點108去 復制的示例。數(shù)據(jù)流中的每個段可以被路由到不同的后端節(jié)點108 (S卩,對照其來去復制)。 然而,其它的數(shù)據(jù)去復制方案可以被相似地使用,并且可適用于本公開中所給定的示例。附 加地,如以上所解釋的,為了簡單化起見,參考客戶端102a和前端節(jié)點104a ;然而,客戶端 102b,102c,102d以及前端節(jié)點104b擁有與客戶端102a以及前端節(jié)點104a相同或相似 的功能性。
[0029] 圖lb示出了前端節(jié)點104a的一部分硬件架構的示例。前端節(jié)點104a包括f禹合 到機器可讀存儲設備112的一個或多個硬件處理器110。機器可讀存儲設備112可以包括 硬盤驅動器、壓縮盤、軟盤、基于閃存的存儲器、或其它非臨時性存儲設備。機器可讀存儲設 備112包括機器可讀指令114,當其由硬件處理器110執(zhí)行時,促使硬件處理器110執(zhí)行在 此描述的各種功能性和/或方法(例如,圖3的方法300)中的一些或全部。相似的硬件架 構可以在前端節(jié)點104b、客戶端102a-102d以及后端節(jié)點108處被實現(xiàn)。
[0030] 在一些情形下,每個客戶端102可以生成將在圖la中所示的存儲系統(tǒng)101處備份 的交錯或復用的數(shù)據(jù)(例如,由轉儲SQL服務器?數(shù)據(jù)庫產生的數(shù)據(jù)流)。當只使用以上所 解釋的基于投標的方法時,交錯數(shù)據(jù)的有效數(shù)據(jù)去復制可能是有問題的。
[0031] 圖2示出了在不同天備份的兩個交錯數(shù)據(jù)流的示例。陰影部分A-F例如表示來自 由備份過程交錯的不同底層數(shù)據(jù)流的塊,備份過程例如可以在客戶端102a上運行。在天1, 前端節(jié)點104a接收第一數(shù)據(jù)流(被標記為天1 ),并且把塊A、B和一部分C分塊和分段成段 1,以及把塊C的剩余部分以及塊D、E和F分塊和分段成段2。在一些情形下,存儲系統(tǒng)101 可能不知道塊的邊界,塊的邊界可能僅對備份過程是已知的。
[0032] 為了例示基于純投標的方法的潛在的低效率,假設前端節(jié)點104a把段1存儲在后 端節(jié)點108a上,并且把段2存儲在后端節(jié)點108b上。隨后,在天2,將備份的底層數(shù)據(jù)保持 相同或接近相同(例如,被交錯的底層數(shù)據(jù)流未改變或僅最小地改變)。然而,來自各種底層 數(shù)據(jù)流的塊由備份過程以不同于天1的次序交錯,這在數(shù)據(jù)交錯或復用過程中是普遍發(fā)生 的事情。因此,前端節(jié)點104a接收塊,并且把塊E、A、和一部分F分塊和分段成段3,以及把 塊F的剩余部分和塊D、C和B分塊和分段成段4。因此,段3和段4均包含之前已被橫跨 兩個后端節(jié)點108存儲的數(shù)據(jù)。當把段3存儲在后端節(jié)點108a或108b上時,這導致不良 的數(shù)據(jù)去復制(盡管在天1存儲的塊與在天2存儲的塊之間有相似性),因為僅那個段的一 小部分在任一后端節(jié)點108上被發(fā)現(xiàn)。相似的問題相對于段4存在。
[0033] 依據(jù)各種示例,前端節(jié)點104a使用"粘性路由"方法,"粘性路由"方法通過在不同 后端節(jié)點108中的每一個上分組大量新的鄰近交錯數(shù)據(jù)改進后續(xù)的去復制性能。仍參考圖 2,當段1和段2在天1被存儲時,確保它們被存儲在相同的后端節(jié)點(例如,后端節(jié)點108a) 上是有益的。如果段1和2初始存儲在后端節(jié)點108a上,則在天2,當段3將被存儲時,以 上基于投標的方法將促使前端節(jié)點l〇4a對照后端節(jié)點108a去復制段3。這導致沒有附加 的組塊被物理上存儲在后端節(jié)點l〇8a處,因為塊E、A和一部分F已經(jīng)被存儲在后端節(jié)點 108a上。因此,當后端節(jié)點108a對照后端節(jié)點108a去復制段3時,在天2最少的新數(shù)據(jù)被 存儲在后端節(jié)點l〇8a處。
[0034] 為了促進進入的數(shù)據(jù)流的粘性路由,前端節(jié)點104a、104b具有包括"投標閾值"和 "粘性閾值"的值。投標閾值是用于確定是否段很可能對照每個后端節(jié)點108不良地去復制 (即,段很可能大部分是新數(shù)據(jù))的機制的示例。粘性閾值是在當前被指定為粘性節(jié)點的后 端節(jié)點108被改變之前被處理的數(shù)據(jù)量上的上限。前端節(jié)點104a,104b還可以保持存儲 "粘性節(jié)點"和"處理量"值的數(shù)據(jù)結構l〇7a,107b。粘性節(jié)點指定當前的后端節(jié)點108,新 數(shù)據(jù)應被對照所述后端節(jié)點108去復制。
[0035] 在一個示例中的處理量可以是自從當前粘性節(jié)點最近變?yōu)楫斍罢承怨?jié)點以來對 照當前粘性節(jié)點去復制的數(shù)據(jù)量??商娲兀诹硪粋€示例中,處理量可以是自從當前粘性 節(jié)點最近變?yōu)楫斍罢承怨?jié)點以來由于數(shù)據(jù)被對照其而去復制而被物理上添加到當前粘性 節(jié)點的數(shù)據(jù)量??商娲兀诹硪粋€示例中,處理量可以簡單地是自從當前粘性節(jié)點最近變 為當前粘性節(jié)點以來對照任何后端節(jié)點去復制的數(shù)據(jù)量。許多其它變體是可能的;例如,處 理量可以僅包括新的大部分為新的段。
[0036] 當多個輸入數(shù)據(jù)流正在一次被處理時,對于當前被前端節(jié)點104a處理的每個輸 入數(shù)據(jù)流可以具有一個數(shù)據(jù)結構l〇7a,并且與給定流相關聯(lián)的處理量值可以僅指代作為那 個流的一部分的數(shù)據(jù)。因此,不同的流可以具有不同的粘性節(jié)點,其在不同的時間被切換。 盡管總體上被描述為僅在一個流上進行操作,但所述系統(tǒng)正常情況下可以被操作,許多流 一次被處理。
[0037] 本領域的技術人員認識到:通常,所處理的數(shù)據(jù)量提供了多少新數(shù)據(jù)最近已被存 儲在當如被指定為粘性節(jié)點的后端節(jié)點108處的指標,并且因此提供了估量新的后端節(jié)點 108何時應被指定為當前粘性節(jié)點的方式。確定何時把新的后端節(jié)點108指定為粘性節(jié)點 的其它方法在本公開的范圍內。
[0038] 投標閾值可以用實驗的方法確定,但通常應為低的數(shù)字,其會指示是否特定段很 可能會對照后端節(jié)點108中的一個不良地去復制。例如,如果投標閾值是2,則來自后端節(jié) 點108針對段的1或0的投標應指示所述段不是很可能對照那個后端節(jié)點108良好地去復 制,并且3或以上的投標應指示所述段很可能對照所述后端節(jié)點108至少在某種程度上去 復制。
[0039] 可替代地,投標閾值可以是百分比值(S卩,被去復制的組塊的數(shù)量的百分比閾值), 而不是整數(shù)值。為了簡單化的目的,其中投標等于閾值的情形未被討論,因為實際的投標閾 值可以簡單地被調整來提供正確的結果。
[0040] 粘性閾值應比來自不同底層流的兩個初始相鄰的塊將在未來的天中分離移動的 最大可能距離大。例如,在實踐中,這個值可以小于大約10吉字節(jié),因此限制了交錯數(shù)據(jù)的 初始段在后面的天中在大小上可以"涂抹出"的程度。因此,未來段的數(shù)據(jù)來自原始數(shù)據(jù)的 相似限制的部分。如果粘性閾值被設置為比這個大小大(例如,50吉字節(jié)),則未來段的數(shù)據(jù) 中的全部或大部分最初將被存儲在一個后端節(jié)點處是很可能的。以上所解釋的投標過程確 保了那個后端節(jié)點在多數(shù)情形下被成功地發(fā)現(xiàn)。然而,甚至在所述段橫跨兩個后端節(jié)點分 布的情形下,投標有助于確保去復制對照具有較大量的段的后端節(jié)點發(fā)生。在一些情形下, 粘性閾值可以基于一個或多個后端節(jié)點108的負載(S卩,可用存儲空間)而變化。
[0041] 所指定的粘性節(jié)點可以隨著時間而改變,例如當所處理的數(shù)據(jù)到達所述粘性閾值 時。在那個點處,所指定的粘性節(jié)點可以被改變并且處理量復位到零。初始地,在數(shù)據(jù)已經(jīng) 被存儲在后端節(jié)點108之前,所述粘性節(jié)點可以被任意地設置。
[0042] 圖3示出了用于數(shù)據(jù)流的粘性路由的說明性方法300。在一些情形下,方法300可 以由一個或多個硬件處理器執(zhí)行在圖lb中所示的機器可讀指令而執(zhí)行。另外,方法的各種 步驟可以由圖la的客戶端、前端節(jié)點、以及后端節(jié)點執(zhí)行,并且可以采用與所示出的那個 不同的次序來執(zhí)行。方法300開始于接收關于多個組塊的信息(塊302)。所述信息可以例 如從在客戶端102或前端節(jié)點104上運行的分段模塊接收,并且可以包括:哈希、鉤子、或包 括其它組塊標識信息的它們的組合。
[0043] 方法300繼續(xù)確定多個后端節(jié)點108中的一個或多個是否已經(jīng)存儲多于閾值量的 多個數(shù)據(jù)組塊(塊304)。如上面所解釋的,這可以通過把與多個數(shù)據(jù)組塊相關聯(lián)的鉤子廣播 到全部后端節(jié)點、從每個后端節(jié)點接收投標、并且把所述投標與投標閾值相比較來確定。如 果任何投標都超過了投標閾值,則所述確定可以采用肯定的方式來做出。特別地,如果其投 標超過投標閾值,則后端節(jié)點108可以被確定為已經(jīng)存儲超過閾值量的多個數(shù)據(jù)組塊。投 標閾值可以是絕對的(例如,所述投標超過2 ?)或相對的(例如,所述鉤子的至少5%被發(fā) 現(xiàn)?)。
[0044] 每個后端節(jié)點108可以通過訪問一個或多個索引或過濾器來生成其投標。例如, 其投標可以由它在其稀疏索引或布隆過濾器中發(fā)現(xiàn)的廣播鉤子的數(shù)量構成。所述投標例如 可以通過那個后端節(jié)點剩下了多少空間被加權。
[0045] 在另一個示例中,確定可以通過在不進行廣播的情形下訪問與多個后端節(jié)點108 相關聯(lián)的一個或多個索引或過濾器來做出。例如,后端節(jié)點的布隆過濾器的副本在每個前 端節(jié)點106上可以是可用的。在一些情形下,確定可以經(jīng)由試探法完成,并且因此可能不總 是正確的。例如,存儲系統(tǒng)101可能不正確地推斷出段是新的,因為其舊組塊的哈希未被選 擇為鉤子。
[0046] 如果確定至少閾值量的多個數(shù)據(jù)組塊已經(jīng)被存儲在后端節(jié)點108處(塊306),則 所述多個數(shù)據(jù)組塊對照已被確定為已經(jīng)存儲多于閾值量的多個數(shù)據(jù)組塊的后端節(jié)點108 中的一個被去復制(塊308),并且方法300結束。有許多方式來選擇那些超過閾值的后端節(jié) 點108,從而對照其來去復制給定的段。例如,確定為已經(jīng)存儲多個數(shù)據(jù)組塊中的大部分的 多個后端節(jié)點108中的一個可以被選擇。這可以通過選擇返回最高投標值的后端節(jié)點108 中的一個來完成。
[0047] 然而,如果確定多個后端節(jié)點108中的任何一個都沒有已經(jīng)存儲多于閾值量的多 個數(shù)據(jù)組塊(塊306),則所述多個數(shù)據(jù)組塊大部分是之前未被存儲的新組塊。因此,方法 300繼續(xù)對照被指定為粘性節(jié)點的后端節(jié)點108去復制多個數(shù)據(jù)組塊(塊310)。
[0048] 不是所有新的數(shù)據(jù)被發(fā)送到相同的后端節(jié)點108對于有效負載平衡而言是令人 期望的。因此,方法300繼續(xù)把所處理的數(shù)據(jù)量值與粘性閾值相比較(塊312)。如果所處理 的數(shù)據(jù)量小于或等于粘性閾值,則當前粘性節(jié)點應存儲更多新的數(shù)據(jù),并且因此方法結束。
[0049] 然而,如果所處理的數(shù)據(jù)量大于粘性閾值,則不同的后端節(jié)點108被指定為粘性 節(jié)點(塊314),并且方法結束。與使用簡單的粘性閾值以用于確定何時來改變所指定的粘性 節(jié)點相比,響應于正在被處理的數(shù)據(jù)量的其它方法可以被相似地使用。
[0050] 存儲系統(tǒng)101可以在數(shù)據(jù)被處理時維護當前所處理的數(shù)據(jù)量值,而不是每當當前 所處理的數(shù)據(jù)量值被需要時重新計算當前所處理的數(shù)據(jù)量值。即,當數(shù)據(jù)被處理時,所處理 數(shù)據(jù)的量值可以被適當?shù)馗隆?br>
[0051] 在當前所指定的粘性節(jié)點被改變時,當前所處理的數(shù)據(jù)量值可以被復位到零;這 導致所處理的數(shù)據(jù)量僅包括自從當前所指定粘性節(jié)點最后變?yōu)樗付ǖ恼承怨?jié)點以來所 處理的數(shù)據(jù)。在一個示例中,當數(shù)據(jù)被對照當前所指定的粘性節(jié)點去復制時,那個數(shù)據(jù)的大 小被添加到當前所處理的量值。在這種情形下,所處理的數(shù)據(jù)量僅包括已被對照當前所指 定的粘性節(jié)點去復制的數(shù)據(jù)。它事實上可以是:自從當前所指定粘性節(jié)點最后變?yōu)樗付?的粘性節(jié)點以來已被對照當前所指定的粘性節(jié)點去復制的數(shù)據(jù)量。
[0052] 在另一個示例中,當數(shù)據(jù)被對照當前所指定的粘性節(jié)點去復制時,僅已被物理上 添加到當前所指定粘性節(jié)點的那個數(shù)據(jù)的部分的大小被添加到所處理的數(shù)據(jù)量值。在這種 情形下,所處理的數(shù)據(jù)量僅包括已被已被物理上添加到當前所指定粘性節(jié)點的數(shù)據(jù)。它事 實上可以是:自從當前所指定粘性節(jié)點最后變?yōu)樗付ǖ恼承怨?jié)點以來已被物理上添加到 當前所指定的粘性節(jié)點的數(shù)據(jù)量。在另一個示例中,當數(shù)據(jù)被對照任何后端節(jié)點108去復 制時,那個數(shù)據(jù)的大小被添加到所處理的數(shù)據(jù)量值。它事實上可以是:自從當前所指定粘性 節(jié)點最后變?yōu)樗付ǖ恼承怨?jié)點以來已被去復制的數(shù)據(jù)量。
[0053] 在圖la中所示出的兩個后端節(jié)點之外,可以有多個后端節(jié)點。在這種情形下,當 選擇新的后端節(jié)點作為當前所指定的粘性節(jié)點時,選擇必須被做出。最少被加載的后端節(jié) 點(例如,具有最多可用存儲空間的后端節(jié)點)可以被選擇,或者,如果具有多個最少被加載 的后端節(jié)點,則所更新的粘性節(jié)點可以被從最少被加載的后端節(jié)點中隨機地選擇??商娲?地,后端節(jié)點108可以采用循環(huán)(round robin)的方式選擇,其中最近最少被指定為粘性節(jié) 點的后端節(jié)點接下來被選擇。許多其它的方法存在;通常來說,較輕被加載以及最近最少被 使用的后端節(jié)點應是優(yōu)選的。
[0054] 當一次處理多個數(shù)據(jù)流時(S卩,方法300的多個實例并行地發(fā)生),某些附加的考慮 開始起作用。特別地,橫跨后端節(jié)點108加載平衡使得不是所有的流一次把新數(shù)據(jù)都發(fā)送 到相同的后端節(jié)點108是有用的。做到這樣的一種方式為:"懲罰"當前作為用于某個其它 數(shù)據(jù)流的所指定粘性節(jié)點的節(jié)點;懲罰可以取決于那個節(jié)點是用于多少個這種流的當前所 指定粘性節(jié)點。
[0055] 例如,針對每個后端節(jié)點108,有效可用存儲空間可以通過從其總的可用存儲空間 減去其已經(jīng)被使用的存儲空間以及由現(xiàn)有數(shù)據(jù)流在其上"保留"的存儲空間量二者來計算, 其中,數(shù)據(jù)流在其當前指定的粘性節(jié)點上"保留"與粘性閾值減去其處理量值相等的空間 量。存儲系統(tǒng)101可以通過在具有最高有效可用存儲空間的后端節(jié)點108之間選擇并且通 過最近最少被使用決勝來選擇用作粘性節(jié)點的下一個后端節(jié)點108。在一些示例中,如果該 后端節(jié)點108尤其是具有最多可用空間的節(jié)點,與舊的指定粘性節(jié)點相同的后端節(jié)點108 可以被選擇為新指定的粘性節(jié)點。
[0056] 以上的方法300使大鄰近片的新數(shù)據(jù)能夠均被存儲在單個的后端節(jié)點。在其中存 儲的數(shù)據(jù)被交錯情形下,在后續(xù)數(shù)據(jù)交錯期間(例如,在后續(xù)的天)塊的有限重新定序對數(shù) 據(jù)去復制的效率具有減少的影響,因為在段中所包含的塊部分很可能在單個后端節(jié)點108 處被發(fā)現(xiàn)。更有可能的是,存儲系統(tǒng)101很可能確定所述后端節(jié)點是去復制那個段對照的 最佳后端節(jié)點,從而導致增加的去復制性能。
[0057] 如以上所解釋的,數(shù)據(jù)去復制系統(tǒng)可以被擴展來包括多個后端節(jié)點,同時有效分 布交錯數(shù)據(jù)以改進去復制性能,從而最小化在數(shù)據(jù)備份過程期間所消耗的存儲空間的量。 此外,用于分布不是新的段的基于投標的方案可以采用與單個后端節(jié)點數(shù)據(jù)去復制和備份 系統(tǒng)一致的方式被使用。
[0058] 以上的討論意圖說明本發(fā)明的原則和各種示例。一旦以上的公開被完全認識,眾 多的變化和修改對于本領域的技術人員將變得顯然。例如,確定數(shù)據(jù)是否被存儲在后端節(jié) 點處可以包括:確定數(shù)據(jù)是否實際在后端節(jié)點處存在,或者例如在使用可以返回假陽性的 布隆過濾器的過程中,確定數(shù)據(jù)在后端節(jié)點處存在是否是很可能的。確定數(shù)據(jù)是被存儲還 是很可能被存儲在后端節(jié)點處的其它方法對于本領域的技術人員是顯然的。旨在接下來的 權利要求被解釋為包括所有這種變化和修改。
【權利要求】
1. 一種方法,包括: 接收關于多個數(shù)據(jù)組塊的信息; 確定多個后端節(jié)點中的一個或多個是否已經(jīng)存儲多于閾值量的多個數(shù)據(jù)組塊,所述多 個后端節(jié)點中的一個被指定為粘性節(jié)點; 響應于確定所述多個后端節(jié)點中的任何一個沒有已經(jīng)存儲多于閾值量的多個數(shù)據(jù)組 塊,對照被指定為粘性節(jié)點的后端節(jié)點對所述多個數(shù)據(jù)組塊去復制;以及 響應于正在被處理的數(shù)據(jù)量,把不同的后端節(jié)點指定為粘性節(jié)點。
2. 如權利要求1所述的方法,進一步包括:訪問與所述多個后端節(jié)點相關聯(lián)的一個或 多個索引或過濾器,從而確定所述多個后端節(jié)點中的一個或多個是否已經(jīng)存儲多于閾值量 的多個數(shù)據(jù)組塊。
3. 如權利要求1所述的方法,進一步包括:響應于由粘性節(jié)點處理的數(shù)據(jù)量大于粘性 閾值,把不同的后端節(jié)點指定為粘性節(jié)點。
4. 如權利要求1所述的方法,其中把不同的后端節(jié)點指定為粘性節(jié)點進一步包括:把 具有最大可用存儲空間的后端節(jié)點指定為粘性節(jié)點,或者把最近最少被指定為粘性節(jié)點的 后端節(jié)點指定為粘性節(jié)點。
5. 如權利要求1所述的方法,進一步包括:響應于所處理的數(shù)據(jù)量大于粘性閾值并且 一個以上的后端節(jié)點具有最大可用存儲空間,把具有最大可用存儲空間的后端節(jié)點中的一 個指定為粘性節(jié)點。
6. 如權利要求1所述的方法,進一步包括:響應于確定所述多個后端節(jié)點中的一個或 多個已經(jīng)存儲多于閾值量的多個數(shù)據(jù)組塊,對照已被確定為已經(jīng)存儲多于閾值量的多個數(shù) 據(jù)組塊的所述多個后端節(jié)點中的一個對所述多個數(shù)據(jù)組塊去復制。
7. 如權利要求6所述的方法,進一步包括:響應于確定所述多個后端節(jié)點中的一個或 多個已經(jīng)存儲多于閾值量的多個數(shù)據(jù)組塊,對照已被確定為存儲所述多個后端節(jié)點的多個 數(shù)據(jù)組塊中的大部分的所述多個后端節(jié)點中的一個對所述多個數(shù)據(jù)組塊去復制。
8. 如權利要求1所述的方法,其中所處理的數(shù)據(jù)量僅包括自從當前所指定的粘性節(jié)點 最后變?yōu)樗付ǖ恼承怨?jié)點以來所處理的數(shù)據(jù)。
9. 如權利要求1所述的方法,其中所處理的數(shù)據(jù)量僅包括已被對照當前所指定的粘性 節(jié)點去復制的數(shù)據(jù)。
10. 如權利要求1所述的方法,其中所處理的數(shù)據(jù)量僅包括已被物理上添加到當前所 指定的粘性節(jié)點的數(shù)據(jù)。
11. 一種系統(tǒng),包括: 前端節(jié)點;以及 多個后端節(jié)點,其被經(jīng)由總線耦合到所述前端節(jié)點; 所述前端節(jié)點用于: 接收關于多個數(shù)據(jù)組塊的信息; 確定多個后端節(jié)點中的一個或多個是否已經(jīng)存儲多于閾值量的多個數(shù)據(jù)組塊,所述多 個后端節(jié)點中的一個被指定為粘性節(jié)點; 響應于確定所述多個后端節(jié)點中的任何一個沒有已經(jīng)存儲多于閾值量的多個數(shù)據(jù)組 塊,對照被指定為粘性節(jié)點的后端節(jié)點對所述多個數(shù)據(jù)組塊去復制;以及 響應于正在被處理的數(shù)據(jù)量,把不同的后端節(jié)點指定為粘性節(jié)點。
12. 如權利要求11所述的系統(tǒng),其中當所述前端節(jié)點把不同的后端節(jié)點指定為粘性節(jié) 點時,所述前端節(jié)點把具有最大可用存儲空間的后端節(jié)點指定為粘性節(jié)點,或者把最近最 少被指定為粘性節(jié)點的后端節(jié)點指定為粘性節(jié)點。
13. 如權利要求11所述的系統(tǒng),其中所述前端節(jié)點被配置成:響應于所處理的數(shù)據(jù)量 大于粘性閾值并且一個以上的后端節(jié)點具有最大可用存儲空間,把具有最大可用存儲空間 的后端節(jié)點中的一個指定為粘性節(jié)點。
14. 如權利要求11所述的系統(tǒng),其中所述前端節(jié)點被配置成:響應于確定所述多個后 端節(jié)點中的一個或多個已經(jīng)存儲多于閾值量的多個數(shù)據(jù)組塊,對照已被確定為已經(jīng)存儲多 于閾值量的多個數(shù)據(jù)組塊的所述多個后端節(jié)點中的一個對所述多個數(shù)據(jù)組塊去復制。
15. -種包含機器可讀指令的機器可讀存儲設備,當所述機器可讀指令由一個或多個 硬件處理器執(zhí)行時,促使所述一個或多個硬件處理器來: 接收關于多個數(shù)據(jù)組塊的信息; 確定多個后端節(jié)點中的一個或多個是否已經(jīng)存儲多于閾值量的多個數(shù)據(jù)組塊,所述多 個后端節(jié)點中的一個被指定為粘性節(jié)點; 響應于確定所述多個后端節(jié)點中的任何一個沒有已經(jīng)存儲多于閾值量的多個數(shù)據(jù)組 塊,對照被指定為粘性節(jié)點的后端節(jié)點對所述多個數(shù)據(jù)組塊去復制;以及 響應于正在被處理的數(shù)據(jù)量,把不同的后端節(jié)點指定為粘性節(jié)點。
【文檔編號】G06F12/00GK104067239SQ201280068663
【公開日】2014年9月24日 申請日期:2012年2月2日 優(yōu)先權日:2012年2月2日
【發(fā)明者】M.D.利利布里奇, K.埃什希, M.R.沃特金斯 申請人:惠普發(fā)展公司,有限責任合伙企業(yè)