專利名稱:存儲系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及存儲系統(tǒng),并且具體而言涉及具有重復存儲消除功能的存儲系統(tǒng)。
背景技術:
輔助存儲系統(tǒng)的去重(deduplication)目前已在研究和商用應用中引起廣泛關注。通過識別數(shù)據(jù)中相同的塊并且僅存儲這種塊的單個副本,去重使得存儲容量要求顯著降低。以前的結果已經(jīng)顯示在備份數(shù)據(jù)中存在明顯重復。這并不奇怪,因為相同系統(tǒng)的后續(xù)備份通常非常相似。去重存儲系統(tǒng)在多個維度上不同。一些系統(tǒng)僅對相同的文件進行去重,而其他系統(tǒng)將文件分割成更小的塊并且對這些塊進行去重。本發(fā)明將關注塊級別的去重,因為備份應用典型地對來自被備份到大型tar類的檔案文件中的文件系統(tǒng)的單獨的文件進行聚合。在文件級別上的去重將不會提供多少空間減少。塊可以具有固定的或可變的尺寸,其中典型地由內(nèi)容定義的組塊產(chǎn)生尺寸可變的塊。顯示出使用內(nèi)容定義的尺寸可變的塊顯著提高了去重效率。大部分系統(tǒng)消除相同的塊,而一些系統(tǒng)僅需要塊存儲是類似的,并且有效地存儲差異。雖然這可以提高去重效率,但是其需要從盤讀取以前的塊,這使得難以傳遞高的寫吞吐量。本發(fā)明因此將關注本文中的相同的塊的去重。(去重存儲的概述)典型地通過由備份應用創(chuàng)建的長數(shù)據(jù)流提供備份存儲系統(tǒng)。這些流典型地是檔案文件或虛擬磁帶圖像。數(shù)據(jù)流被分割成塊,并且針對每個塊計算安全哈希(例如SHA-1)。然后將這些哈希值與以前存儲在系統(tǒng)中的塊的哈希值進行比較。由于極不可能找到安全哈希函數(shù)的哈希沖突,所以具有相同哈希值的塊可以假設是相同的(所謂的通過哈希比較)。因此,如果找到具有相同哈希的塊,則認為該塊是重復的并且不存儲該塊。構成該數(shù)據(jù)流的全部塊的標識符被存儲并且可用于重構讀取的原始數(shù)據(jù)流。引用列表非專利文獻NPL I:DUBNICKI, C.,GRYZ, L.,HELDT, L.,KACZMARCZYK, Μ.,KILIAN, ff.,STRZELCZAK, P., SZCZEPKOWSKI, J., UNGUREANU, C., AND WELNICKI, Μ., HYDRAstor:a Scalable Secondary Storage。在 7th USENIX Conference on File and StorageTechnologyies(San Francisco, California, USA, February 2009)。NPL 2:ZHU, B.,LI, K.,AND PATTERSON, H.,Avoiding the disk bottleneck inthe data domain deduplication file system。在FAST’OS:the 6th USENIX Conferenceon File and Storage Technologyies (Berkeley, CA, USA,2008), USENIX Association,pp.1-14。NPL 3:BIRK, Y., Random raids with selective exploitation of redundancyfor high performance video servers,671—681。
NPL 4:UNGUREANU, C.,ARANYA, A.,GOKHALE, S.,RAGO, S.,ATKIN, B.,BOHRA, A.,DUBNICKI, C., AND CALKOffSKI, G., Hydrafs:A high-throughput file system for thehydrastor content addressable storage system。在 FAST’ 10:Proceedings of the8th USENIX Conference on File and Storage Technologies(Berkeley, CA, USA, 2010),USENIX Association, pp.225-239。NPL 5:DUBNICKI, C.,UNGUREANU, C.,AND KILIAN, ff.,F(xiàn)PN:A DistributedHash Table for Commercial Applications。 在 Proceedings of the ThirteenthInternational Symposium on High-Performance Distributed Computing(HPDC-132004)(Honolulu, Hawaii, June 2004),pp.120-128。NPL 6:BEN-OR, M., Another advantage of free choice(extended abstract):Completely asynchronous agreement protocols。 在 PODCJ 83:Proceedings of thesecond annual ACM symposium on Principles of distributed computing(New York,NY,USA,1983),ACM,pp.27-30。NPL 7:LAMPORT, L., The part-time parIlamentACM Trans.Comput.Syst.16,2(1998),133-169。
發(fā)明內(nèi)容
技術問題(基于盤的去重的性能挑戰(zhàn))為了實現(xiàn)大規(guī)模去重存儲系統(tǒng),必須克服一些重大的性能挑戰(zhàn)。大型系統(tǒng)存儲太多的塊,因而它們的哈希不適應主存儲器。使用哈希的簡單的盤上索引將由于進行索引查找而導致性能非常差,索引查找實際上是隨機讀取。一些系統(tǒng)通過臨時存儲全部輸入塊并且離線完成去重來解決該問題。由于預先已知全部新塊,所以可以按照哈希次序重新排列哈希查找,并且可以成批地有效地執(zhí)行查找。但是,離線去重需要用于臨時塊存儲的大的、高性能的暫存區(qū)域。另一方面,內(nèi)嵌(inline)去重系統(tǒng)可以避免將重復的塊寫在一起,從而在典型的重復性高的情況下提供更高的寫性倉泛。大部分系統(tǒng)(如NPL I中公開的系統(tǒng))通過依靠流局域性觀察來解決該問題一典型而言,連續(xù)備份中的重復塊按照在與來自原始備份的那些塊相同的順序出現(xiàn)。通過保留備份流的局域性,可以有效地預取許多重復塊的哈希。通過使用存儲器中的布隆過濾器,或者通過接受近似重復以便以一些重復可能性換取更好的性能,可以有效地識別非重復的塊。另一個問題在于由于流分段而導致流讀取性能降低。由于重復塊被存儲在與最新寫入的塊不同的位置中,所以看起來大的順序讀取被內(nèi)在地分解成多個較短的讀取。在進行精確去重的系統(tǒng)中,如果兩個流被存儲在該系統(tǒng)中,其中一個流是另一個流的隨機置換,則該問題是固有的,這些流中的至少一個流將必須發(fā)出少量的、隨機讀取。實際上,允許有效去重的相同流局域性觀察使得該最壞情況不可能發(fā)生。但是,隨著分段典型地隨著系統(tǒng)的年齡增長,應該注意內(nèi)部局域性不要進一步被差的數(shù)據(jù)放置減少。(可縮放全局去重)
如NPL 2中描述的集中化系統(tǒng)例如在系統(tǒng)尺寸方面具有有限的可縮放性??梢越⒍鄠€獨立的系統(tǒng)以對容量進行縮放,但是這阻礙了它們之間的去重,并且通過向孤立的存儲島安裝備份增加了維護負擔。一些系統(tǒng)(NPL I)通過基于哈希將塊分配給存儲節(jié)點來引入可縮放的全局范圍的去重。這有效地將大型塊索引分到全部節(jié)點上,其中每個節(jié)點負責哈??臻g的一部分。雖然該架構在單客戶端設置中提供可縮放性和良好的性能,但是當多個客戶端同時讀取或?qū)懭霑r可能出現(xiàn)性能問題。流局域性的降級由于塊均勻地分布在全部節(jié)點上,所以每個節(jié)點平均接收按系統(tǒng)尺寸因子縮小的輸入流的一部分。這導致大型系統(tǒng)中流局域性的顯著降低——在原始流中出現(xiàn)的任意流局域性也將在每個節(jié)點之中按照該因子降低。讀取回流的任意重要的部分需要該系統(tǒng)中的全部節(jié)點的參與。如果許多客戶端試圖同時讀取回(不同的)流,則它們將必須在每個節(jié)點上競爭相同的資源。為了維持高吞吐量,存儲節(jié)點將會需要與客戶端的數(shù)量成正比的讀取高速緩沖存儲器尺寸——這被稱為緩沖器激增問題(NPL 3)。流局域性中的降級使該問題更復雜,這降低了預取的效率。結果,在非常大型的系統(tǒng)中,原始流的順序讀取將退化成存儲節(jié)點之中的隨機讀取。相同的問題適用于去重查找一現(xiàn)有的塊的哈希的預取也將退化成隨機讀取。但是,對于去重而言負面影響較不明顯,因為哈希比塊數(shù)據(jù)小得多并且將更易于適應尺寸適中的高速緩沖存儲器。對稱網(wǎng)絡吞吐量由于塊到存儲節(jié)點的均勻分布,全部節(jié)點從客戶端接收大致相同數(shù)目的塊。當客戶端的數(shù)目增長時,網(wǎng)絡吞吐量要求也增長,以容納全部非重復塊寫入。結果,具有高的對稱式點對點吞吐量的網(wǎng)絡有必要對于該系統(tǒng)提供高的寫入吞吐量。如下文將討論的,針對大型系統(tǒng)建立這種網(wǎng)絡是困難的。如此,本發(fā)明的一個示例性的目的在于防止具有去重的存儲系統(tǒng)的性能惡化,這是如上文所述的要解決的問題。問題的解決方案根據(jù)本發(fā)明的一個方面,一種存儲系統(tǒng)包括數(shù)據(jù)存儲控制單元,該數(shù)據(jù)存儲控制單元以分布式的方式在多個存儲設備中存儲通過分割存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的多個單元,并且當試圖在存儲設備中存儲具有與已被存儲在存儲設備中的存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的數(shù)據(jù)內(nèi)容的另一條存儲目標數(shù)據(jù)時,該數(shù)據(jù)存儲控制單元通過參考已被存儲在該存儲設備中的該存儲目標數(shù)據(jù)作為該另一條存儲目標數(shù)據(jù)來執(zhí)行重復存儲消除。該數(shù)據(jù)存儲控制單元在該多個存儲設備中的特定存儲設備中存儲通過分割該存儲目標數(shù)據(jù)而生成的、該存儲目標數(shù)據(jù)的塊數(shù)據(jù)的多個連續(xù)單元,在該特定存儲設備中彼此關聯(lián)地存儲基于該塊數(shù)據(jù)的數(shù)據(jù)內(nèi)容的特征數(shù)據(jù)和表示該塊數(shù)據(jù)在該特定存儲設備中的存儲位置的存儲位置信息以作為存儲位置指定表,并且彼此關聯(lián)地存儲用于標識該特定存儲設備的存儲設備標識信息和被存儲在該特定存儲設備中的該塊數(shù)據(jù)的該特征數(shù)據(jù)以作為存儲設備指定表。根據(jù)本發(fā)明的另一個方面,一種存儲程序的計算機可讀介質(zhì)是存儲如下程序的介質(zhì),其中該程序包括指令,該指令用于使信息處理設備實現(xiàn)數(shù)據(jù)存儲控制單元,該數(shù)據(jù)存儲控制單元以分布式的方式在多個存儲設備中存儲通過分割存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的多個單元,并且當試圖在存儲設備中存儲具有與已被存儲在存儲設備中的存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的數(shù)據(jù)內(nèi)容的另一條存儲目標數(shù)據(jù)時,該數(shù)據(jù)存儲控制單元通過參考已被存儲在該存儲設備中的該存儲目標數(shù)據(jù)作為該另一條存儲目標數(shù)據(jù)來執(zhí)行重復存儲消除,其中該數(shù)據(jù)存儲控制單元在該多個存儲設備中的特定存儲設備中存儲通過分割該存儲目標數(shù)據(jù)而生成的、該存儲目標數(shù)據(jù)的塊數(shù)據(jù)的多個連續(xù)單元,在該特定存儲設備中彼此關聯(lián)地存儲基于該塊數(shù)據(jù)的數(shù)據(jù)內(nèi)容的特征數(shù)據(jù)和表示該塊數(shù)據(jù)在該特定存儲設備中的存儲位置的存儲位置信息以作為存儲位置指定表,并且彼此關聯(lián)地存儲用于標識該特定存儲設備的存儲設備標識信息和被存儲在該特定存儲設備中的該塊數(shù)據(jù)的該特征數(shù)據(jù)以作為存儲設備指定表。根據(jù)本發(fā)明的另一個方面,一種數(shù)據(jù)存儲方法是如下方法,該方法用于以分布式的方式在多個存儲設備中存儲通過分割存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的多個單元,并且當試圖在存儲設備中存儲具有與已被存儲在存儲設備中的存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的數(shù)據(jù)內(nèi)容的另一條存儲目標數(shù)據(jù)時,通過參考已被存儲在該存儲設備中的該存儲目標數(shù)據(jù)作為該另一條存儲目標數(shù)據(jù)來執(zhí)行重復存儲消除。該方法包括在該多個存儲設備中的特定存儲設備中存儲通過分割該存儲目標數(shù)據(jù)而生成的、該存儲目標數(shù)據(jù)的塊數(shù)據(jù)的多個連續(xù)單元,在該特定存儲設備中彼此關聯(lián)地存儲基于該塊數(shù)據(jù)的數(shù)據(jù)內(nèi)容的特征數(shù)據(jù)和表示該塊數(shù)據(jù)在該特定存儲設備中的存儲位置的存儲位置信息以作為存儲位置指定表,并且彼此關聯(lián)地存儲用于標識該特定存儲設備的存儲設備標識信息和被存儲在該特定存儲設備中的該塊數(shù)據(jù)的該特征數(shù)據(jù)以作為存儲設備指定表。本發(fā)明的有益效果由于如上所述配置本發(fā)明,所以本發(fā)明能夠改善具有去重的存儲系統(tǒng)的性能。
圖1是用于顯示第一示例性實施方式中的指針塊中的塊地址類型的表;圖2是用于顯示該第一示例性實施方式中由于系統(tǒng)尺寸增大而導致的負載對寫帶寬的影響的圖表;圖3是用于顯示該第一示例性實施方式中由于系統(tǒng)尺寸增大而導致的負載對寫帶寬的影響的圖表;圖4是用于顯示包括第二示例性實施方式的存儲系統(tǒng)的整個系統(tǒng)的配置的框圖;圖5是用于示意性地顯示該第二示例性實施方式的存儲系統(tǒng)的配置的框圖;圖6是用于顯示該第二示例性實施方式的訪問節(jié)點的配置的功能框圖;圖7是用于說明圖5中公開的存儲系統(tǒng)中的數(shù)據(jù)存儲過程的方面的說明視圖;圖8是用于說明圖5中公開的存儲系統(tǒng)中的數(shù)據(jù)存儲過程的該方面的說明視圖;圖9是用于說明圖6中公開的存儲系統(tǒng)中的數(shù)據(jù)獲取過程的方面的說明視圖;圖10是用于說明圖6中公開的存儲系統(tǒng)中的數(shù)據(jù)獲取過程的該方面的說明視圖;圖11是用于顯示根據(jù)補充注釋I的存儲系統(tǒng)的配置的框圖。
具體實施例方式<第一示例性實施方式>本發(fā)明引入了用于具有全局內(nèi)嵌去重的可縮放存儲系統(tǒng)的新的架構。通過將數(shù)據(jù)存儲與對重復進行的索引分離,所提出的系統(tǒng)改進了現(xiàn)有系統(tǒng)的缺點:恢復性能隨著系統(tǒng)尺寸的降級以及全部節(jié)點之間的統(tǒng)一帶寬的要求。如下組織第一示例性實施方式。首先,將介紹設計該系統(tǒng)時考慮的要求和前提。然后,將描述實現(xiàn)那些要求的架構,并且將說明關于所提出的數(shù)據(jù)組織的關鍵操作。然后,將評價所提出的系統(tǒng)如何傳遞所需特征,并且將提供在它的設計期間面臨的折中。(要求和前提)在描述所提出的系統(tǒng)架構之前,我們將概述其將運行的環(huán)境的要求和前提。(存儲系統(tǒng)要求概述)存儲系統(tǒng)的主要應用將是備份。為了最大化在去重方面的節(jié)省,存儲系統(tǒng)將存儲許多客戶端系統(tǒng)的備份。該環(huán)境需要高的容量和可靠性,并且具有一些唯一的性能特點。由于備份必須在短的備份窗口中完成,所以非常高的聚合寫吞吐量是必要的。該系統(tǒng)主要是用來寫的——寫數(shù)據(jù)比讀數(shù)據(jù)頻繁得多。讀主要發(fā)生在當備份系統(tǒng)遇到故障時的恢復期間。由于恢復該系統(tǒng)的時間通常是至關重要的,所以合理高的讀吞吐量是必要的。由于上述原因,由存儲系統(tǒng)實現(xiàn)的去重應該滿足以下標準:塊級別相同的塊尺寸可變的塊,具有由內(nèi)容定義的組塊設置的塊邊界通過哈希比較精確內(nèi)嵌分布式全局范圍。為了保持成本低下,該系統(tǒng)應該由商用機器構造并且應該可縮放到多達100/1000個節(jié)點,對應于原存儲的拍字節(jié)。接口系統(tǒng)必須向客戶端機器提供工業(yè)標準的備份接口。在盤到盤備份的環(huán)境中,這通常是作為NAS (網(wǎng)絡附屬存儲)或VTL (虛擬磁帶庫)輸出的文件系統(tǒng)。由于NAS或VTL實現(xiàn)的細節(jié)與本發(fā)明的主題無關,因此我們將關注更簡單的塊存儲接口,與NPL I中的描述類似??梢栽谠搲K存儲之上建立文件系統(tǒng),如NPL 4中所述的。簡而言之,塊存儲允許存儲數(shù)據(jù)的尺寸可變的塊。塊是不變的,并且它們可以通過由塊存儲生成的地址而被獲取。通過向具有相同內(nèi)容的塊分配相同的地址來完成去重??梢允褂锰厥庵羔槈K將單獨的數(shù)據(jù)塊組織成大型數(shù)據(jù)流。這些塊包括它們指向的塊的地址——無論是常規(guī)數(shù)據(jù)塊還是其他指針塊。與常規(guī)的塊類似,指針塊是不變的并且對相同的塊進行去重。可以構造葉子中具有常規(guī)數(shù)據(jù)塊的指針塊的樹來表示數(shù)據(jù)流。該樹的根部的指針塊的地址足以獲取整個流。
(網(wǎng)絡模式)該存儲系統(tǒng)需要內(nèi)部網(wǎng)絡來放大到所需要的大容量,并且連接數(shù)據(jù)源——即客戶端備份機器。網(wǎng)絡必須在存儲系統(tǒng)的節(jié)點之間以及到數(shù)據(jù)源的鏈路上都提供高吞吐量。隨著該系統(tǒng)的尺寸的增長,在全部節(jié)點之間建立具有高的聚合吞吐量的大型網(wǎng)絡變得困難并且昂貴。傳統(tǒng)而言,以分層次的方式建立大型數(shù)據(jù)中心中的網(wǎng)絡,其中由第一級交換機(例如IG比特)連接單獨的機器,并且由更快的第二級交換機(例如IOG比特)連接第一級交換機,以此類推。交換機之間的鏈路需要更快,以提供合理的聚合吞吐量,當使用更快的互連時這提高了網(wǎng)絡硬件成本或者當綁定多個物理鏈路時這提高了線纜復雜度。當然,在小型系統(tǒng)中不出現(xiàn)分層次結構,其中在小型系統(tǒng)中全部節(jié)點可以連接到同一個第一級交換機,在全部節(jié)點之間可以獲得相同的高吞吐量。并且,給定足夠的資源,甚至可以從商用聯(lián)網(wǎng)硬件構造聚合吞吐量高的大型網(wǎng)絡。因此,該存儲系統(tǒng)應該被適配為:交換機內(nèi)吞吐量高但是聚合交換機間吞吐量較低的分層次網(wǎng)絡,以及在任意兩個節(jié)點之間可獲得完整的橫截面帶寬的對稱網(wǎng)絡。(客戶端系統(tǒng)性能限制)從該存儲系統(tǒng)寫入或讀取的數(shù)據(jù)最終必須經(jīng)過客戶端機器(備份服務器)傳遞。每個客戶端備份服務器具有用于源和宿數(shù)據(jù)的有限資源——本地盤或者網(wǎng)絡連接變?yōu)槠款i。因此對于存儲系統(tǒng)而言沒有必要針對單個流提供高吞吐量;單個客戶端機器的資源將容易地被存儲系統(tǒng)的少量(例如一打)節(jié)點超過。但是,當從多個客戶端機器同時讀/寫多個流時,系統(tǒng)應該仍然提供良好的組合性能。(架構)(概況)本發(fā)明中提出的存儲系統(tǒng)由以下類型的節(jié)點組成:訪問節(jié)點,其作為到系統(tǒng)的網(wǎng)關并且連接客戶端機器,存儲節(jié)點,其實際上存儲數(shù)據(jù)庫,以及索引節(jié)點,其負責識別并且定位重復。可以可選擇地將不同功能的節(jié)點組合在同一物理機器上,如果出于硬件考慮證明是有益的(例如功耗、冷卻、數(shù)據(jù)中心空間使用)。為了滿足上述要求,本發(fā)明提出實現(xiàn)以下設計目的的存儲系統(tǒng)。局域性保留存儲在存儲節(jié)點的小的子集上將屬于一個流的非重復塊的序列緊密存儲在一起。這保留了上述基于流的局域性,從而允許在恢復期間進行有效的順序讀取。這對于重復消除性能也是重要的,實現(xiàn)了重復塊的哈希的有效預取。該方法與NPL I中所述的以前的嵌入全局去重系統(tǒng)不同。這些系統(tǒng)組合重復索引和塊存儲,迫使塊在整個系統(tǒng)上均勻分布。雖然它們也試圖在存儲節(jié)點之中保留流局域性,但是初始分隔降低了它的效率?;谌止5乃饕捎趬K寫入的存儲節(jié)點不再依賴于塊的哈希,所以必須維持分離的塊索引?;趬K哈希,在系統(tǒng)中的全部索引節(jié)點上分隔該索引。在這里哈希是合適的,因為在哈??臻g中無論如何都不存在局域性,并且其提供良好的可縮放性、并行性和負載平衡。存儲容量平衡流局域性保留僅對于多達一些最大流長度有意義,這是由順序盤訪問的效率確定的。當在一個位置中累積了足夠的順序塊之后,可以在別處存儲其他的塊。因此,給定流的非重復塊沒有寫入的節(jié)點隨時間改變。這有助于維持良好的容量平衡,防止一些存儲節(jié)點比其他節(jié)點更快填滿。不對稱網(wǎng)絡性能由于數(shù)據(jù)位置不是由塊哈希確定的,所以所提出的系統(tǒng)自由地將數(shù)據(jù)節(jié)點上的數(shù)據(jù)靠近寫入該數(shù)據(jù)的客戶端設備保持。通過避免跨高等級交換機的數(shù)據(jù)傳遞以及相關的網(wǎng)絡吞吐量瓶頸,這可以極大地提高非對稱網(wǎng)絡中的寫帶寬。僅需要向網(wǎng)絡中的全部節(jié)點均勻地發(fā)送去重查詢,但是它們小得多并且不需要大量的帶寬。下文是構成該系統(tǒng)的邏輯組件的描述。(前端)前端向客戶端輸出文件系統(tǒng)、VTL或數(shù)據(jù)的類似圖像。其將輸入的寫入流組塊成尺寸可變的塊并且提交它們以便去重和存儲。其在訪問節(jié)點上被主控。系統(tǒng)的該部分可以與NPL I中所述的HYDRAstor中出現(xiàn)的那部分相同。(DHT網(wǎng)絡重疊)與分布式一致性組合的分布式哈希表用于實現(xiàn)網(wǎng)絡重疊層。DHT是系統(tǒng)的可縮放性的基礎。網(wǎng)絡重置提供:對象位置的虛擬化,從而在面對故障和系統(tǒng)重配時允許邏輯對象到物理機器的有效映射故障檢測和容忍負載平衡(假設對象在DHT的密鑰空間中均勻分布)小的系統(tǒng)范圍內(nèi)的狀態(tài)(全局狀態(tài))的傳播和維持。(具有超節(jié)點的FPN)在本發(fā)明中使用的DHT是具有超節(jié)點的固定前綴網(wǎng)絡(NPL 5)。在NPL I中已經(jīng)描述了它在存儲系統(tǒng)中的使用;在這里僅概述在該系統(tǒng)的環(huán)境中重疊的功能。重疊網(wǎng)絡將密鑰(哈希)映射到負責這些密鑰的節(jié)點的集合。它被組織成超節(jié)點,每個超節(jié)點包括恒定數(shù)目的超節(jié)點組件。在物理節(jié)點(在該情況下是索引節(jié)點和存儲
節(jié)點)上主控超節(jié)點組件。每個超節(jié)點的組件的數(shù)目-超節(jié)點基數(shù)(cardinality) (SNC)
對于FPN的給定實例是固定的。作為同一超節(jié)點的成員的組件被稱為對。每個超節(jié)點負責哈希密鑰空間的一部分;在超節(jié)點之間分隔哈??臻g,從而整個空間被覆蓋,并且在超節(jié)點之間的責任中不存在重疊。在超節(jié)點之中處理節(jié)點故障-給定超節(jié)點的全部組件持續(xù)探通(ping)彼此以
檢測故障和傳播狀態(tài)改變。當節(jié)點故障時,由其余對恢復在該節(jié)點上主控的組件。NPL 6或7中描述的分布式一致性算法用于確保全部組件具有超節(jié)點的成員關系的一致的圖像。為了維持用于一致性的法定個數(shù)(quorum),來自每個超節(jié)點的過半的SNC組件必須在全部時間存活。這還防止網(wǎng)絡分隔導致“腦裂”操作。
FPN還提供負載平衡的等級。其試圖在物理機器之間與在其上可用的資源成正比地擴展組件?;厩疤崾敲總€超節(jié)點將大致接收相同的負載(在使用的容量和每秒的請求方面)。還防止在同一物理節(jié)點上共置對等組件以提高故障容限。可以容易地使用不同的DHT實現(xiàn)來代替FPN,只要其可被擴展為提供容錯性和全局狀態(tài)廣播。在本發(fā)明中具有超節(jié)點的FPN的使用是由其在HYDRAstor系統(tǒng)中的成功使用激發(fā)的。(數(shù)據(jù)和索引FPN)在該系統(tǒng)中存在DHT的兩個分離的實例:“數(shù)據(jù)FPN”,其將邏輯數(shù)據(jù)位置映射到負責存儲它們的存儲節(jié)點。在存儲節(jié)點上主控數(shù)據(jù)FPN的組件。該映射提供數(shù)據(jù)位置的虛擬化——邏輯位置在系統(tǒng)重配置或故障時不改變,即使主控該數(shù)據(jù)的存儲節(jié)點改變。稍后將詳細描述數(shù)據(jù)FPN?!八饕鼺PN”,其將塊哈希映射到維持用于該哈希的轉(zhuǎn)換的索引節(jié)點。將該網(wǎng)絡的組件放置在索引節(jié)點上。這在稍后詳細討論。對于索引節(jié)點和存儲節(jié)點使用分離的FPN網(wǎng)絡將允許在不同的硬件上放置這些類型的節(jié)點。例如,索引節(jié)點可能需要很多CPU功率、RAM和10PS,而存儲節(jié)點將需要很多存儲容量以及高的盤和網(wǎng)絡吞吐量。即使這兩個網(wǎng)絡的組件被放置在同一物理機器上,通??梢栽诿總€網(wǎng)絡中獨立地完成負載平衡,因為如上所示,它們利用不同的資源。并且,兩個網(wǎng)絡可以具有不同的超節(jié)點基數(shù)(分別是SNCiigl和SNCss),并且可以獨立地增長(在它們之間無需使FPN分割同步)。(塊存儲)(數(shù)據(jù)組織概況)由數(shù)據(jù)FPN組件將存儲在系統(tǒng)中的全部用戶數(shù)據(jù)作為塊來保持。將該塊擦除編碼成SNCss個分段,一些是原始的并且一些是冗余的。通過用戶向數(shù)據(jù)分配的彈性(resilience)類別來確定原始和冗余分段的比例。當寫入塊時將塊分配給數(shù)據(jù)FPN超節(jié)點。稍后將給出分配策略的細節(jié)。(同步運行(synchrun)和SCC)在數(shù)據(jù)FPN超節(jié)點之中,將存儲塊分組成同步運行。將屬于同一塊的分段放到同步運行的對應同步組件中。存在用于每個同步運行的SNCssA同步運行分量,其對應于分段號O到SNCiag-U同步運行是用于數(shù)據(jù)同步化操作的處理的原子單元——在后臺維持操作期間塊從不跨過同步邊界。將整數(shù)個同步運行組件分組成同步運行組件容器(SCC) ;SCC被存儲在存儲節(jié)點數(shù)據(jù)盤上。SCC是僅能追加的——當寫入整個SCC時,其變?yōu)椴蛔兊?。后續(xù)后臺操作僅可以通過重寫SCC來修改它。完成同步運行組件到SCC的分組以限制需要被存儲節(jié)點追蹤的實體的數(shù)目一隨著從系統(tǒng)刪除塊,同步運行的尺寸將縮小。通過在同步運行的尺寸減小時連結(concatenate)連續(xù)的同步運行,將SCC的尺寸大致維持在一個同步運行組件的初始尺寸(大約 64MB)。流運行(streamrun)
將大量連續(xù)的同步運行分組成流運行。該分組是靜態(tài)的并且在分配同步運行時被確定的。流運行對應于來自相同的流的塊的運行,其應該被保持在同一超節(jié)點中以獲得良好的局域性——它們是存儲平衡單元。在局域性保留和容量平衡質(zhì)量之間存在折中,可以由流運行的尺寸來控制該折中。下文將更詳細地探究該折中。(同步運行的標識)由64比特的標識符來標識每個同步運行。同步運行Id靜態(tài)地確定同步運行所屬的超節(jié)點。同步運行Id在邏輯上被分為3個部分:超節(jié)點區(qū)域前綴該超節(jié)點之中的流運行id該流運行之中的序列號用于序列號的比特的數(shù)目是固定的;被解釋為超節(jié)點前綴的比特的數(shù)目隨著系統(tǒng)增長以及數(shù)據(jù)FPN區(qū)域前綴的長度增加而增加。稍后將描述細節(jié)。(塊標識和分段查找)向存儲在系統(tǒng)中的全部塊分配在同步運行中寫入的它們的序列號。與同步運行Id組合的該序列號唯一地標識整個系統(tǒng)之中的塊。(同步運程Id(SynchrunId)、塊序列號(BlockSeqNum))對因此被稱為唯一塊地址。該地址從不重復使用,即使稍后該塊被移除。(寫發(fā)起者)對于在給定超節(jié)點中存儲新塊的請求一直經(jīng)過該超節(jié)點的一個固定組件-寫
發(fā)起者。該發(fā)起者負責在同步運行之中分配唯一塊標識符并且與超節(jié)點的其它組件以及與索引FPN協(xié)調(diào)寫操作。(SCC 索引)除了原分段數(shù)據(jù)之外,每個SCC存儲屬于該SCC的分段的元數(shù)據(jù)。該元數(shù)據(jù)包括塊的哈希、它的唯一塊id、尺寸以及該分段的數(shù)據(jù)在SCC中的位置等等。將該元數(shù)據(jù)與該數(shù)據(jù)分離地存儲在SCC索引中。因此可以快速地讀取并且更新SCC索引,而無需略過分段數(shù)據(jù)。如果已知SCC之中的分段的位置,則從SCC索引讀取單獨的塊的元數(shù)據(jù)也是可能的。由于塊刪除,僅唯一塊id自己不能確定分段位置;必須對其進行外部查找。(全局塊索引)全局塊索弓I是分布式哈希表,其將存儲的塊的哈希映射到它們的唯一塊標識符(即(流運程Id,塊序列號)對)。它被實現(xiàn)在索引FPN之上?;趬K哈希密鑰的前綴來分隔哈希表。負責存儲給定塊哈希的節(jié)點是主控索引FPN組件、區(qū)域?qū)谠摴5墓?jié)點。在索引節(jié)點之中,將映射存儲在盤上哈希表中。全局塊索引是容錯的,在超節(jié)點的所有SNCgl個組件上復制每個區(qū)域。由于索引的尺寸,將索引存儲在盤上。更新被緩存在存儲器中并且被成批地應用在后臺中。通過使用存儲器中的布隆過濾器,該索引支持對于不存在塊的廉價查詢。對于已有塊的查詢需要一次隨機盤讀取。(壓縮盤索引)
在每個存儲節(jié)點之中,將全局塊索引保持在被稱為壓縮盤索引(DCI)的盤上數(shù)據(jù)結構中。DCI需要以高性能標識非重復塊。DCI可以被實現(xiàn)在標準盤之上,作為具有用于否定(非重復)查詢的存儲器中的布隆過濾器的盤上哈希表。這類似于NPL 2中所述的索引。在該解決方案中,將全部更新一轉(zhuǎn)換插入和移除一放到存儲器中的緩沖器中以避免進行隨機寫入。盤上哈希表、寫緩沖器和布隆過濾器被分隔成桶(bucket),其中,每個桶對應于密鑰空間的一部分。當寫緩沖器開始填滿時,后臺掃掠操作按順序處理每個桶:讀取盤上哈希表桶應用來自寫緩沖器的任意更新重建用于該桶的布隆過濾器部分向盤刷寫更新的桶備選地,可以將索引存儲在基于閃存的SSD上。這在最近的研究中已經(jīng)進行了學習并且具有降低RAM消耗的優(yōu)點和實質(zhì)的功率節(jié)省的可能性。為了降低哈希表的尺寸,DCI不需要明確地存儲整個密鑰(塊哈希)。在哈希表中有沖突的情況下,返回全部匹配轉(zhuǎn)換。然后可以通過從合適的Scc索引(Scclndex)讀取這些候選塊的元數(shù)據(jù)并且檢查完整的塊哈希是否匹配來驗證這些候選塊。如果密鑰的附加多個比特被存儲在DCI中,則平均而言可以保持候選的數(shù)目接近I。(塊索引更新)在將塊成功地寫入它的同步運行之后并且當塊通過垃圾收集過程移除時,更新全局塊索引。由于負責主控全局塊索引中塊的區(qū)域的索引節(jié)點通常與實際存儲該塊的存儲節(jié)點不同,所以索引更新的謹慎的同步化是必要的。通過寫發(fā)起者在數(shù)據(jù)FPN中寫入塊,對于每個最新寫入塊創(chuàng)建哈希密鑰(Hashkey)到(同步運程Id、塊序列號)的轉(zhuǎn)換。向主控合適的塊索引區(qū)域的索引節(jié)點發(fā)送該轉(zhuǎn)換。然后將其存儲在目的地索引節(jié)點的轉(zhuǎn)換日志中,并且將在后臺中將其寫到的DCI中。只要轉(zhuǎn)換持續(xù)處于轉(zhuǎn)換日志中時,索引節(jié)點就對寫發(fā)起者進行答復。由于轉(zhuǎn)換插入請求可能丟失,所以每個寫發(fā)起者維持已經(jīng)被插入到全局塊索引中的轉(zhuǎn)換的(永久的)日志。周期性地重傳來自日志的對轉(zhuǎn)換的插入請求,直到從索引節(jié)點接收到成功的答復為止。索引節(jié)點可以接收重復的轉(zhuǎn)換插入請求。因為(同步運程Id、塊序列號)對于每個寫入是唯一的,所以重復插入可以被安全地丟棄。重復插入將通常在它們?nèi)匀辉贒CI寫緩沖器中時被檢測,但是也可以在DCI掃掠上移除它們。(移除)僅由于垃圾收集而從全局塊索引移除轉(zhuǎn)換。在最簡單的解決方案中,在完成垃圾收集之后可以根據(jù)剩余塊重建整個全局塊索引。下文所述的更復雜的解決方案也是可行的。為了垃圾收集的目的,系統(tǒng)的壽命被分割成被稱為時期(epoch)的階段。在一個時期中執(zhí)行該系統(tǒng)中的全部塊寫入。當前時期號被維持在全局狀態(tài)中,并且當垃圾收集過程開始時其被推進。僅在已經(jīng)將來自時期η-1的全部塊添加到GBI中之后時期可以推進到n+1。時期n中的垃圾收集僅移除直到時期n-2之前存儲的塊(即僅無疑已經(jīng)在GBI中的那些塊)。這些階段有助于避免GBI轉(zhuǎn)換更新、塊移除和GBI轉(zhuǎn)換移除之間的競爭。用時期號來對GBI插入請求(轉(zhuǎn)換日志條目)蓋時間戳;由于接收索引節(jié)點重復,丟棄來自太老的時期的請求。如果垃圾收集確定應該移除塊,則發(fā)送對于它的轉(zhuǎn)換的移除請求。也用當前時期對該請求蓋時間戳。如果塊曾經(jīng)被再次存儲,則其將處于不同的同步運行中并且因此其將是不同的轉(zhuǎn)換。(哈希租用(lease))僅在轉(zhuǎn)換的塊已經(jīng)被成功地存儲在同步運行中之后才向全局塊索引增加該轉(zhuǎn)換。如果兩個或更多客戶端試圖同時寫入相同的塊,則這可以導致競爭,并且可以存儲相同的塊的多個副本。為了防止該競爭,客戶端要求在提交塊以便存儲之前從全局塊索引租用塊的哈希。取得的租用用信號向其他潛在寫入者通知該塊已經(jīng)被寫入并且他們應該與原始寫入者同步。如果寫入失敗或者如果租用到期(例如因為用于處理該寫入的原始訪問節(jié)點停止響應),則當對于相同的哈希插入實際轉(zhuǎn)換時返回該租用。(轉(zhuǎn)換高速緩沖存儲器)轉(zhuǎn)換高速緩沖存儲器是SCC索引的存儲器中的高速緩沖存儲,用于對已存儲的塊進行有效去重。其利用重復的塊在數(shù)據(jù)流中的局域性(重復塊的運行往往按照與它們原始存儲的次序相同的次序而重新寫入)。轉(zhuǎn)換高速緩沖存儲器位于訪問節(jié)點上。當確定塊是否重復時,每個訪問節(jié)點參考它的本地轉(zhuǎn)換高速緩沖存儲器。可以通過從主控SCC索引的存儲節(jié)點下載SCC索引,來填充高速緩沖存儲器。由于高速緩沖存儲器具有有限的容量,可以從高速緩沖存儲器移除這樣一種SCC索引,其中該SCC索引的轉(zhuǎn)換最近未被使用。如果基礎SCC改變,則存儲在轉(zhuǎn)換高速緩沖存儲器中的SCC索引可能變得陳舊。由于在使用之前一直可以在存儲節(jié)點處驗證轉(zhuǎn)換高速緩沖存儲器的內(nèi)容,所以如果驗證失敗則可以慢慢地從高速緩沖存儲器丟棄它們。(操作)接下來,將描述如何在上文給出的數(shù)據(jù)組織中執(zhí)行普通操作。(寫入和重復消除)由訪問節(jié)點的前端首先處理來自用戶的寫入,其中它們被分割為尺寸可變的塊并且構成塊的樹。對于每個塊,計算它的SHA-1哈希密鑰,其將用于決定該塊是唯一的還是重復的。(重復塊)首先在轉(zhuǎn)換高速緩沖存儲器中查找塊的哈希。如果存在于那里,則找到候選原始塊的同步運行和唯一塊id。使用同步運行id,向它的存儲節(jié)點發(fā)送請求,以驗證轉(zhuǎn)換高速緩沖存儲器條目不是陳舊的并且該塊具有足夠的彈性以便針對它而對寫入去重。如果該驗證通過,則寫操作完成。如果在轉(zhuǎn)換高速緩沖存儲器中未發(fā)現(xiàn)塊或者未通過驗證,則向全局塊索引發(fā)送對于塊的哈希密鑰的查詢。通過經(jīng)過DHT路由而將其傳遞到合適的索引節(jié)點。然后讀取全局塊索引,并且返回候選塊位置集合。然后一個接一個地驗證候選(實際上,平均而言僅一個候選)。對于每個候選,向主控該候選的同步運行的存儲節(jié)點發(fā)送請求。使用唯一塊id,從SCC索引查找并且讀取分段元數(shù)據(jù)位置。分段元數(shù)據(jù)包括塊的哈希,可以將其與新塊的哈希進行比較。如果它們匹配并且塊具有足夠的彈性,則找到重復。否則檢查其余候選。如果重復塊被消除,則考慮原始塊的SCC索引,以便讀取到轉(zhuǎn)換高速緩沖存儲器中以加速后續(xù)重復消除。(唯一塊)如果轉(zhuǎn)換高速緩沖存儲器不包括任意可用的條目,則參考全局塊索引。由于布隆過濾器的使用,如果塊尚未處于全局塊索引中,則可以返回否定的回答而無需任意高概率的盤訪問。如果沒有找到候選或者全部候選塊被拒絕,則該塊是唯一的并且將被存儲。訪問節(jié)點維持用于每個正被寫入的數(shù)據(jù)流的開放同步運行。全部新塊被存儲在該同步運行中。如果不存在用于流的開放同步運行或者超過了以前的同步運行容量,則分配新的同步運行。在選擇用于塊的開放同步運行之后,將塊擦除編碼到SNCssA分段中,并且向主控該開放同步運行的超節(jié)點的組件發(fā)送該分段。其中一個組件即寫發(fā)起者負責同步化寫操作。其發(fā)送用于插入用于正被存儲到全局塊索引的塊的轉(zhuǎn)換的請求。其收集對于SNCiagA分段的存儲的確認,并且用成功或失敗來答復訪問節(jié)點。(同步運行分配)總是由負責同步運行的超節(jié)點的寫發(fā)起者創(chuàng)建新的同步運行。寫發(fā)起者知道哪些流運行以及那些流運行中的哪些同步運行是以前分配的,并且可以保證最新分配的同步運行具有唯一 id。在兩種情況下,訪問節(jié)點需要分配同步運行:在寫入新的流的第一唯一塊之前當以前的同步運行滿了時。如果訪問節(jié)點已經(jīng)具有針于流開放的同步運行,則其將通常試圖在相同的流運行中分配下一個同步運行。由于流運行Id確定了超節(jié)點,所以可以經(jīng)過數(shù)據(jù)FPN向合適的寫發(fā)起者發(fā)送分配請求。如果分配成功,則寫發(fā)起者將指配下一個同步運行Id,并且將其返回給訪問節(jié)點。訪問節(jié)點然后將用該同步運行Id提交所有新的寫入。如果因為流運行滿了或者超節(jié)點空間不足分配失敗,則訪問節(jié)點需要分配新的流運行。為了分配新的流運行,訪問節(jié)點首先選擇新的超節(jié)點來主控它。通過在數(shù)據(jù)FPN中查找隨機密鑰并且向負責該密鑰的寫發(fā)起者發(fā)送分配請求來選擇超節(jié)點。如果分配成功,則向訪問節(jié)點返回新的流運行的第一同步運行的Id。否則,訪問節(jié)點選擇另一個超節(jié)點??梢孕薷脑摶痉峙洳呗砸蕴峁┲T如對于非對稱網(wǎng)絡的支持的特征。通常,針對每個客戶端流分配分離的同步運行。但是,由于每個開放同步運行需要存儲節(jié)點側的一些資源,所以每個超節(jié)點的同時開放的流的數(shù)目存在限制。如果同時寫入過多流,則同一同步運行將被多個流使用。該同步運行共享的負面效應在于在同一同步運行中將混合不相關的數(shù)據(jù),從而減小了流局域性的正面效應。我們不希望在實踐中同時寫入的流的數(shù)目過大并且因此不意圖對該情況進行優(yōu)化。
(重復塊的同時寫入)如果多個訪問節(jié)點同時試圖寫入相同的塊,則可能存儲相同的塊的多個副本。使用全局塊索引租用來防止這在實踐中發(fā)生??偸窃趯懭胄聣K之前采取租用——可以在全局塊索引查詢沒返回候選時自動地或者在全部候選被拒絕時明確地獲得租用。租用包括正被寫入的塊的哈希和寫入該塊的訪問節(jié)點的地址。如果在全局塊索引查詢期間找到關于請求的哈希的活動租用,則返回另一個訪問節(jié)點正在同時寫入相同的塊的通知。后續(xù)寫入者然后將聯(lián)系原始訪問節(jié)點并且進行等待直到原始塊寫入完成為止。當用于相同的哈希的轉(zhuǎn)換被插入到GBI中時,當寫操作失敗時(例如由于空間不足)或者在一些超時之后(例如在訪問節(jié)點失敗的情況下),可以釋放租用。僅由負責塊的哈希的索引FPN超節(jié)點中的選定組件來許可租用。如果該組件在一些時間內(nèi)在它的超節(jié)點中沒有收到法定個數(shù),則租用也將不被許可。當索引FPN組件失敗或者與網(wǎng)絡分隔時,這限制重復塊被同時存儲到短的時間窗的可能性。(讀取)取決于在指針塊中保持哪種類型的地址(下文將詳細討論),可以基于塊的哈希密鑰或塊的唯一塊id來讀取塊??梢酝ㄟ^讀取足夠多的分段來重構塊。為了實際讀取數(shù)據(jù),首先需要查找SCC中的分段的偏移量。通過哈希的讀取需要用于查找唯一塊id的額外步驟。通過參考轉(zhuǎn)換高速緩沖存儲器和全局塊索引,其可以如同去重那樣完成。使用訪問節(jié)點上的轉(zhuǎn)換高速緩沖存儲器來找到SCC偏移量。如果在高速緩沖存儲器中找到唯一塊id,則相關聯(lián)條目已經(jīng)包括數(shù)據(jù)偏移量。該偏移量可能是陳舊的,因此,當處理片段讀取請求時在存儲節(jié)點上驗證該偏移量。如果在轉(zhuǎn)換高速緩沖存儲器中不存在用于分段的條目,則向主控該分段的同步運行的存儲節(jié)點轉(zhuǎn)發(fā)該分段讀取請求。存儲節(jié)點可以使用在轉(zhuǎn)換高速緩沖存儲器中找到的偏移量來直接讀取數(shù)據(jù)。如果偏移量未知或無效,則必須讀取SCC索引條目。在通常情況下,這僅需要在一個組件上完成,因為相同的塊的分段通常以相同的偏移量存儲在所有SNCiagA SCC中。如同在重復消除中,包括足夠多的分段的SCC的索引被下載到轉(zhuǎn)換高速緩沖存儲器中,以加速將來的讀取。僅需要讀取原始分段來重構塊。優(yōu)選原始分段,因為根據(jù)它們來重構原始數(shù)據(jù)不需要擦除編碼。但是,改為讀取一些冗余分段以在盤之間更均勻地傳播讀取請求可能是有益的。(故障恢復)由合適的FPN層檢測索引和存儲節(jié)點的故障。在不同的索引/存儲節(jié)點上(使用一致性)重建在故障節(jié)點上主控的FPN組件。選擇這些節(jié)點以維持每個節(jié)點的組件的數(shù)目的良好平衡。當組件的位置改變時,從以前的位置傳遞或者從對等組件重構與該組件相關聯(lián)的全部數(shù)據(jù)(分別是同步運行或全局塊索引條目)。該重構過程在后臺中進行。在索引FPN中,重復并且可以簡單地復制全局塊索引轉(zhuǎn)換。在數(shù)據(jù)FPN中,通過讀取其余分段、重構原始塊、重編碼丟失分段并且在新組件的位置寫入丟失的SCC,來重構SCC。由于負載平衡,將典型地在多個節(jié)點上傳播恢復的組件。數(shù)據(jù)重構因此將向多個節(jié)點并行寫入,從而產(chǎn)生高的重建性能,并且快速地恢復想要的彈性等級。(刪除和空間回收)使用分布式垃圾收集過程來完成塊的刪除。與NPL I中所述的相同的總體算法可以適用于該系統(tǒng)。分布式垃圾收集總而言之,在SCC索引中針對每個塊維持引用計數(shù)器。塊的引用計數(shù)器是引用該塊的指針塊的數(shù)目。僅由周期性的垃圾收集過程改變計數(shù)器值。垃圾收集使用全局狀態(tài)機制全局同步化地在多個階段中運行。在第一階段中,對在最后一個垃圾收集之后寫入的全部新的指針塊進行處理,并且向主控被指向的塊的存儲節(jié)點發(fā)送計數(shù)器增加請求。當全部塊都被處理之后,引用計數(shù)器更新通過唯一塊id來分類,并且成批地應用于給定SCC中的全部塊。然后,識別引用計數(shù)器為O的指針塊。由于這些塊將要被移除,所以向它們指向的全部塊發(fā)送計數(shù)器減小請求。再次應用引用計數(shù)器更新,并且如果更多指針塊被移除,則開始另一個減小階段。被稱為時期的對階段的分割簡化了具有塊寫入的全局塊索引的同步化一在與塊被寫入的時期相同的時期中從不移除該塊,并且推進到下一個時期需要全部未決的全局塊索引更新完成。空間回收垃圾收集過程僅將塊標記為死亡——從全局塊索引移除它們的轉(zhuǎn)換,并且針對它們不能消除新的重復,但是它們的存儲尚未被釋放。在后臺中回收該空間,一次一個see??臻g回收將減小同步運行的平均尺寸。為了防止每個SCC元數(shù)據(jù)的數(shù)量無限地增長,將連結連續(xù)的SCC以將平均SCC尺寸維持在界限之內(nèi)。僅可以連結具有連續(xù)的同步運行的SCC。對于來自相同流運行的同步運行的連結給予優(yōu)先權一如果不存在具有來自該流運行的數(shù)據(jù)的其他SCC,則來自不同流運行的同步運行僅可以被放置在一個SCC中。(系統(tǒng)增長)當向該系統(tǒng)增加新的存儲節(jié)點并且它的容量增加時,F(xiàn)PN超節(jié)點的數(shù)目必須增加以便維持良好的負載平衡。這是通過增加區(qū)域前綴的長度來完成的——每個FPN組件被分割成具有更長的前綴的兩個新組件?;诠C荑€在新組件之間分割全局塊索引條目。還在新的超節(jié)點之間分割同步運行。這是通過擴展被解釋為區(qū)域前綴的同步運行標識符的比特的數(shù)目來完成的,其中流運行Id的最不重要比特被移動到區(qū)域前綴。例如,具有 id(前綴:流運行:序列號)01:0:0、01:1:0、01:2:0、01:3:0、01:4:0 和 01:5:0 的同步運行等效于分割之后的 010:0:0、011:0:0、010:1:0、011:1:0、010:2:0 和 011:2:0。結果,當系統(tǒng)增長時,同步運行以流運行的粒度均勻地分布在新的超節(jié)點之間。如果在分割之后屬于不同超節(jié)點的同步運行被連結成單個SCC,則該SCC將通過后臺操作而被分割。但是,這很少發(fā)生,因為優(yōu)先權在流運行間連結之前被給予了流運行內(nèi)連結。因此總是在新增加的節(jié)點上重新平衡組件(并且因此數(shù)據(jù)),以提供高的即時寫帶寬。(數(shù)據(jù)組織討論和評價)(流運行尺寸的影響)流運行的尺寸確定了新的超節(jié)點將多頻繁地針對數(shù)據(jù)流而被選擇。存在與流運行尺寸的選擇相關的折中。對于負載平衡而言經(jīng)常切換到新的超節(jié)點(例如在每個同步運行之后)是好的,但是:導致數(shù)據(jù)在系統(tǒng)增長之后分散在超節(jié)點之間阻止盤降速。需要找到在每個同步運行之后切換和只有超節(jié)點滿了之后才切換之間的恰當平衡。(容量平衡)超節(jié)點組件用于平衡系統(tǒng)中的容量利用率。與存儲節(jié)點上存在的存儲容量的數(shù)量成正比地向存儲節(jié)點指配組件。由于一直是整個組件被傳遞,所以它們中的多個存在于每個存儲節(jié)點上,使得平衡粒度較小。如果全部超節(jié)點大致具有相同的尺寸,則超節(jié)點組件級別的平衡產(chǎn)生平衡的容量利用率。流運行到超節(jié)點的統(tǒng)一隨機分配防止形成超節(jié)點尺寸的任意顯著的不平衡。即使在輸入數(shù)據(jù)中和面對刪除時出現(xiàn)關聯(lián),超節(jié)點仍然是平衡的。與通過哈希分布塊的系統(tǒng)相比,收集單元相對大——在所提出的系統(tǒng)中分配整個流運行,其至少比塊大3個量級。如果流運行太大,則如果使用到超節(jié)點的簡單的統(tǒng)一分配,則系統(tǒng)的最大利用率將受損害。已完成用于評價分配單元尺寸的選擇如何影響通過隨機分配可實現(xiàn)的最大利用率的實驗。向隨機選擇的超節(jié)點分配流運行,直到遇到完整的超節(jié)點為止。該實驗假設48TB系統(tǒng),其中每個超節(jié)點的尺寸是1.5TB。對于尺寸為64MB的流運行,超節(jié)點之間的不平衡平均是2%。利用嚴格的統(tǒng)一隨機分配策略,當系統(tǒng)容量的98%被寫入時,系統(tǒng)將變滿。如果原始選擇的超節(jié)點空間不足,則可以通過在不同的超節(jié)點中嘗試分配來提高它。這允許新的寫入達到幾乎100%的利用率,同時數(shù)據(jù)刪除平均而言將仍然不會導致顯著的不平衡。(冗余和并行性)數(shù)據(jù)FPN的超節(jié)點基數(shù)確定:數(shù)據(jù)FPN的冗余一不到一半的活動FPN組件可能永久失?。环駝t一致性法定個數(shù)丟失可用的數(shù)據(jù)彈性類別的數(shù)目——擦除編碼可被配置為產(chǎn)生從O到多達SNCss-1個冗余分段指配給單個流的并行的數(shù)量。每個塊寫入要求寫入SNCssA分段,并且塊讀取要求至少讀取該塊的原始分段。因此,單個數(shù)據(jù)流實際上被剝離到SNCssA存儲節(jié)點上。該剝離通過并行化基于多達SNCiis個存儲盤的數(shù)據(jù)訪問來提高每個流的吞吐量??梢栽黾覵NCiag以針對更高的單個流的吞吐量而配置該系統(tǒng)。但是,過高的SNCia^f使流局域性和隨機讀取性能降級,因為必須訪問許多盤來讀取單個塊。標準超節(jié)點基數(shù)值是12,其應該提供足夠的并行性以使單個客戶端的吞吐量飽和,同時維持良好的流局域性和隨機讀取性能。索引FPN的超節(jié)點基數(shù)可能更低,因為全局塊索引轉(zhuǎn)換被復制,未被擦除編碼。通過基于哈希的負載分布內(nèi)在地提供并行性。因此,在該情況下僅需要考慮網(wǎng)絡存活性和可用性。(指針塊中的塊地址)指針塊是引用以前存儲的其他塊的塊。它們可以用于將各個數(shù)據(jù)塊鏈接到如文件或整個文件系統(tǒng)快照的數(shù)據(jù)結構中??梢酝ㄟ^內(nèi)容導出的哈希地址或通過依賴于位置的唯一塊地址來訪問系統(tǒng)中存儲的每個塊。這兩個地址中的任意一個地址應該原則上被存儲在指針塊中。指針類型的選擇伴隨多個折中。在圖1中概述了這些折中。地址尺寸哈希地址是與一些元數(shù)據(jù)(例如彈性類別)連結的塊的內(nèi)容的哈希。該地址必須足夠大以使得能夠在預計 尺寸的系統(tǒng)中可忽略哈希沖突。假設使用SHA-1哈希函數(shù),哈希地址的尺寸是20個字節(jié)。唯一塊地址是(同步運行Id,塊序列號)對,其唯一地標識系統(tǒng)中的塊??梢允乖摰刂繁裙P〉枚唷驗橥竭\行Id是對稱指配的,所以不存在沖突的可能。唯一地標識塊所需要的比特的數(shù)目依賴于在系統(tǒng)的壽命期間向系統(tǒng)寫入的非重復的塊的數(shù)目。即使假設極小的IK塊尺寸并且每個同步運行216個塊,64比特的同步運行標識符空間將不會被耗盡直到24°拍字節(jié)的非重復數(shù)據(jù)被寫入系統(tǒng)為止。讀取性能在讀取塊的數(shù)據(jù)之前必須查找塊的位置。如果按照與最初寫入塊的次序相同的次序順序地讀取塊,則將由轉(zhuǎn)換高速緩沖存儲器處理這些查找中的大部分查找,而無需任何盤訪問。但是,轉(zhuǎn)換高速緩沖存儲器可能不包括用于流的前幾個塊的轉(zhuǎn)換(直到預取了流的Scc索引為止),并且對于隨機讀取高速緩沖存儲器完全無效。在這些情況下,必須完成昂貴的分段位置查找。如果指針塊是哈希地址,則該查找將必須遍歷全局塊索弓丨,從而引發(fā)盤尋道(seek)。這對于唯一塊地址而言是不必要的,因為所需要的同步運行Id被包括在該地址中。塊再定位當使用靜態(tài)的同步運行到超節(jié)點映射時,在一些情況下將塊移動到不同的同步運行可能是有用的??赡苡斜匾岣叻菍ΨQ網(wǎng)絡中的負載平衡。如果在指針塊中使用哈希地址,則塊的同步運行可以改變而無需改變指向它的指針塊的內(nèi)容。另一方面,如果使用唯一塊地址,則指向再分配的塊的全部指針塊將需要被更新。該更新將需要被一直傳播到塊樹根,因為存儲在指針塊中的地址被包括在指針塊的哈希的計算中。關于哈希查找的要求
通過塊的哈希地址的讀取塊依賴于全局塊索引中存在的它的轉(zhuǎn)換。如果這是讀取塊的唯一方式,則系統(tǒng)將必須保證在塊寫入操作完成之前GBI被成功地更新。這將增加塊寫入操作的延遲或者需要哈希租用持續(xù)。系統(tǒng)復原如果系統(tǒng)經(jīng)歷了比其被配置要經(jīng)受的故障更多的故障,則一些塊可能變得不可讀取。由于去重,包括不可讀取的塊的全部文件系統(tǒng)快照將受影響。在許多情況下,丟失的數(shù)據(jù)仍然存在于原始系統(tǒng)中且將利用下一個備份被寫入系統(tǒng)。在新的同步運行中將再次存儲該塊,但是具有相同的哈希地址。如果指針塊改為包括哈希地址以代替唯一塊地址,則當讀取原始指向不可讀取的塊的舊文件系統(tǒng)時也可以使用該新的塊。實際上,重寫丟失的塊將自動“復原”該系統(tǒng)。具有線索(hint)的指針塊通過將每個指針的哈希地址和唯一塊地址二者都保持在指針塊中,能夠?qū)⒐5刂返囊嫣?塊再定位、系統(tǒng)復原)與唯一塊地址的那些益處(更好的隨機讀取性能、對于哈希查找的更寬松的要求)組合。哈希地址將是權威性的并且僅它將影響指針塊的哈希。唯一塊地址將是用于避免全局塊索引更新的線索,只要該線索是最新的。該線索可能變得陳舊(當指針塊改變位置或者變得不可讀取時),并且在這些情況下可以慢慢地更新該線索。該方法的負面效應在于其需要用于指針塊的大部分存儲容量。(唯一塊寫入的性能)如上所述,備份系統(tǒng)更通常被寫入而不是讀取,并且對于該系統(tǒng)的可行性而言高的寫吞吐量是必要的。在本發(fā)明中提出的架構中,當唯一數(shù)據(jù)的每個流最初被寫入時,其被剝離到SNCii$個盤上。另一方面,在進行基于哈希的塊分布的系統(tǒng)中,在全部盤上統(tǒng)一地傳播該寫入。因此,在本發(fā)明中提出的系統(tǒng)提供了明顯更低的單個流的寫吞吐量。但是,如上所示,單客戶端系統(tǒng)典型地無論如何不能利用該高吞吐量,因此我們發(fā)現(xiàn)該限制不重要。負載平衡在大型系統(tǒng)中,典型地將同時寫入多個流。將隨機地并且獨立地針對每個流分配同步運行。因此,可以選擇相同的超節(jié)點來主控多個同步運行,迫使多個流共享單個存儲節(jié)點的吞吐量。通過在同步運行分配算法中使用多個隨機選擇,可以減輕負載不平衡。當選擇新的超節(jié)點時,向d個隨機選擇的超節(jié)點發(fā)送查詢,并且選擇具有最少活動地寫入的流運行數(shù)目的超節(jié)點。已經(jīng)顯示使用多個隨機選擇顯著提高了隨機化的負載平衡。圖2和圖3顯示了負載不平衡如何隨著系統(tǒng)尺寸增加而影響寫帶寬。對于不同數(shù)目的超節(jié)點和分配查詢,仿真了 η個流運行到η個超節(jié)點的分配。注意到,超節(jié)點的數(shù)目總是與系統(tǒng)尺寸成正比。圖2顯示了分配給單個超節(jié)點的最大流運行數(shù)目的平均。如所期望的,僅使用一個附加分配查詢顯著地減少了超節(jié)點中的流運行的最大數(shù)目。但是,即使利用許多查詢,也可以高概率找到具有多個活動流運行的超節(jié)點。流運行被分配給該超節(jié)點的流將經(jīng)歷降級的寫吞吐量,直到該流運行被耗盡并且另一個流運行被分配為止。但是,圖3顯示了即使單獨的流可能經(jīng)歷一些減速,該負載不平衡對于聚合寫帶寬的影響也不大。通過計數(shù)至少被分配了一個流運行的超節(jié)點的數(shù)目來計算寫帶寬(基本前提是單個流足以使一個超節(jié)點的吞吐量飽和)。利用10個查詢,即使對于非常大的系統(tǒng),實現(xiàn)的帶寬也在最大值的5%以內(nèi)。流分類在進行基于哈希的分布的系統(tǒng)中,在相同的存儲容器中復用屬于不同的流的寫入。由于相同的流將不可能一起被讀取,所以該復用的容器的讀取是不夠的,因為它們必須略過不必要的數(shù)據(jù)。在NPL I中使用流分類,以通過將來自流的數(shù)據(jù)接合成更大的組塊來改善將來的讀取。但是流分類要么增加延遲(如果它是在寫入過程期間內(nèi)嵌完成的),要么需要由后臺過程按照分類的流的次序重寫全部數(shù)據(jù)。在本發(fā)明中提出的架構避免將來自不同流的數(shù)據(jù)復用在一起,因為針對每個流創(chuàng)建分離的流運行。(讀吞吐量)所提出的架構的主要動機在于通過保留更多流局域性來提高大型系統(tǒng)中的讀吞吐量。(流局域性保留)流局域性在進行精確去重的存儲系統(tǒng)中自然地降級。由于本文的關注點在于由存儲系統(tǒng)的內(nèi)部數(shù)據(jù)組織導致的額外降級,所以我們將不通過分析針對唯一數(shù)據(jù)塊的流如何保留局域性而考慮去重的效果。最初,將輸入流的同步運行尺寸的部分按順序放在盤上。同步運行的期望的尺寸在從幾個兆字節(jié)到數(shù)十兆字節(jié)的范圍內(nèi),因而輸入流的順序讀取將導致存儲盤上的可忽略的少量尋道。刪除可以從同步運行的中間移除塊。垃圾收集隨后將導致同步運行的尺寸縮小。在同步運行尺寸顯著下降到足以影響順序讀取性能之前,將如上所述地連結連續(xù)的同步運行。連結將保留高達流運行的尺寸的數(shù)據(jù)的局域性。如果從僅剩余同步運行的一半的數(shù)據(jù)流的流運行尺寸的部分移除過多塊,則連結將開始合并屬于不同流的同步運行,并且對于原始流的局域性的保留將不再有效。在系統(tǒng)增長之后,已有數(shù)據(jù)被傳遞到新的節(jié)點以保持容量利用率平衡。但是,如上所示,流運行一直作為一個單元保持在一起。因此,流局域性不受新存儲節(jié)點的添加的影響。(與基于哈希的塊分布的比較)在基于哈希的塊分布和本發(fā)明中提出的每個流的塊分布兩者中的讀吞吐量都顯著地依賴于寫和讀期間的訪問形式。為了使得兩個架構之間的折中更加可見,我們將分析這些系統(tǒng)在一些典型的情況中如何運作。單流寫入、單流讀取雖然在大型系統(tǒng)中極不可能發(fā)生但是最簡單的情況是在數(shù)據(jù)流被初始存儲并且是正被寫入的唯一的流時,順序讀取數(shù)據(jù)流。在該情況下,基于哈希的分布非常有效,提供了全部節(jié)點的組合吞吐量。利用SNCiag個存儲節(jié)點的并行,在本發(fā)明中提出的架構執(zhí)行得足夠好,其中假設SNCiagA存儲節(jié)點的并行足以使單個客戶端飽和。多流寫入、單流讀取
在實際系統(tǒng)中,多個流被同時寫入并且它們中的僅一個稍后被讀取回時的情況是可論證地相當?shù)湫偷?。當多個系統(tǒng)在共享備份窗口期間并行被備份并且隨后僅其中一個系統(tǒng)遭受故障并且從備份中被恢復時,這可能容易出現(xiàn)。對于使用基于哈希的分布的系統(tǒng)而言,該情況是較不利的。由于屬于全部流的塊被統(tǒng)一地分布到相同的盤上容器,僅讀取回一個流將需要尋道或略過其他塊。NPL I試圖通過當塊在寫緩沖器中等待提交時在寫入期間在后臺并且內(nèi)嵌地根據(jù)流Id來分類容器中的塊來解決該問題。該流分類的效率受到容器尺寸的限制。在本發(fā)明中提出的架構不受該問題影響,因為來自不同數(shù)據(jù)流的寫入被存儲在獨立的容器中。在該情況下的讀吞吐量仍然是SNCiag個存儲節(jié)點的組合吞吐量。多流讀取如果在多個備份系統(tǒng)的大規(guī)模故障之后并行恢復多個備份圖像則可能同時讀取回多個流。但是,當讀取高度分段的去重流時,即使單個外部讀取流也可能對于該系統(tǒng)看起來像多個流讀取。在具有基于哈希的分布的系統(tǒng)中,全部存儲節(jié)點有效地存儲每個流的縮小的版本。這些縮小的流在的每一個必須被并行讀取以重建整個流。每個存儲節(jié)點必須服務于來自該系統(tǒng)中正被讀取的每個流的訪問。由于存儲節(jié)點和訪問節(jié)點二者都具有固定數(shù)量的用于對讀取進行緩沖的存儲器,所以必須利用增加同時讀取的流的數(shù)目來使用更小的盤讀取尺寸。使用小的盤讀取顯著地降低了吞吐量,從而最終將順序讀取降級成隨機塊讀取。所提出的系統(tǒng)不受相同問題的損害,因為每個數(shù)據(jù)流被剝離到僅存儲節(jié)點的小的集合上。但是,與基于哈希的分布不同,其受到不完美負載平衡的損害——這對于將要從存儲節(jié)點的小集合讀取的許多流而言是可能的,同時其他存儲節(jié)點空閑。讀取冗余分段以作為一些原始分段的交換,可以比通過擦除編碼算法更高的CPU消耗為代價改善負載平衡。然而,對于大量同時讀取流,讀取性能顯著高于使用基于哈希的塊分布時的讀取性能。(全局塊索引更新)如上所述,全局塊索引將哈希映射到塊的唯一塊地址(同步運行中的同步運行Id和序列號)。由于該決定,當數(shù)據(jù)位置改變或者垃圾收集完成時全局塊索引轉(zhuǎn)換無需改變——塊地址仍然有效直到該塊被移除為止。備選的解決方案將是保持SCC Id和塊的偏移量處于該SCC中。這將可能通過避免(同步運行Id、序列號)到(SCCId、偏移量)的轉(zhuǎn)換來改善隨機讀取性能。但是,其將需要在改變SCC中的分段的偏移量(空間回收、連結)的任意后臺操作之后更新GBI轉(zhuǎn)換,并且將因此增加索引節(jié)點上的負載。(對于非對稱網(wǎng)絡的支持)基于哈希的分布在全部存儲節(jié)點上統(tǒng)一地傳播數(shù)據(jù)流的塊。因此,訪問節(jié)點必須將相同數(shù)量的數(shù)據(jù)發(fā)送到每個存儲節(jié)點。寫入數(shù)據(jù)流的帶寬將受到訪問節(jié)點與存儲節(jié)點之間的最慢網(wǎng)絡鏈路的吞吐量的限制。在本發(fā)明中提出的架構中,訪問節(jié)點在選擇超節(jié)點并且因此它們存儲數(shù)據(jù)的存儲節(jié)點時具有更多的自由度。這可用于改善非對稱系統(tǒng)中的寫性能。如上所述,假設在本發(fā)明中,網(wǎng)絡由節(jié)點組構成。組中的節(jié)點可以高的點對點吞吐量來通信,同時組之間的鏈路提供較低的每節(jié)點吞吐量。
訪問節(jié)點將試圖僅在它們自己的組中的存儲節(jié)點上分配流運行,以避免使用用于寫入的組間鏈路。由于流運行被分配給超節(jié)點而不是直接分配給存儲節(jié)點,所以數(shù)據(jù)FPN密鑰空間被分隔,使得數(shù)據(jù)FPN中的前綴的范圍對應于一組節(jié)點。如果超節(jié)點被分配給一組節(jié)點,則全部它的組件被保持在屬于該組的存儲節(jié)點上。修改流運行分配算法以僅考慮與訪問節(jié)點相同的組中的超節(jié)點。只有所選超節(jié)點滿了時,才執(zhí)行不受節(jié)點組約束的常規(guī)分配。該組的本地的分配策略消除了經(jīng)過較慢鏈路的大部分帶寬密集型數(shù)據(jù)傳遞。除非組系統(tǒng)的容量被耗盡,否則僅由與訪問節(jié)點相同的組中的存儲節(jié)點處理塊寫入。仍然統(tǒng)一地向全部索引節(jié)點發(fā)送GBI查詢,但是它們并不消耗大量帶寬。類似地,如果重復被存儲在不同的組中,則當寫入重復塊時由轉(zhuǎn)換高速緩沖存儲器完成的Scc索引預取可以使用一些組間帶寬。但是,由于Scc索引比數(shù)據(jù)的尺寸小,所以它們不應該超過組間吞吐量。在故障之后的數(shù)據(jù)重構也不需要太多組間帶寬,因為全部超節(jié)點組件處于相同的組中。但是,該策略伴隨一些折中。僅在單個節(jié)點組中完成容量平衡——如果一些客戶端比其他客戶端寫入更多數(shù)據(jù),則在它們的組中的空閑空間將比其他組中的空閑空間更快速地被耗盡。如果相同組中的存儲節(jié)點的故障不是獨立的,則系統(tǒng)的冗余可能減小,因為超節(jié)點的全部組件被放置到相同的節(jié)點組中。雖然新的寫入不產(chǎn)生跨組的網(wǎng)絡流量,但是對讀取的影響依賴于去重形式。例如,當訪問節(jié)點寫入已經(jīng)由連接到不同組的訪問節(jié)點寫入的數(shù)據(jù)時,數(shù)據(jù)僅被存儲在原始組中。從第二訪問節(jié)點讀取數(shù)據(jù)將必須從該原始組傳遞全部數(shù)據(jù)。在該情況下,讀取性能可能比在全部超節(jié)點上統(tǒng)一地散布數(shù)據(jù)更差。在本發(fā)明中主張不管最壞情況中的較低的讀吞吐量,當考慮該網(wǎng)絡的較低成本時,部署非對稱網(wǎng)絡可能有意義。首先,如果相同的客戶端系統(tǒng)始終通過一個網(wǎng)絡組中的訪問節(jié)點被備份,則僅存在于該系統(tǒng)上的任意唯一數(shù)據(jù)將有可能被存儲在該組中。將可以高吞吐量讀取該數(shù)據(jù)。其次,故障客戶端系統(tǒng)的恢復典型地涉及僅讀取若干備份圖像。如果同時讀取極少量流,則組間鏈路應該足夠快而不是瓶頸,即使數(shù)據(jù)被存儲在其他節(jié)點組上。并且最終,從遠程節(jié)點組讀取數(shù)據(jù)無需與同時的寫入競爭組間網(wǎng)絡吞吐量。(對掠奪者(marauder)的延遲和彈性)與基于哈希的分布相比,所提出的架構可以對塊寫入引入更多的延遲,因為需要額外的網(wǎng)絡跳來查詢?nèi)謮K索引。并且其可能對于多個相對慢的客戶端具有更高的寫延遲一需要更多的時間來容納用于順序?qū)懭氲拇缶彌_器。這是不將來自不同流的塊混合的結果。在進行統(tǒng)一的基于哈希的分布的系統(tǒng)中,來自全部流的塊可以被累積到相同的寫緩沖器中并且被順序地刷寫到盤。另一方面,在基于哈希的分布系統(tǒng)中所需的、可以顯著地增加寫延遲的任意內(nèi)嵌的流分類在該系統(tǒng)中是不必要的。所提出的架構對于掠奪者更有彈性,其中該掠奪者是工作得足夠快而沒有被聲明故障但是比其他節(jié)點操作得更慢的節(jié)點。在該架構中,僅訪問具體節(jié)點的流受該節(jié)點的緩慢或故障影響。利用基于哈希的分布,由網(wǎng)絡中最緩慢的節(jié)點確定整個系統(tǒng)的性能。因為僅若干存儲節(jié)點正服務于代表單個流的寫請求,所以能夠請求流中的未處理的數(shù)據(jù)的明確的刷寫以減小延遲。例如當處理這樣一些客戶端中的NFS同步請求時,這是有用的,其中該客戶端通常阻止進一步操作直到以前提交的全部數(shù)據(jù)被寫入為止。訪問節(jié)點可以請求明確的高優(yōu)先權的刷寫,因為一次僅由一個流向一個同步運行發(fā)送寫入。在基于哈希的分布的系統(tǒng)中這是不可行的,因為必須發(fā)送對于全部存儲節(jié)點的請求。(同步運行到超節(jié)點的靜態(tài)對動態(tài)分配)在本發(fā)明中提出的解決方案中,向超節(jié)點靜態(tài)地分配同步運行。該分配僅基于同步運行Id并且在不改變同步運行的Id的情況下不改變??梢钥紤]同步運行到超節(jié)點的動態(tài)映射,其中必須查找同步運行的數(shù)據(jù)被存儲到的存儲節(jié)點并且該存儲節(jié)點不是由同步運行Id靜態(tài)地確定的。該動態(tài)映射的優(yōu)點在于單獨的超節(jié)點可以改變位置以適應系統(tǒng)中的改變。例如,在非對稱網(wǎng)絡中,同步運行可以被移動得更靠近最頻繁地訪問它們的訪問節(jié)點。本發(fā)明決定在所提出的系統(tǒng)中不進行附加映射,因為其將引入額外的網(wǎng)絡跳以用于同步運行到存儲節(jié)點查找,從而增加讀取延遲。(結論)本發(fā)明引入了用于高效的可縮放高性能內(nèi)嵌去重的新架構,其將用于精確去重的基于DHT的全局塊索引與流已知的順序數(shù)據(jù)放置分離。以上描述已顯示與現(xiàn)有解決方案相比,當同時讀取的流的數(shù)目隨著系統(tǒng)尺寸增長時,在本發(fā)明中提出的架構改善了大型系統(tǒng)中的讀取性能。即使面臨數(shù)據(jù)刪除和節(jié)點添加,該系統(tǒng)也保留流局域性,同時維持存儲節(jié)點之間的良好的容量平衡。當同時寫入多個流時,其還避免了對來自不同流的塊進行交織。 在對稱網(wǎng)絡中,基于哈希的分布提供略高的寫吞吐量,但是以讀取性能為顯著的代價。即使出現(xiàn)同時讀取,在本發(fā)明中提出的架構在非對稱系統(tǒng)中也提供明顯更高的寫性能,但是讀性能高度地依賴于訪問形式。進行基于哈希的分布的現(xiàn)有系統(tǒng)在小型到中型系統(tǒng)中更有效,因為它們避免了負載平衡和熱點的問題。但是,我們發(fā)現(xiàn)當需要高多流讀取吞吐量時,在本發(fā)明中提出的架構更好地適用于大型安裝。<第二示例性實施方式>將參考圖4到圖10來描述本發(fā)明的第二示例性實施方式。圖4是用于顯示整個系統(tǒng)的配置的框圖。圖5是用于示意性地顯示存儲系統(tǒng)的框圖,并且圖6是用于顯示配置的功能框圖。圖7到圖10是用于說明存儲系統(tǒng)的操作的說明視圖。這里的示例性實施方式顯示了存儲系統(tǒng)是這樣一種系統(tǒng)的情況,該系統(tǒng)諸如是HYDRAstor并且通過連接多個服務器計算機來配置該系統(tǒng)。但是,本發(fā)明的存儲系統(tǒng)不限于具有多個計算機的配置并且可以由一個計算機來配置。如圖4中所示,本發(fā)明的存儲系統(tǒng)10經(jīng)由網(wǎng)絡N被連接到用于控制備份過程的備份系統(tǒng)11。備份系統(tǒng)11獲得存儲在經(jīng)由網(wǎng)絡N連接的備份目標設備12中的備份目標數(shù)據(jù)(存儲目標數(shù)據(jù)),并且請求存儲系統(tǒng)10進行存儲。因此,存儲系統(tǒng)10將請求被存儲的備份目標數(shù)據(jù)作為備份來存儲。如圖5中所示,示例性實施方式的存儲系統(tǒng)10采用連接多個服務器計算機的配置。具體而言,存儲系統(tǒng)10裝配有充當用于控制存儲系統(tǒng)10的存儲/再生操作的服務器計算機的訪問節(jié)點IOA(第一服務器)、充當裝配有用于存儲數(shù)據(jù)的存儲設備的服務器計算機的存儲節(jié)點IOB(第二服務器)以及用于存儲表示數(shù)據(jù)存儲目的地的索引數(shù)據(jù)的存儲節(jié)點IOC (第三服務器)。訪問節(jié)點IOA的數(shù)目、存儲節(jié)點IOB的數(shù)目和存儲節(jié)點IOC的數(shù)目不限于圖5中所示的那些數(shù)目,并且可以采用連接更多節(jié)點10A、10B和IOC的配置。此外,此示例性實施方式的存儲系統(tǒng)10具有分割存儲目標數(shù)據(jù)并且將它們以分布式的方式存儲在作為存儲設備的存儲節(jié)點IOB中的功能。存儲系統(tǒng)10還具有通過使用用于表示存儲目標數(shù)據(jù)(塊數(shù)據(jù))的特征的唯一哈希值來檢查相同內(nèi)容的數(shù)據(jù)是否已經(jīng)被存儲的功能,并且對于已經(jīng)被存儲的數(shù)據(jù),通過引用該數(shù)據(jù)的存儲位置來消除重復存儲。下面將詳細描述具體的存儲過程。圖6顯示了存儲系統(tǒng)10的配置。如該圖中所示,構成存儲系統(tǒng)10的訪問節(jié)點IOA包括用于控制要存儲的數(shù)據(jù)的讀和寫的數(shù)據(jù)存儲控制單元21。應該注意到,通過安裝在諸如圖5中所示的訪問節(jié)點IOA的CPU(中央處理器)的算術設備中的程序來配置數(shù)據(jù)存儲控制單元21。例如,在存儲在存儲介質(zhì)(例如CD-ROM)中的狀態(tài)中向存儲系統(tǒng)10提供上述程序。備選地,可以將程序存儲在網(wǎng)絡上的另一個服務器計算機的存儲設備中,并且從其他服務器計算機經(jīng)由網(wǎng)絡向存儲系統(tǒng)10提供該程序。后文將詳細描述數(shù)據(jù)存儲控制單元21的配置。首先,當數(shù)據(jù)存儲控制單元21接收作為備份目標數(shù)據(jù)A的流數(shù)據(jù)的輸入時,數(shù)據(jù)存儲控制單元21將備份目標數(shù)據(jù)A分割成預定容量(例如64KB)的塊數(shù)據(jù)D,如圖7中所示。然后,基于該塊數(shù)據(jù)D的數(shù)據(jù)內(nèi)容,數(shù)據(jù)存儲控制單元21計算用于表示該數(shù)據(jù)內(nèi)容的唯一哈希值H(特征數(shù)據(jù))。例如,通過使用預設的哈希函數(shù)來根據(jù)塊數(shù)據(jù)D的數(shù)據(jù)內(nèi)容計算哈希值H。然后,數(shù)據(jù)存儲控制單元21執(zhí)行重復確定以確定新近將要存儲的塊數(shù)據(jù)D是否已經(jīng)被存儲在存儲節(jié)點IOB即存儲設備中。此時,數(shù)據(jù)存儲控制單元21檢查塊數(shù)據(jù)D的哈希值是否存在于最近已經(jīng)在訪問節(jié)點IOA中被讀取的任何下述SCC索引B2中。如果塊數(shù)據(jù)D的哈希值不存在于任何SCC索引B2中,則數(shù)據(jù)存儲控制單元21隨后檢查新近將要存儲的塊數(shù)據(jù)D的哈希值是否存在于被存儲在索引節(jié)點IOC中的全局塊索引Cl中。此外,在SCC索引B2在訪問節(jié)點IOA中未被讀取的情況下,數(shù)據(jù)存儲控制單元21還檢查新近將要存儲的塊數(shù)據(jù)D的哈希值是否存在于被存儲在索引節(jié)點IOC中的全局塊索引Cl中。如果新近將要存儲的塊數(shù)據(jù)D的哈希值不存在于被存儲在索引節(jié)點IOC中的全局塊索引Cl中,則數(shù)據(jù)存儲控制單元21最新將流數(shù)據(jù)的塊數(shù)據(jù)保存在存儲節(jié)點IOB中。將參考圖7和圖8具體描述數(shù)據(jù)存儲控制單元21將塊數(shù)據(jù)D存儲在存儲節(jié)點IOB中的方面。數(shù)據(jù)存儲控制單元21順序地將通過分割作為備份目標數(shù)據(jù)A的數(shù)據(jù)流而生成的塊數(shù)據(jù)Dl等等存儲在具體存儲節(jié)點IOB中形成的SCC文件BI中。此時,數(shù)據(jù)存儲控制單元21確定已用存儲容量最低或者存在開放的SCC文件BI的存儲節(jié)點IOB作為用于存儲塊數(shù)據(jù)Dl等等的具體存儲節(jié)點10B。應該注意到,數(shù)據(jù)存儲控制單元21可以借助其他方法來確定用于存儲塊數(shù)據(jù)Dl等等的存儲節(jié)點10B。然后,數(shù)據(jù)存儲控制單元21在SCC文件BI中存儲將要存儲的數(shù)據(jù)流的塊數(shù)據(jù)D1、D2、D3等等的多個連續(xù)的單元。此時,數(shù)據(jù)存儲控制單元21將SCC文件BI中的塊數(shù)據(jù)Dl、D2、D3等等的各個單元的存儲位置與存儲的塊數(shù)據(jù)D1、D2、D3等等的哈希值H相關聯(lián),并且將它們作為SCC索引B2(用于存儲位置指定表)存儲在用于存儲塊數(shù)據(jù)D1、D2、D3等等的存儲節(jié)點IOB中。此外,數(shù)據(jù)存儲控制單元21將作為用于指定用于存儲塊數(shù)據(jù)Dl、D2、D3的存儲節(jié)點IOB的標識信息(存儲設備標識信息)的ID (例如用于表示具體SCC文件BI中的特定區(qū)域的ID (見圖8))與塊數(shù)據(jù)D1、D2、D3的哈希值相關聯(lián),并且將它們存儲在索引節(jié)點IOC中作為全局塊索引Cl (存儲設備指定表)。在這里,數(shù)據(jù)存儲控制單元21應該將用于指定存儲節(jié)點IOB的ID不與哈希值而是與哈希值的一部分相關聯(lián)并且存儲它們。此時,數(shù)據(jù)存儲控制單元21以分布式的方式將全局塊索引Cl存儲在多個索引節(jié)點IOC中。為了以分布式的方式存儲哈希值和ID,可以使用任意方法。由于如上所述地存儲數(shù)據(jù),所以將備份目標數(shù)據(jù)A的塊數(shù)據(jù)D1、D2、D3等等的多個連續(xù)的單元連續(xù)地存儲在同一存儲節(jié)點IOB中,并且還將用于指示它們的存儲位置的數(shù)據(jù)單元連續(xù)地存儲在SCC索引B2中。由全局塊索引Cl管理用于存儲塊數(shù)據(jù)D1、D2、D3等等的存儲節(jié)點IOB (具體SCC文件BI中的特定區(qū)域)。應該注意到,實際地執(zhí)行上述塊數(shù)據(jù)Dl、D2、D3等等的存儲過程,使得存儲節(jié)點IOB (超節(jié)點)的組被用作具體存儲節(jié)點10B,并且以分布式的方式存儲塊數(shù)據(jù)D1、D2、D3等等的各個單元。現(xiàn)在將參考圖7來描述通過進一步分割塊數(shù)據(jù)來存儲塊數(shù)據(jù)的方面。數(shù)據(jù)存儲控制單元21如上所述地壓縮新近將要存儲的塊數(shù)據(jù)D,并且如圖7中所示地將該數(shù)據(jù)分割成具有預定容量的多個分段數(shù)據(jù)的片段。例如,如由圖7中的附圖標記EI到E9所示,數(shù)據(jù)存儲控制單元21將數(shù)據(jù)分割成9個分段數(shù)據(jù)的片段(分割數(shù)據(jù)41)。此夕卜,數(shù)據(jù)存儲控制單元21生成冗余數(shù)據(jù)使得即使通過分割獲得的一些分段數(shù)據(jù)丟失了,也可以恢復原始數(shù)據(jù),并且數(shù)據(jù)存儲控制單元21將冗余數(shù)據(jù)存儲在通過分割獲得的分段數(shù)據(jù)41中。例如,如由圖7中的附圖標記EIO到E12所示,數(shù)據(jù)存儲控制單元21增加3個分段數(shù)據(jù)(冗余數(shù)據(jù)42)。因此,數(shù)據(jù)存儲控制單元21生成數(shù)據(jù)集合40,數(shù)據(jù)集合40包括由9個分割數(shù)據(jù)41和3個冗余數(shù)據(jù)構成的12個分段數(shù)據(jù)。然后數(shù)據(jù)存儲控制單元21 —個接一個地分布并且存儲分段數(shù)據(jù),其中該分段數(shù)據(jù)將生成的數(shù)據(jù)集合組合成在作為超節(jié)點的存儲節(jié)點IOB的組中形成的存儲區(qū)域31。例如,如圖7中所示,在生成12個分段數(shù)據(jù)El到E12的情況下,數(shù)據(jù)存儲控制單元21將分段數(shù)據(jù)El到E12中的一個存儲在形成在12個存儲區(qū)域31中的數(shù)據(jù)存儲文件Fl到F12(數(shù)據(jù)存儲區(qū)域)中的一個數(shù)據(jù)存儲文件中。接下來,將參考圖9和圖10來描述這樣一種情況,其中在該情況中輸入具有與上述數(shù)據(jù)流A數(shù)據(jù)內(nèi)容幾乎一致的數(shù)據(jù)內(nèi)容的備份目標數(shù)據(jù)A’的數(shù)據(jù)流作為新的存儲目標數(shù)據(jù)。首先,數(shù)據(jù)存儲控制單元21執(zhí)行重復確定以確定備份目標數(shù)據(jù)A’的塊數(shù)據(jù)Dl是否已經(jīng)被存儲在作為存儲設備的存儲節(jié)點IOB中。此時,數(shù)據(jù)存儲控制單元21檢查在訪問節(jié)點IA中是否已經(jīng)讀取SCC索引B2。在該情況下,由于尚未讀取SCC索引B2,所以數(shù)據(jù)存儲控制單元21檢查新近將要存儲的塊數(shù)據(jù)Dl的哈希值(在這里是哈希值的一部分)是否存在于被存儲在索引節(jié)點IOC中的全局塊索引Cl中。如果新近將要存儲的塊數(shù)據(jù)Dl的哈希值(哈希值的一部分)存在于被存儲在索引節(jié)點IOC中的全局塊索引Cl中,則數(shù)據(jù)存儲控制單元21指定與該哈希值(哈希值的一部分)相關聯(lián)的存儲節(jié)點IOB(具體SCC文件BI的區(qū)域),并且引用存儲節(jié)點IOB中的SCC索引B2。數(shù)據(jù)存儲控制單元21將存儲在SCC索引B2中的哈希值與新近將要存儲的塊數(shù)據(jù)Dl的哈希值進行比較,并且如果它們匹配,則引用SCC索引B2并且將SCC文件BI中的塊數(shù)據(jù)的存儲位置稱為新近將要存儲的塊數(shù)據(jù)Dl。因而,新近將要存儲的塊數(shù)據(jù)Dl自身實際上并沒有被存儲,并且可以消除重復存儲。同時,數(shù)據(jù)存儲控制單元21將如上所引用的、存儲在存儲節(jié)點IOB中的SCC索引B2讀出到訪問節(jié)點10A。然后,對于備份目標數(shù)據(jù)A’的后續(xù)塊數(shù)據(jù)D2和D3,數(shù)據(jù)存儲控制單元21將塊數(shù)據(jù)D2和D3的哈希值與存儲在被讀出到訪問節(jié)點IOA的SCC索引B2中的哈希值進行比較,并且如果它們匹配,則引用SCC索引B2并且將存儲在SCC文件BI中的塊數(shù)據(jù)的存儲位置稱為新近將要存儲的塊數(shù)據(jù)D2和D3。因此,新近將要存儲的塊數(shù)據(jù)D2和塊數(shù)據(jù)D3自身實際上并沒有被存儲,并且可以消除重復存儲。此外,可以更高的速度執(zhí)行重復確定。如上所述,本發(fā)明包括多個存儲節(jié)點10B,并且實現(xiàn)了分布式的方式的數(shù)據(jù)存儲以便保持存儲節(jié)點之間的容量的良好平衡。此外,根據(jù)本發(fā)明,還能夠在索引節(jié)點IOB(超節(jié)點)的具體組中本地保持通過分割存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的預定數(shù)量的連續(xù)單元。如此,可以更高的速度執(zhí)行去重過程,并且此外,還可以更高的速度執(zhí)行數(shù)據(jù)讀取過程。<補充注釋>上面公開的示例性實施方式的全部或一部分可以被描述為以下補充注釋。下文將描述本發(fā)明的存儲系統(tǒng)100的配置的概況(見圖11)、用于存儲程序的計算機可讀介質(zhì)以及數(shù)據(jù)存儲方法。但是,本發(fā)明不限于下述配置。(補充注釋I)一種存儲系統(tǒng)100,包括:數(shù)據(jù)存儲控制單元101,該數(shù)據(jù)存儲控制單元101以分布式的方式在多個存儲設備110中存儲通過分割存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的多個單元,并且當試圖在存儲設備110中存儲具有與已被存儲在存儲設備110中的存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的數(shù)據(jù)內(nèi)容的另一條存儲目標數(shù)據(jù)時,通過參考已被存儲在該存儲設備110中的該存儲目標數(shù)據(jù)作為該另一條存儲目標數(shù)據(jù)來執(zhí)行重復存儲消除,其中該數(shù)據(jù)存儲控制單元101在該多個存儲設備110中的特定存儲設備110中存儲通過分割該存儲目標數(shù)據(jù)而生成的、該存儲目標數(shù)據(jù)的塊數(shù)據(jù)的多個連續(xù)單元,在該特定存儲設備110中彼此關聯(lián)地存儲基于該塊數(shù)據(jù)的數(shù)據(jù)內(nèi)容的特征數(shù)據(jù)和表示該塊數(shù)據(jù)在該特定存儲設備110中的存儲位置的存儲位置信息以作為存儲位置指定表,并且彼此關聯(lián)地存儲用于標識該特定存儲設備110的存儲設備標識信息和被存儲在該特定存儲設備110中的該塊數(shù)據(jù)的該特征數(shù)據(jù)以作為存儲設備110指定表。(補充注釋2)根據(jù)補充注釋I的存儲系統(tǒng),其中該數(shù)據(jù)存儲控制單元基于通過分割新近將要存儲的存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的該特征數(shù)據(jù)來參考該存儲設備指定表以便指定存儲包括該塊數(shù)據(jù)的該特征數(shù)據(jù)的該存儲位置指定表的該特定存儲設備,并且從該特定存儲設備讀出該存儲位置指定表。(補充注釋3)根據(jù)補充注釋2的存儲系統(tǒng),其中該數(shù)據(jù)存儲控制單元基于從該特定存儲設備讀出的該存儲位置指定表來確定通過分割新近將要存儲的該存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)是否已被存儲在該存儲設備中。
(補充注釋4)根據(jù)補充注釋3的存儲系統(tǒng),其中如果通過分割新近將要存儲的該存儲目標數(shù)據(jù)而生成的該塊數(shù)據(jù)的該特征數(shù)據(jù)不存在于從該特定存儲設備讀出的該存儲位置指定表中,則該數(shù)據(jù)存儲控制單元通過基于通過分割新近將要存儲的該存儲目標數(shù)據(jù)而生成的該塊數(shù)據(jù)的該特征數(shù)據(jù)來參考該存儲設備指定表而指定存儲包括該塊數(shù)據(jù)的該特征數(shù)據(jù)的另一存儲位置指定表的另一特定存儲設備,并且從該另一特定存儲設備讀出該另一存儲位置指定表。(補充注釋5)根據(jù)補充注釋I的存儲系統(tǒng),還包括:至少一個第一服務器,其控制將存儲目標數(shù)據(jù)存儲到多個存儲設備中的操作,以及多個第二服務器,其構成該多個存儲設備,其中該數(shù)據(jù)存儲控制單元將該存儲位置指定表從該第二服務器中的一個第二服務器讀出到該第一服務器。(補充注釋6)根據(jù)補充注釋5的存儲系統(tǒng),還包括:多個第三服務器,其存儲該存儲設備指定表,其中該數(shù)據(jù)存儲控制單元以分布式的方式在該多個第三服務器中存儲該存儲設備指定表。(補充注釋7)一種存儲程序的計算機可讀介質(zhì),該程序包括指令,該指令用于使信息處理設備實現(xiàn):數(shù)據(jù)存儲控制單元,該數(shù)據(jù)存儲控制單元以分布式的方式在多個存儲設備中存儲通過分割存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的多個單元,并且當試圖在存儲設備中存儲具有與已被存儲在存儲設備中的存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的數(shù)據(jù)內(nèi)容的另一條存儲目標數(shù)據(jù)時,通過參考已被存儲在該存儲設備中的該存儲目標數(shù)據(jù)作為該另一條存儲目標數(shù)據(jù)來執(zhí)行重復存儲消除,其中該數(shù)據(jù)存儲控制單元在該多個存儲設備中的特定存儲設備中存儲通過分割該存儲目標數(shù)據(jù)而生成的、該存儲目標數(shù)據(jù)的塊數(shù)據(jù)的多個連續(xù)單元,在該特定存儲設備中彼此關聯(lián)地存儲基于該塊數(shù)據(jù)的數(shù)據(jù)內(nèi)容的特征數(shù)據(jù)和表示該塊數(shù)據(jù)在該特定存儲設備中的存儲位置的存儲位置信息以作為存儲位置指定表,并且彼此關聯(lián)地存儲用于標識該特定存儲設備的存儲設備標識信息和被存儲在該特定存儲設備中的該塊數(shù)據(jù)的該特征數(shù)據(jù)以作為存儲設備指定表。(補充注釋8)根據(jù)補充注釋7的存儲該程序的計算機可讀介質(zhì),其中該數(shù)據(jù)存儲控制單元基于通過分割新近將要存儲的存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的該特征數(shù)據(jù)來參考該存儲設備指定表以便指定存儲包括該塊數(shù)據(jù)的該特征數(shù)據(jù)的該存儲位置指定表的該特定存儲設備,并且從該特定存儲設備讀出該存儲位置指定表。(補充注釋9)
一種數(shù)據(jù)存儲方法,用于以分布式的方式在多個存儲設備中存儲通過分割存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的多個單元,并且當試圖在存儲設備中存儲具有與已被存儲在存儲設備中的存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的數(shù)據(jù)內(nèi)容的另一條存儲目標數(shù)據(jù)時,通過參考已被存儲在該存儲設備中的該存儲目標數(shù)據(jù)作為該另一條存儲目標數(shù)據(jù)來執(zhí)行重復存儲消除,該方法包括:在該多個存儲設備中的特定存儲設備中存儲通過分割該存儲目標數(shù)據(jù)而生成的、該存儲目標數(shù)據(jù)的塊數(shù)據(jù)的多個連續(xù)單元,在該特定存儲設備中彼此關聯(lián)地存儲基于該塊數(shù)據(jù)的數(shù)據(jù)內(nèi)容的特征數(shù)據(jù)和表示該塊數(shù)據(jù)在該特定存儲設備中的存儲位置的存儲位置信息以作為存儲位置指定表,以及彼此關聯(lián)地存儲用于標識該特定存儲設備的存儲設備標識信息和被存儲在該特定存儲設備中的該塊數(shù)據(jù)的該特征數(shù)據(jù)以作為存儲設備指定表。(補充注釋10)根據(jù)補充注釋9的數(shù)據(jù)存儲方法,還包括:基于通過分割新近將要存儲的存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的該特征數(shù)據(jù)來參考該存儲設備指定表以便指定存儲包括該塊數(shù)據(jù)的該特征數(shù)據(jù)的該存儲位置指定表的該特定存儲設備,以及從該特定存儲設備讀出該存儲位置指定表。
權利要求
1.一種存儲系統(tǒng),包括: 數(shù)據(jù)存儲控制單元,所述數(shù)據(jù)存儲控制單元以分布式的方式在多個存儲設備中存儲通過分割存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的多個單元,并且當試圖在存儲設備中存儲具有與已被存儲在存儲設備中的存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的數(shù)據(jù)內(nèi)容的另一條存儲目標數(shù)據(jù)時,通過參考已被存儲在所述存儲設備中的所述存儲目標數(shù)據(jù)作為所述另一條存儲目標數(shù)據(jù)來執(zhí)行重復存儲消除,其中 所述數(shù)據(jù)存儲控制單元在所述多個存儲設備中的特定存儲設備中存儲通過分割所述存儲目標數(shù)據(jù)而生成的所述存儲目標數(shù)據(jù)的塊數(shù)據(jù)的多個連續(xù)單元,在所述特定存儲設備中彼此關聯(lián)地存儲基于所述塊數(shù)據(jù)的數(shù)據(jù)內(nèi)容的特征數(shù)據(jù)和表示所述塊數(shù)據(jù)在所述特定存儲設備中的存儲位置的存儲位置信息,以作為存儲位置指定表,并且彼此關聯(lián)地存儲用于標識所述特定存儲設備的存儲設備標識信息和被存儲在所述特定存儲設備中的所述塊數(shù)據(jù)的所述特征數(shù)據(jù),以作為存儲設備指定表。
2.根據(jù)權利要求1所述的存儲系統(tǒng),其中 所述數(shù)據(jù)存儲控制單元基于通過分割新近將要存儲的存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的所述特征數(shù)據(jù)來參考所述存儲設備指定表,以便指定存儲包括所述塊數(shù)據(jù)的所述特征數(shù)據(jù)的所述存儲位置指定表的所述特定存儲設備,并且從所述特定存儲設備讀出所述存儲位置指定表。
3.根據(jù)權利要求2所述的存儲系統(tǒng),其中 所述數(shù)據(jù)存儲控制單元基于從所述特定存儲設備讀出的所述存儲位置指定表,來確定通過分割新近將要存儲的所述存儲目標數(shù)據(jù)而生成的所述塊數(shù)據(jù)是否已被存儲在所述存儲設備中。
4.根據(jù)權利要求3所述的存儲系統(tǒng),其中 如果通過分割新近將要存儲的所述存儲目標數(shù)據(jù)而生成的所述塊數(shù)據(jù)的所述特征數(shù)據(jù)不存在于從所述特定存儲設備讀出的所述存儲位置指定表中,則所述數(shù)據(jù)存儲控制單元通過基于通過分割新近將要存儲的所述存儲目標數(shù)據(jù)而生成的所述塊數(shù)據(jù)的所述特征數(shù)據(jù)來參考所述存儲設備指定表,來指定存儲包括所述塊數(shù)據(jù)的所述特征數(shù)據(jù)的另一存儲位置指定表的另一特定存儲設備,并且從所述另一特定存儲設備讀出所述另一存儲位置指定表。
5.根據(jù)權利要求1所述的存儲系統(tǒng),還包括: 至少一個第一服務器,所述至少一個第一服務器控制將存儲目標數(shù)據(jù)存儲到多個存儲設備中的操作,以及 多個第二服務器,所述多個第二服務器構成所述多個存儲設備,其中 所述數(shù)據(jù)存儲控制單元將所述存儲位置指定表從所述第二服務器中的一個第二服務器讀出到所述第一服務器。
6.根據(jù)權利要求5所述的存儲系統(tǒng),還包括: 多個第三服務器,所述多個第三服務器存儲所述存儲設備指定表,其中 所述數(shù)據(jù)存儲控制單元以分布式的方式在所述多個第三服務器中存儲所述存儲設備指定表。
7.一種存儲程序的計算機可讀介質(zhì),所述程序包括指令,所述指令用于使信息處理設備實現(xiàn): 數(shù)據(jù)存儲控制單元,所述數(shù)據(jù)存儲控制單元以分布式的方式在多個存儲設備中存儲通過分割存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的多個單元,并且當試圖在存儲設備中存儲具有與已被存儲在存儲設備中的存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的數(shù)據(jù)內(nèi)容的另一條存儲目標數(shù)據(jù)時,通過參考已被存儲在所述存儲設備中的所述存儲目標數(shù)據(jù)作為所述另一條存儲目標數(shù)據(jù)來執(zhí)行重復存儲消除,其中 所述數(shù)據(jù)存儲控制單元在所述多個存儲設備中的特定存儲設備中存儲通過分割所述存儲目標數(shù)據(jù)而生成的所述存儲目標數(shù)據(jù)的塊數(shù)據(jù)的多個連續(xù)單元,在所述特定存儲設備中彼此關聯(lián)地存儲基于所述塊數(shù)據(jù)的數(shù)據(jù)內(nèi)容的特征數(shù)據(jù)和表示所述塊數(shù)據(jù)在所述特定存儲設備中的存儲位置的存儲位置信息,以作為存儲位置指定表,并且彼此關聯(lián)地存儲用于標識所述特定存儲設備的存儲設備標識信息和被存儲在所述特定存儲設備中的所述塊數(shù)據(jù)的所述特征數(shù)據(jù),以作為存儲設備指定表。
8.根據(jù)權利要求7所述的存儲所述程序的計算機可讀介質(zhì),其中 所述數(shù)據(jù)存儲控制單元基于通過分割新近將要存儲的存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的所述特征數(shù)據(jù)來參考所述存儲設備指定表,以便指定存儲包括所述塊數(shù)據(jù)的所述特征數(shù)據(jù)的所述存儲位置指定表的所述特定存儲設備,并且從所述特定存儲設備讀出所述存儲位置指定表。
9.一種數(shù)據(jù)存儲方法,用于以分布式的方式在多個存儲設備中存儲通過分割存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的多個單元,并且當試圖在存儲設備中存儲具有與已被存儲在存儲設備中的存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的數(shù)據(jù)內(nèi)容的另一條存儲目標數(shù)據(jù)時,通過參考已被存儲在所述存儲設備中的所述存儲目標數(shù)據(jù)作為所述另一條存儲目標數(shù)據(jù)來執(zhí)行重復存儲消除,所述方法包括: 在所述多個存儲設備中的 特定存儲設備中存儲通過分割所述存儲目標數(shù)據(jù)而生成的所述存儲目標數(shù)據(jù)的塊數(shù)據(jù)的多個連續(xù)單元,在所述特定存儲設備中彼此關聯(lián)地存儲基于所述塊數(shù)據(jù)的數(shù)據(jù)內(nèi)容的特征數(shù)據(jù)和表示所述塊數(shù)據(jù)在所述特定存儲設備中的存儲位置的存儲位置信息,以作為存儲位置指定表,以及彼此關聯(lián)地存儲用于標識所述特定存儲設備的存儲設備標識信息和被存儲在所述特定存儲設備中的所述塊數(shù)據(jù)的所述特征數(shù)據(jù),以作為存儲設備指定表。
10.根據(jù)權利要求9所述的數(shù)據(jù)存儲方法,還包括: 基于通過分割新近將要存儲的存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的所述特征數(shù)據(jù)來參考所述存儲設備指定表,以便指定存儲包括所述塊數(shù)據(jù)的所述特征數(shù)據(jù)的所述存儲位置指定表的所述特定存儲設備,以及從所述特定存儲設備讀出所述存儲位置指定表。
全文摘要
存儲系統(tǒng)包括數(shù)據(jù)存儲控制單元,該數(shù)據(jù)存儲控制單元以分布式的方式在多個存儲設備中存儲通過分割存儲目標數(shù)據(jù)而生成的塊數(shù)據(jù)的多個單元,并且執(zhí)行重復存儲消除。該數(shù)據(jù)存儲控制單元在該多個存儲設備中的特定存儲設備中存儲通過分割該存儲目標數(shù)據(jù)而生成的、該存儲目標數(shù)據(jù)的塊數(shù)據(jù)的多個連續(xù)單元,在該特定存儲設備中彼此關聯(lián)地存儲基于該塊數(shù)據(jù)的數(shù)據(jù)內(nèi)容的特征數(shù)據(jù)和表示該塊數(shù)據(jù)在該特定存儲設備中的存儲位置的存儲位置信息以作為存儲位置指定表,并且彼此關聯(lián)地存儲用于標識該特定存儲設備的存儲設備標識信息和被存儲在該特定存儲設備中的該塊數(shù)據(jù)的該特征數(shù)據(jù)以作為存儲設備指定表。
文檔編號G06F3/06GK103098015SQ20118004325
公開日2013年5月8日 申請日期2011年9月21日 優(yōu)先權日2010年9月30日
發(fā)明者M·韋爾尼克基, J·薩克澤普科維斯基, C·達布尼克基 申請人:日本電氣株式會社