使用基于云的對象存儲的消除重復分布式文件系統的制作方法
【專利摘要】本發明題為“使用基于云的對象存儲的消除重復分布式文件系統”。公開用于提供使用基于云的對象存儲的消除重復的分布式文件系統的技術。在多種實施例中,接收要存儲包含多個文件數據塊的文件的請求。確定要存儲所述多個塊的至少子集。至少部分地通過提供指示來對所述請求予以響應,所述指示是要將包含所述文件的所述多個塊中至少子集的兩個或更多個塊作為包含所述兩個或更多個塊的組合塊數據的單個存儲的對象來存儲。
【專利說明】
使用基于云的對象存儲的消除重復分布式文件系統
【背景技術】
[0001]分布式文件系統、文件貢獻服務等均已提供。在一種方法中,客戶端系統上運行的文件系統客戶端、應用和/或代理可以接收客戶端系統上運行的應用發出的文件系統調用,并且可以配置成對遠程文件系統服務器,例如元數據服務器發出對應的調用。例如,為了存儲或更新文件,文件系統客戶端可以生成寫請求并將其發送到文件系統源數據服務器。寫請求可以標識期望寫入文件的多個數據塊。該元數據服務器可以配置成提供響應,該響應指示例如基于云的對象存儲中客戶端應將數據寫入的一個或多個位置。
[0002]可以通過使用與可以優化基于云的或其他對象存儲來存儲對象的對象大小相比相對較小的數據塊來優化一些文件系統特征,如消除重復(de-dup I i cat i on )。
【附圖說明】
[0003]下文詳細描述和附圖中公開了本發明的多種實施例。
[0004]圖1是圖示分布式文件系統和環境的實施例的框圖。
[0005]圖2是圖示客戶端系統的實施例的框圖。
[0006]圖3是圖示分布式文件系統的實施例的框圖。
[0007]圖4是圖示用于將文件或其他文件系統對象存儲在分布式文件系統中的過程實施例的流程圖。
[0008]圖5是圖示用于將文件或其他文件系統對象存儲在分布式文件系統中的過程實施例的流程圖。
[0009]圖6是圖示用于存儲與分布式文件系統關聯的文件分段或“±夬”數據的過程實施例的流程圖。
[0010]圖7是圖示用于訪問分布式文件系統中存儲的文件或其他文件系統對象的過程實施例的流程圖。
[0011]圖8是圖示用于處理要訪問分布式文件系統中存儲的文件或其他文件系統對象的請求的過程實施例的流程圖。
[0012]圖9是圖示分布式文件系統的實施例中使用的一組示例文件系統元數據表的框圖。
[0013]圖10是圖示分布式文件系統的實施例中不同粒度級別的文件分割的示例的框圖。
[0014]圖11是圖示用于配置分布式文件系統以存儲文件數據的過程實施例的流程圖。
[0015]圖12是圖示用于在分布式文件系統的實施例中存儲文件數據的元數據表示例的框圖。
[0016]圖13是圖示用于驗證如存儲在基于云的對象存儲中的分布式文件系統數據的過程實施例的流程圖。
[0017]圖14是圖示與驗證分布式文件系統數據為存儲在基于云的對象存儲中結合來管理已緩存的文件數據的過程實施例的流程圖。
[0018]圖15是圖示用于確定與多個文件數據塊關聯的存儲的對象能夠被刪除的過程實施例的流程圖。
【具體實施方式】
[0019]本發明能夠采用多種方式實現,包括作為過程;裝置;系統;組成物;包含計算機可讀存儲介質上的計算機程序產品;和/或處理器,如配置成執行耦合到處理器的存儲器上存儲和/或其提供的指令的處理器。在本說明書中,這些實現或本發明可以采用的任何其他形式可以稱為技術。一般來說,在本發明范圍內,可以改變所公開的過程的步驟的次序。除非另行指明,否則如描述為配置成執行任務的處理器或存儲器的組件可以實現為在給定時間臨時性地配置成執行該任務的通用組件或制造成執行該任務的特定組件。正如本文使用的,術語“處理器”是指配置成處理數據,如計算機程序指令的一個或多個裝置、電路和/或處理核。
[0020]本發明的一個或多個實施例的詳細描述是結合圖示本發明原理的附圖來給出的。本發明是結合此類實施例來描述的,但是本發明不限于任何實施例。本發明的范圍僅由權利要求來限制,并且本發明涵蓋多種替代、修改和等效物。在下文的詳細描述中,闡述許多具體細節,以便透徹地理解本發明。這些細節是出于示例的目的提供的,并且無需這些具體細節的其中一些或全部,本發明可以根據權利要求來實施。為了簡明的目的,與本發明相關的技術領域中公知的技術材料不予詳細描述,以不致使本發明非必要地晦澀難懂。
[0021]公開一種消除重復分布式文件系統,其按以消除重復為目的的第一大小的塊來分割文件但是將文件數據存儲在遠遠更大對象中以便利用典型的基于云的對象存儲的性能特點。在多種實施例中,客戶端設備上運行的文件系統客戶端將要存儲的文件分割成第一大小的“塊(chunks)”。將表示這些塊的數據,如相應塊的散列或其他表示發送到遠程文件系統元數據服務器。該服務器執行消除重復處理以確定文件系統可能已經存儲塊中哪一個(如果有的話)。對于文件系統尚未存儲的那些塊,該服務器以指令響應客戶端,該指令是要將多個塊組合在組合的對象中并將通過HTTP PUT或其他請求將組合的對象的指令存儲在基于云的對象存儲中服務器使用例如統一資源定位符(URI)或服務器提供的其他定位符指定的位置處。
[0022]圖1是圖示分布式文件系統和環境的實施例的框圖。在所示的示例中,分布式文件系統環境100包括多個客戶端系統和/或設備,在圖1中由客戶端102、104和106表示。在所示示例中,客戶端(無線方式或其他方式)連接到網絡108,例如,局域網(LAN)、廣域網(WAN)、因特網和/或一個或多個其他公眾和/或專用網絡的其中一種或多種。這些客戶端能通過網絡108訪問文件系統元數據服務器110。相應客戶端,如客戶端102、104和106上的應用發出文件系統調用,這在多種實施例中促成對文件系統元數據服務器110發出對應的遠程調用。例如,客戶端上的文件系統客戶端、代理或其他實體可以攔截或以其他方式接收該應用對本地(例如,原生)文件系統的調用,并且可以將此類調用重定向到配置成對文件系統元數據服務器110發出對應遠程調用(例如,對于該應用透明地)的代理。
[0023]在所示的示例中,將包括文件系統中存儲的對象的數據,如文件存儲在基于云的對象存儲112中。在一些實施例中,可以將文件分割成多個分段或“±夬”,將每個分段或塊存儲在基于云的對象存儲中的對應位置中。對文件系統元數據服務器110發出文件系統調用,文件系統元數據服務器110將文件系統元數據存儲在文件系統元數據存儲裝置114中,例如數據庫或其他數據存儲中。文件系統元數據服務器110可以在文件系統元數據存儲114中存儲例如,文件系統中存儲并表示的每個文件其他對象的分段或“±夬”映射圖。例如,對于每個文件名(例如,路徑名),文件系統元數據服務器110可以在對應分段映射圖中存儲每個分段的散列或其他表示,以及對于每個分段,存儲基于云的對象存儲112中存儲(或要存儲)的分段的對應位置。其他文件系統元數據,如典型地由文件系統存儲的元數據,可以由文件系統元數據服務器110存儲在文件系統元數據存儲114中。示例包括且不限于目錄、文件或其他節點/對象名;父和/或子節點的標識;創建時間;創建和/或擁有對象的用戶;上次修改時間和/或其他時間;文件結尾(EOF)或指示對象大小的其他值;如分類、訪問控制列表等的安全性屬性;和/或其他文件系統元數據。
[0024]雖然在圖1所示的示例中,文件系統元數據服務器110和基于云的對象存儲112示出為位于不同網絡和/或物理位置中的分開的系統,但是,在其他實施例中,可以將文件系統元數據和文件系統內容數據存儲在一起,例如都存儲在基于云的資源上和/或都存儲在企業或其他網絡服務器等上。
[0025]圖2是圖示客戶端系統的實施例的框圖。在所示的示例中,圖1的客戶端系統/設備102示出為包括操作系統204提供的環境中運行的應用202。操作系統204包括內核(未示出)和配置成向應用(如應用202)提供服務和/或功能性的其他組件。例如,操作系統204可以包括和/或配置成提供對客戶端系統102的原生文件系統(未示出)的訪問。應用202可以配置成對原生文件系統發出文件系統調用,例如,存儲應用202創建的文件或其他對象/使用應用202來修改、移動或刪除此類對象等。在所示的示例中,應用202發出的文件系統調用(圖2中由標記為“app”(202)的框中始發的向下指箭頭表示)被內核模塊(或其他組件)206攔截并被重定向到文件系統客戶端(或其他文件系統代理)208。在一些實施例中,文件系統代理208包括用戶空間中運行的客戶端應用。在一些實施例中,文件系統代理208包括內核或其他操作系統組件或模塊。本示例中的文件系統客戶端208具有與之關聯的本地緩存210。在多種實施例中,緩存210可以用于在將文件數據發送到遠程存儲裝置(例如,圖1的基于云的對象存儲112)之前緩沖和/或以其他方式存儲(stage)文件數據,和/或有助于訪問對先前存儲但是稍后可能請求對其訪問的數據。
[0026 ]客戶端系統102包括提供至網絡(如圖1的網絡108 )的網絡連接性的網絡通信接口212。例如,在多種實施例中,來自app 202的訪問遠程存儲的文件的請求可以促使文件系統客戶端208通過網絡通信接口 212對例如文件系統元數據服務器(如圖1的服務器110)發出遠程調用。
[0027]在多種實施例中,文件系統客戶端208可以配置成在包括文件系統客戶端208和/或緩存210的或以其他方式與之關聯的元數據寫緩沖中存儲影響文件系統元數據的一個或多個文件系統操作和/或請求,而所述文件系統元數據包含該文件系統元數據中與文件系統客戶端208持有文件系統元數據寫租賃相關的部分。例如,作為應用(如圖2的應用202)的本地文件系統調用的結果,可以將影響元數據的文件系統操作緩沖為已接收,并且可以異步地和/或在出現事件,例如接收到元數據寫租賃“斷點”事件已被接收到和/或已發生的指示時,將其傳送到遠程文件系統元數據服務器。例如,第二客戶端系統可以指示要執行影響該文件系統元數據中與第一客戶端系統持有租賃相關的部分的操作的期望和需求,導致向第一客戶端系統發送“斷點”通信,進而“刷新”緩沖中至少影響與持有租賃相關的元數據部分的那些操作。
[0028]圖3是圖示分布式文件系統的實施例的框圖。在所示的示例中,客戶端102通過基于安全會話的連接302與文件系統元數據服務器110通信。此外,客戶端102通過TCP/IP或其他連接與基于云的對象存儲112通信,該TCP/IP或其他連接使得客戶端102能夠通過HTTP“PUT”請求存儲對象(例如,文件分段或“±夬”)以及通過HTTP “GET”請求檢索分段(“±夬” )ο在多種實施例中,客戶端102(例如,客戶端102上運行的文件系統客戶端或其他代理)通過安全連接302發送和接收分布式文件系統“控制面”通信(例如,更改或要求文件系統元數據的處理和/或使用的文件系統操作),而通過連接304發送的通信可以視為包含可存儲和/或檢索文件系統對象數據(即,分段或“±夬”)所采用的“數據面”。在所示的示例中,文件系統元數據服務器110有權訪問活動目錄306,在多種實施例中,活動目錄306可以包含可用于認證客戶端(如客戶端102)的用戶的信息。
[0029]在多種實施例中,其上已安裝分布式文件系統客戶端或其他代理的客戶端可以存儲如文件的文件系統對象。在多種實施例中,在接收到存儲(或修改)文件系統對象的請求時,該文件系統客戶端將對象分割成一個或多個分段或“±夬”,并計算每個分段或“±夬”的引用(例如,散列)。這些引用被包含在例如通過安全連接(如圖3的連接302)發送到文件系統元數據服務器的文件系統請求中。該文件系統元數據服務器通過例如PUT請求將分段數據直接發送到基于云的對象存儲中來返回文件系統客戶端要用于將(非重復)分段/塊存儲在基于云的對象存儲中的信息,所述PUT請求是通過連接,如圖3所示的連接304來發送的。
[0030]圖4是圖示用于將文件或其他文件系統對象存儲在分布式文件系統中的過程實施例的流程圖。在多種實施例中,可以由客戶端系統/設備上運行的文件系統客戶端或其他代理,如圖2的文件系統客戶端208,在客戶端系統或設備上執行圖4的過程。在所示的示例中,從例如應用接收存儲文件的請求(402)。將文件分割成一個或多個分段(404)。對于每個分段,計算分段引用,例如散列(406)。將包含分段散列的文件寫請求發送到文件系統元數據服務器(408)。從文件系統元數據服務器接收一組統一資源定位符(URI)或其他指針(410)。在多種實施例中,該指針可以包含僅用于分布式文件系統尚未存儲的那些分段的指針。使用接收的指針通過例如直接發送到基于云的對象存儲的HTTP “PUT”請求來存儲分段(412)。
[0031]圖5是圖示用于將文件或其他文件系統對象存儲在分布式文件系統中的過程實施例的流程圖。在多種實施例中,圖5的過程可以由文件系統元數據服務器,如圖1的文件系統元數據服務器110來執行。在所示的示例中,接收存儲文件的請求(502)。創建將文件系統對象名和/或其他標識符(例如,文件名、路徑名)與一組一個或多個分段引用(例如,散列值)關聯的分段(“±夬”)映射圖(504)。基于例如分段引用,識別不與分布式文件系統已經存儲的分段重復的分段(506)。對于不重復的每個分段,計算存儲位置(例如,至少部分地基于全部或部分分段引用)并且生成可用于將該分段直接存儲在基于云的數據存儲中的URI或其他指針(508)。在多種實施例中,由文件系統元數據服務器以加密方式對該URI或其他指針簽名。URI可以具有過期時間,截至該過期時間,該URI必須被用于存儲該分段。將這些URI發送到所接收要存儲該文件的請求的始發文件系統客戶端(510)。
[0032]圖6是圖示用于存儲與分布式文件系統關聯的文件分段或“±夬”數據的過程實施例的流程圖。在多種實施例中,圖6的過程可以基于云的對象存儲,如圖1的對象存儲112來執行。在所示的示例中,接收與請求中指定的URI關聯的“PUT”請求(602)。檢查與該URI以及編碼在該URI中的過期時間關聯的加密簽名(604)。例如,可以規定基于云的對象存儲來檢查該URI已由受信文件系統元數據服務器簽名和/或該URI的過期時間尚未流逝。如果確定該URI是當前有效的(606 ),則將與該HJT請求關聯的有效負載數據,例如文件系統對象分段或“±夬”數據存儲在與該URI關聯的位置中(608 )。如果確定該URI不是有效的(606),則HJT請求失敗(610),并且文件系統客戶端接收到指示它必須從文件系統元數據服務器獲取新URI的響應。
[0033]在多種實施例中,其上已安裝分布式文件系統客戶端或其他代理的客戶端可以檢索如文件的文件系統對象。在多種實施例中,在接收到訪問文件系統對象的請求時,文件系統客戶端通過例如安全連接(如圖3的連接302)向文件系統元數據服務器發送文件訪問請求。文件系統元數據服務器通過例如經連接(如圖3的連接304)發送的GET請求返回文件系統客戶端要用于直接從基于云的對象存儲中檢索分段/塊的信息(例如,例如一個或多個URI或其他指針)。
[0034]圖7是圖示用于訪問分布式文件系統中存儲的文件或其他文件系統對象的過程實施例的流程圖。在多種實施例中,可以由客戶端系統/設備上運行的文件系統客戶端或其他代理,如圖2的文件系統客戶端208,在客戶端系統或設備上執行圖4的過程。在所示的示例中,從應用接收要訪問文件系統對象(例如文件名標識的文件)的請求(702)。向文件系統元數據服務器發送請求以檢索文件(704)。從文件系統元數據服務器接收一組分段引用,以及對于每個分段引用,接收對應URI和加密密鑰(706)。檢查本地緩存以確定緩存是否有任何所需的分段(708)。對于緩存中沒有的所有分段,使用關聯的URI從基于云的對象存儲發送檢索該分段的GET請求,并且一旦以加密形式從對象存儲接收到該分段,使用關聯的密鑰將該分段解密(710)。使用這些分段重構該文件,并向所接收訪問請求的始發應用提供對該文件的訪問權(712)。
[0035]圖8是圖示用于處理要訪問分布式文件系統中存儲的文件或其他文件系統對象的請求的過程實施例的流程圖。在多種實施例中,圖5的過程可以由文件系統元數據服務器,如圖1的文件系統元數據服務器110來執行。在所示的示例中,接收訪問命名的文件的請求(802)。檢索與文件關聯的分段映射圖,并使用該分段映射圖來確定一組分段引用(例如,散列),以及對于每個分段引用,確定指示該分段存儲在基于云的分段存儲中的位置的對應URI以及可用于將該分段解密的加密密鑰(804)。將這些分段引用、URI和密鑰返回到所接收文件訪問請求的始發文件系統客戶端(806)。
[0036]圖9是圖示分布式文件系統的實施例中使用的一組示例文件系統元數據表的框圖。在多種實施例中,可以由文件系統元數據服務器,如圖1和圖3的文件系統元數據服務器110創建并維護圖9的表902、904和906。在所示的示例中,使用索引節點表902來存儲將每個命名的文件系統對象,例如目錄、文件或其他對象與對應索引節點或其他唯一性編號或標識符關聯的數據。在多種實施例中,使用塊映射圖表904來對應于每個文件以及對應于該文件為存儲而被拆分成的一個或多個分段(塊)中每一個來存儲該塊在文件內的偏移量、塊標識符(塊id)和其他元數據。例如,已作為三個塊存儲的文件在表904中將具有三個項(行),每個塊對應于一個項。在多種實施例中,塊id是單調遞增的值,其中每個連續存儲的塊被賦予字母數字次序上連續的塊id。在多種實施例中,一旦存儲,塊是不可變的。如果修改文件數據,則被影響的數據作為新塊來存儲并依序賦予下一個塊id。由此,按定義具有較高塊id的塊將被存儲在具有較低塊id的塊之后,并且可以假定自創建和存儲起二者均未被修改過。
[0037]進一步參考圖9,塊元數據表906包含對應于每個塊的一行,由塊id標識(所示的示例中的列908),以及對應于每個塊,包含指示該塊的大小的元數據;其他元數據;指示當前有多少活動文件(或其他文件系統對象)引用該塊的引用計數(列910);以及指示該塊的狀態的元數據,即,該塊已驗證還是已被刪除(列912)。
[0038]在多種實施例中,當首先存儲一個塊時,該塊最初被視為處于“未驗證”狀態,并且最初可以在表906的列912中存儲反映該塊未驗證狀態的元數據。驗證可以由文件系統元數據服務器來執行,并且驗證可以包括讀取如存儲在基于云的對象存儲中的塊,驗證該塊數據對應于文件系統所預期的(例如,計算如服務器讀取的塊的散列,并將該散列與該塊的先前存儲的散列(例如,從存儲該塊的文件系統客戶端接收的散列)比較),以及一旦其通過驗證,則更新表906中的狀態元數據912以反映該塊的“已驗證”狀態。
[0039]公開一種消除重復分布式文件系統,其按以消除重復為目的的第一大小的塊來分割文件但是將文件數據存儲在遠遠更大對象中以便利用典型的基于云的對象存儲的性能特點。在多種實施例中,客戶端設備上運行的文件系統客戶端將要存儲的文件分割成第一大小的“塊”。將表示這些塊的數據,如相應塊的散列或其他表示發送到遠程文件系統元數據服務器。該服務器執行消除重復處理以確定文件系統可能已經存儲塊中哪一個(如果有的話)。對于文件系統尚未存儲的那些塊,該服務器以指令響應客戶端,該指令是要將多個塊組合在組合的對象中并將通過HTTP PUT或其他請求將組合的對象的指令存儲在基于云的對象存儲中服務器使用例如統一資源定位符(URL)或服務器提供的其他定位符指定的位置處。
[0040]圖10是圖示分布式文件系統的實施例中不同粒度級別的文件分割的示例的框圖。在所示的示例中,第一文件1002包含所示的數據,在本示例中為數據“A BCDE F”。在所存儲的第一文件之后存儲的第二文件1004包含數據“C DABE G”,其中相應文件1002和1004中的大寫字母表示在每個文件中相同序號的數據字節,例如,第一文件1002開始處的“A”是與第二文件1004中系統大寫字母“A”所表示的數據相同的數據。
[0041]在圖10中,示出例如,可為了消除重復為目的使用的兩個可能的分段和“±夬”大小。在第一示例中,示出塊1006,每個塊的大小對應于這些大寫字母中的三個大寫字母,這些大寫字母表示分別包含文件1002和1004的數據。在此示例中,將文件1002和1004分割成如圖所示大小的塊1006,促成如第一文件1002和第二文件1004之間不會發現重復塊。作為比較,以更細粒度(即,更小的塊大小)分割文件1002和1004創建的一組塊1008將促成顯著改善的消除重復。在此示例中,確定文件1004的塊1014為文件1002的先前存儲的塊1012的重復,以及確定文件1004的塊1018為文件1002的先前存儲的塊1016的重復。在此示例中,文件1004的塊1022不會確定為文件1002的任何先前存儲的塊的重復,在本例中是因為文件1004的塊1022與文件1002的塊1020(以及文件1002的其他塊)之間不同。在所示的示例中,可以將文件分割成如圖10所示的大小對應于個體大寫字母的塊實現更進一步的消除重復,因為如果使用該大小的塊,則在查找文件1004不是文件1002中任何塊的重復的情況下,僅對應于大寫字母“G”的塊。
[0042]圖10的示例圖示一般來說,更小大小的塊可以比較大大小的塊獲得更高的消除重復獲益。但是,如果使用太小的塊,則與計算和存儲塊數據的散列來檢測重復等關聯的開銷可能變得成本上太高。因此,典型地,是在通過相對較小塊大小實現消除重復的更大獲益與處理這些塊所關聯的開銷之間達成平衡。
[0043]在分布式文件的多種實施例中,進一步考慮的是在基于云的對象存儲(如圖1的基于云的對象存儲112)中存儲塊的效率。典型地,將此類基于云的對象存儲優化以存儲相對于針對消除重復以及相關開銷的目的為最優的塊大小要大得多的對象。例如,對于典型的基于云的對象存儲,與存儲對象關聯的延遲和其他開銷可能隨大小達到某個大小而呈線性遞增,但是對某個大小以外的對象趨于平穩,例如與針對其他目的(如消除重復)可能為最優的塊大小相比相對較大的大小。為了利用此特點,在多種實施例或本文公開的分布式文件系統中,針對文件系統操作的目的將文件分割成有利于消除重復和/或其他文件系統操作的目的的塊大小,但是在基于云的對象存儲(如圖1的對象存儲112 )中,文件數據被存儲在相對地遠比該塊大小大的大小的對象(本文中有時稱為“團點(blobs)”以便將其與“文件”或“±夬”清楚地區分開)中。在多種實施例中,文件系統客戶端可以配置成和/或被指令以將塊組合成較大組合的對象,然后將組合的對象(或“團點”)存儲在基于云的對象存儲中。
[0044]圖11是圖示用于配置分布式文件系統以存儲文件數據的過程實施例的流程圖。在多種實施例中,圖11的過程可以用于開發和配置分布式文件系統組件,如圖2的文件系統客戶端208和圖1和/或圖6的文件系統元數據服務器104。在所示的示例中,確定為實現有關消除重復和/或一個或多個其他文件系統目標的期望性能的塊大小(I 102)。在多種實施例中,該確定可以完全或部分地基于領域知識、一組文件的全部或部分的靜態分析、使用不同大小的塊執行的測試中觀察到的消除重復性能等來執行。確定用于以利用基于云或其他對象存儲的對象大小相關點的方式來存儲文件系統數據的對象或“團點”大小(1104)。例如,可以生成按對象大小的對象存儲性能和/或成本(例如,延遲、開銷)的性能圖表或其他表示,并將其用于選擇達到該對象存儲的期望性能水平的對象(“團點”)大小。該分布式文件系統配置成將文件分割成針對文件系統操作(例如消除重復)的目的而確定的塊大小的塊,以及將多個塊組合成針對在基于云的對象存儲中存儲而確定的對象大小(I 106)的較大對象(“團點”)。
[0045]在一些實施例中,可被組合以形成要存儲在基于云的對象存儲中的較大對象(“團點”)的塊的數量可以是可變的。例如,塊的數量可以基于文件的對象或正在存儲的文件集的大小而改變。在一些實施例中,文件系統客戶端可以配置成確定要組合以形成較大對象以存儲在基于云的對象存儲中的塊的數量。在一些實施例中,有關要組合的塊的數量和/或哪些塊要包含在哪個對象(“團點”)中的的確定可以在文件系統服務器(如圖1和/或圖6的文件系統元數據服務器104)處執行。在一些實施例中,文件系統客戶端可以配置成從服務器接收有關哪些塊要組合在哪個對象中的指示,并基于此類指令來創建和存儲對象。
[0046]在一些實施例中,可以將與兩個或更多個文件關聯的塊包含在要存儲在基于云的對象存儲中的同一個對象中。在一些實施例中,可以將與兩個或更多個不同文件系統客戶端關聯的文件所關聯的塊包含在為存儲在基于云的對象存儲中的對象中。例如,在一些實施例中,取消重復可以跨文件系統客戶端執行,這在某種情況中可以促使包含存儲的對象(“團點”)的一個或多個塊由與不同文件系統客戶端關聯的文件來引用。
[0047]圖12是圖示用于在分布式文件系統的實施例中存儲文件數據的元數據表示例的框圖。在多種實施例中,可以由文件系統元數據服務器(如圖1和/或圖6的文件系統元數據服務器104)創建并維護元數據表,如圖12的表1202和1210。在所示的示例中,塊元數據表1202包含其中存儲單調遞增的塊標識符的塊標識符列1203;其中存儲為每個塊基于塊的全部或部分數據計算的對應散列的塊散列列1204。對于每個塊,標識包含塊數據的較大存儲的對象(“團點”)的“團點id”被列示在“團點id”列1206中。每個塊在包含它的對應存儲的對象(“團點”)內的位置被列示在“偏移量”列1208中。對于給定的塊,則可以使用表1202來查找其內包含塊的數據且存儲在例如基于云的對象存儲中的存儲的對象,以及指示該塊的數據位于該對象的數據內哪里的該對象內的偏移量。
[0048]正如表1202的第一、第二和第四行中的團點id值“I”與團點元數據表1210中的系統團點id“l”所關聯的項(行)之間的箭頭所指示的,可以使用對應于給定塊散列值的塊元數據散列表1202中存儲的團點i d以在團點元數據表1210中查找包含團點元數據的對應項(參見團點id列1212),這些團點元數據諸如:用于將包含團點的數據加密的加密密鑰或其他保密數據(團點加密密鑰列(1214 )、在基于云的對象存儲中存儲團點所在的位置(URI列1216)以及與當前活動和/或以其他方式附帶被保留的文件系統對象關聯的塊的數量指示(塊引用計數列1218)。對于較后一列,例如,在團點id = I的項(行)中,塊引用計數列1218中的對應值指示當前活動(或例如由于與保持被存儲的快照關聯而以其他方式附帶被保留)的3個塊。在多種實施例中,正如下文與圖15結合更全面描述的,可以使用塊引用計數列來確定何時包含多個塊的團點可以從存儲該團點所在的基于云的對象存儲中刪除。
[0049]在多種實施例中,本文公開的文件系統數據的驗證由文件系統,例如由文件系統元數據服務器,如圖1和/或圖6的文件系統元數據服務器104來執行。在多種實施例中,驗證使得確保文件系統對象的無沖突消除重復存儲能夠在客戶端之間提供,即使存在錯配置和/或功能失效(例如,“漏洞多”的)或惡意客戶端的情況中。
[0050]在一些實施例中,從基于云的對象存儲中檢索包含文件數據的多個塊的存儲的對象(“團點”)。檢索的對象可以本地存儲,例如存儲在緩存中,并且用于驗證包含該對象的組成塊。可以使用多種技術來確定給定對象(“團點”)的緩存的副本應該在緩存中保留多久以有利于驗證。
[0051]圖13是圖示用于驗證分布式文件系統數據為存儲在基于云的對象存儲中的過程實施例的流程圖。在多種實施例中,圖13的過程可以由分布式文件系統元數據服務器(如圖1和/或圖6的文件系統元數據服務器104)使用來驗證存儲的文件系統數據。在所示的示例中,處理開始于或進行到要驗證下一個塊(1302)。例如,文件系統元數據服務器驗證過程或模塊可以從驗證隊列抽取下一個塊驗證任務。例如,當文件系統客戶端將塊報告為以存儲在基于云的對象存儲中時,所以可以將對應的驗證任務添加到驗證隊列。在一些實施例中,驗證隊列可以包括其中可存儲標識待驗證的塊的數據的數據庫表或其他數據結構。進一步參考圖13,例如,通過在塊散列表(如圖12的表1202)中執行查詢來確定(1304)與包含該塊的數據所在的存儲的對象所關聯的“團點”或其他存儲的對象標識符。如果本地緩存(例如,圖2的緩存210)中尚沒有該團點(1306),則例如使用來自團點元數據表(如圖12的表1210)且存儲在緩存中的數據,從基于云的對象存儲中檢索該團點(1308)。如果本地緩存中已經有該團點(1306)或如果沒有而一旦獲得該團點并將其存儲在緩存中(1308),則使用該團點的緩存副本來獲取與該塊對應的數據,例如使用如塊散列表中的對應項所指示的該塊在團點內的偏移量來獲取與該塊對應的數據,并且使用塊數據來驗證該塊(1310)。例如,可以將如團點中存儲的塊數據的散列與如塊元數據中存儲的該塊的散列進行比較。只要有塊要驗證,則圖13的過程通過連續迭代重復執行(1312)。
[0052]在多種實施例中,可以使用多種技術來確定為執行如圖13中所示的驗證處理要一直將已檢索的團點緩存多久。
[0053]圖14是圖示與驗證分布式文件系統數據為存儲在基于云的對象存儲中結合來管理已緩存的文件數據的過程實施例的流程圖。在多種實施例中,圖14的過程可以由分布式文件系統元數據服務器(如圖1和/或圖6的文件系統元數據服務器104)使用來確定要將已從基于云的對象存儲中讀取的文件系統數據緩存多久。在所示的示例中,對于緩存的每個團點,維護與仍需驗證的團點關聯的塊的計數(1402)。例如,當檢索團點來執行驗證時,如圖13的步驟1308中那樣,在一些實施例中,可以使用驗證隊列以及將塊映射到團點id的塊散列表來確定多少個包含該團點的塊位于驗證隊列中。在一些實施例中,每次塊被驗證,則關聯緩存的團點的“仍待驗證的塊”計數遞減。如果該計數遞減到等于“O” (1404),指示在一些實施例中再沒有包含該團點的塊仍待驗證,則將該團點標記為“同意”以便從緩存中移除(1406)。否則,該團點繼續存儲在緩存中(1408),例如,以確保從緩存中可獲取該塊數據來驗證包含仍需驗證的團點的一個或多個塊。在一些實施例中,其他緩存策略可以使團點在“仍待驗證的塊”計數已經遞減到O之后保留一段時間,以及在一些實施例中,可以基于計數遞減為O以外的策略來從緩存中移除團點。例如,在多種實施例中,時間、空間可用性和其他考量可以促使團點從緩存中被移除,而不管有一個或多個包含該團點的塊仍待驗證。
[0054]在多種實施例中,組合多個塊以形成較大對象(“團點”)以便存儲在基于云的對象存儲中,這促使需要能夠確定不再需要包含團點的塊,以使存儲該團點所在的存儲位置能夠通過例如“垃圾回收”的過程被再次使用。在一些實施例中,對于每個塊存儲引用計數,以便確定塊何時不再被引用,以及對于每個團點,保存單獨的團點級引用計數,以便獲知包含該團點的最后一個塊何時變為被刪除。
[0055]圖15是圖示用于確定與多個文件數據塊關聯的已存儲對象能夠被刪除的過程實施例的流程圖。在多種實施例中,圖15的過程可以由分布式文件系統元數據服務器(如圖1和/或圖6的文件系統元數據服務器104)使用來確定如存儲在基于云的對象存儲上的文件系統數據可以被刪除。在所示的示例中,接收指示,其指示塊不再需要且可以被刪除(1502)。例如,在多種實施例中,塊的引用計數可能已經遞減到0,且可能已經確定沒有仍保留的快照包括該塊。確定存儲該塊所在的團點,并將關聯的團點引用計數(例如,圖12的表1210的列1218 )遞減(1504)。如果一旦遞減的團點引用計數等于O (1506 ),則標記該團點標以便刪除(例如,使之進行垃圾回收)(1508)。如果遞減的團點引用計數仍大于0(1506),則圖15的過程結束而不標記該團點以便刪除。
[0056]在多種實施例中,本文公開的技術可使文件系統操作,如消除重復,能夠使用第一大小/粒度,即,本文描述的“±夬”大小來執行,同時能夠使用存儲的對象大小(“團點”大小)(其利用典型的基于云的對象存儲的特點)來存儲文件系統數據。
[0057]雖然前文實施例是出于理解簡明的目的進行某種細節描述,但是本發明不限于所提供的細節。有許多備選方式來實現本發明。所公開的實施例是說明性的而非限制性的。
【主權項】
1.一種存儲文件系統數據的方法,其包括: 接收要存儲包含多個文件數據塊的文件的請求; 確定要存儲所述多個塊的至少子集;以及 至少部分地通過提供指示來對所述請求予以響應,所述指示用于將包含所述文件的所述多個塊中至少子集的兩個或更多個塊作為包含所述兩個或更多個塊的組合塊數據的單個存儲的對象來存儲。2.如權利要求1所述的方法,其中從文件系統客戶端接收所述請求。3.如權利要求1所述的方法,其中所述請求包括包含所述文件的塊的散列或其他表示。4.如權利要求3所述的方法,其中使用所述散列或其他表示來確定包含所述文件的塊是否已被所述文件系統存儲。5.如權利要求4所述的方法,其中要存儲所述多個塊的至少子集的確定包括,使用包含所述多個塊的所述至少子集的塊的相應散列或其他表示來確定所述塊尚未被所述文件系統存儲。6.如權利要求1所述的方法,其中用于包含所述文件的所述多個塊的所述至少子集的兩個或更多個塊作為單個存儲的對象來存儲的所述指示包括,與所述單個存儲的對象關聯的定位符或其他標識符以及將包含所述文件的所述多個塊的所述至少子集與所述定位符或其他標識符關聯的數據。7.如權利要求6所述的方法,其中所述定位符或其他標識符指示應將所述單個存儲的對象發送到以便存儲所在的位置。8.如權利要求1所述的方法,其中所述請求由文件系統客戶端發送,所述文件系統客戶端配置成通過使用所述兩個或更多個塊組裝所述單個存儲的對象來對所述請求的所述響應予以響應。9.如權利要求1所述的方法,還包括存儲將所述兩個或更多個塊與所述單個存儲的對象關聯的元數據。10.如權利要求9所述的方法,其中所述元數據包括對應于每個塊的,將包含含有所述單個存儲的對象的塊的數據的位置。11.如權利要求1所述的方法,還包括至少部分地通過檢索所述單個存儲的對象并使用包含所述單個存儲的對象的相應塊的塊數據來驗證如存儲的塊數據對應于預期要存儲的塊數據,以驗證所述兩個或更多個塊的存儲。12.如權利要求11所述的方法,還包括使用“仍待驗證的塊”計數器來確定要在本地緩存中將所述單個存儲的對象的副本保留多久。13.如權利要求1所述的方法,還包括對于所述單個存儲的對象,存儲反映包含仍被所述文件系統保留的團點的塊的數量的引用計數。14.如權利要求1所述的方法,還包括至少部分地基于確定包含所述團點的塊不再被所述文件系統保留,將所述引用計數遞減。15.一種存儲文件系統數據的系統,其包括: 通信接口;以及 處理器,所述處理器耦合到所述通信接口且配置成: 通過所述通信接口接收要存儲包含多個文件數據塊的文件的請求; 確定要存儲所述多個塊的至少子集;以及 至少部分地通過提供指示來對所述請求予以響應,所述指示是要將包含所述文件的所述多個塊中至少子集的兩個或更多個塊作為包含所述兩個或更多個塊的組合塊數據的單個存儲的對象來存儲。16.如權利要求15所述的系統,其中所述請求包括包含所述文件的塊的散列或其他表不O17.如權利要求16所述的系統,其中使用所述散列或其他表示來確定所述文件系統是否已存儲包含所述文件的塊。18.如權利要求17所述的系統,其中要存儲所述多個塊的至少子集的確定包括,使用包含所述多個塊的所述至少子集的塊的相應散列或其他表示來確定所述塊尚未被所述文件系統存儲。19.如權利要求15所述的系統,其中所述處理器還配置成至少部分地通過檢索所述單個存儲的對象并使用包含所述單個存儲的對象的相應塊的塊數據來驗證如存儲的所述塊數據對應于預期要存儲的塊數據,以驗證所述兩個或更多個塊的存儲。20.—種用于存儲文件系統數據的計算機程序產品,所述計算機程序產品包含在非瞬態計算機可讀存儲介質中且包含用于執行如下步驟的計算機指令: 接收要存儲包含多個文件數據塊的文件的請求; 確定要存儲所述多個塊的至少子集;以及 至少部分地通過提供指示來對所述請求響應,所述指示是要將包含所述文件的所述多個塊中至少子集的兩個或更多個塊作為包含所述兩個或更多個塊的組合塊數據的單個存儲的對象來存儲。
【文檔編號】G06F17/30GK106021256SQ201511000869
【公開日】2016年10月12日
【申請日】2015年12月28日
【發明人】T.曼維爾, J.羅佩斯, R.德賽, N.羅森布盧姆
【申請人】Emc 公司