分布式存儲系統中的優先化數據重構的制作方法
【專利摘要】一種用于優先化數據(312)以在分布式存儲系統(100)中恢復的方法(600)包括:針對具有塊(330)的文件(310)的每個條帶(320),確定條帶包括高可用性塊(330a)還是低可用性塊(330b)以及確定針對每個條帶的有效冗余值(ER)。分布式存儲系統具有包括系統域的系統層級(400)。與處于活動狀態的系統域相關聯的條帶的塊是可訪問的,而與處于不活動狀態的系統域相關聯的條帶的塊是不可訪問的。該方法還包括實質上立即重構具有小于閾值有效冗余值(ERT)的有效冗余值的不可訪問、高可用性塊(330a),以及在閾值時間段之后,重構不可訪問、低可用性塊和其他不可訪問、高可用性塊。
【專利說明】
分布式存儲系統中的優先化數據重構
技術領域
[0001] 本公開內容涉及分布式存儲系統中的優先化數據重構。
【背景技術】
[0002] 分布式系統通常包括許多松散耦合的計算機,這些計算機中的每個計算機通常包 括計算資源(例如,一個或多個處理器)和/或存儲資源(例如,存儲器、閃速存儲器和/或 盤)。分布式系統將存儲抽象(例如,鍵/值存儲或文件系統)疊加在分布式系統的存儲資源 上。在分布式存儲系統中,運行在計算機上的服務器進程能夠將該計算機的存儲資源導出 到運行在其他計算機上的客戶端進程。遠程過程調用(RPC)可以將數據從服務器進程轉移 到客戶端進程。備選地,遠程直接存儲器訪問(RDMA)基元(primitive)可以用于將數據從服 務器硬件轉移到客戶端進程。
【發明內容】
[0003] 本公開內容的一方面提供了一種用于優先化數據以在分布式存儲系統中恢復的 方法,該方法包括:針對包括具有塊的多個條帶的文件的每個條帶,使用數據處理設備來確 定所述條帶包括高可用性塊還是低可用性塊,以及使用所述數據處理設備來確定針對所述 文件的每個條帶的有效冗余值。該有效冗余值基于所述塊以及與所述對應條帶相關聯的任 意系統域。該分布式存儲系統具有包括系統域的系統層級。此外,每個系統域具有活動狀態 或不活動狀態。與處于所述活動狀態的系統域相關聯的條帶的塊是可訪問的,而與處于所 述不活動狀態的系統域相關聯的條帶的塊是不可訪問的。系統域可以在調度維護、意外故 障或其他原因期間進入不活動狀態。當條帶的塊變得不可訪問時:該方法可選地包括使用 所述數據處理設備來實質上立即重構具有小于閾值有效冗余值的有效冗余值的不可訪問、 高可用性塊。此外,當條帶的塊變得不可訪問時:該方法還可選地包括在閾值時間段之后, 使用所述數據處理設備來重構:1)不可訪問、低可用性塊;以及2)具有大于或等于所述閾值 有效冗余的有效冗余值的不可訪問、高可用性塊。因此,具有高風險變得丟失的某些高可用 性塊(基于有效冗余值)接收比低可用性塊或不具有高風險變得丟失的其他高可用性塊相 對更快的重構。
[0004] 本公開內容的實現方式可以包括以下可選特征中的一個或多個。在某些實現方式 中,該方法進一步包括當系統域處于所述不活動狀態時,更新針對與所述系統域相關聯的 所述文件的每個條帶的所述有效冗余值。所述閾值時間段包括在大約15分鐘與大約30分鐘 之間。其他閾值時間段也是可以的。
[0005] 系統層級可以包括系統級別,諸如第一系統級別、第二系統級別、第三系統級別和 第四系統級別。第一系統級別對應于數據處理設備、非瞬態存儲器設備或網絡接口控制器 的主機機器。每個主機機器具有系統域。第二系統級別對應于容納所述主機機器的機架的 功率遞送器、通信遞送器或冷卻遞送器。所述機架的每個功率遞送器、通信遞送器或冷卻遞 送器具有系統域。第三系統級別對應于具有相關聯機架的單元的功率遞送器、通信遞送器 或冷卻遞送器。所述單元的每個功率遞送器、通信遞送器或冷卻遞送器具有系統域。第四系 統級別對應于所述單元的分發中心模塊,每個分發中心模塊具有系統域。
[0006] 在某些示例中,針對每個條帶,該方法包括確定針對每個系統級別的所述有效冗 余值。確定針對具有副本塊的復制條帶的所述有效冗余值包括標識在對應系統級別具有至 少一個可用副本塊的唯一系統域的數目。確定針對在所述第二系統級別具有數據塊和代碼 塊的編碼條帶的所述有效冗余值包括標識所述第二系統級別內能夠在維持數據可訪問性 時處于不活動的唯一系統域的數目。另外,確定針對在所述第三或第四系統級別具有數據 塊和代碼塊的編碼條帶的所述有效冗余值包括標識所述第三或第四級別內能夠在維持數 據可訪問性時處于不活動并且具有與剩余系統域相比最大數目的塊的系統域。另外,當不 止一個系統域具有所述最大數目的塊時,該方法包括隨機選擇所述系統域之一。
[0007] 在某些實現方式中,確定針對具有數據塊、代碼檢查塊和字檢查塊的嵌套代碼條 帶的所述有效冗余值包括確定列有效冗余或條帶有效冗余之一。確定列有效冗余包括標識 列內能夠從所述列內的其他塊重構的唯一塊的數目;以及確定條帶有效冗余包括標識條帶 內能夠從所述條帶內的其他塊重構的唯一塊的數目。
[0008] 本公開內容的另一方面提供了一種用于優先化數據以在分布式存儲系統中恢復 的方法。該方法包括:使用計算處理器來確定針對文件的每個條帶的有效冗余值,所述文件 包括具有塊的條帶、基于所述塊以及與所述對應條帶相關聯的任意系統域的所述有效冗余 值,所述分布式存儲系統具有包括系統域的系統層級,每個系統域具有活動狀態或不活動 狀態。當系統域處于所述不活動狀態時,更新針對與所述系統域相關聯的所述文件的每個 條帶的所述有效冗余值。另外,該方法包括當條帶的所述有效冗余值小于閾值有效冗余值 時,使得所述條帶重構。
[0009] 本公開內容的此方面的實現方式可以包括以下可選特征中的一個或多個。在某些 實現方式中,系統層級包括第一級別、第二級別、第三級別和第四級別。第一系統級別對應 于數據處理設備、非瞬態存儲器設備或網絡接口控制器的主機機器。每個主機機器具有系 統域。第二系統級別對應于容納所述主機機器的機架的功率遞送器、通信遞送器或冷卻遞 送器。所述機架的每個功率遞送器、通信遞送器或冷卻遞送器具有系統域。第三系統級別對 應于具有相關聯機架的單元的功率遞送器、通信遞送器或冷卻遞送器。所述單元的每個功 率遞送器、通信遞送器或冷卻遞送器具有系統域。第四系統級別對應于所述單元的分發中 心模塊,每個分發中心模塊具有系統域。在某些示例中,該方法進一步包括針對每個條帶確 定針對每個系統級別的所述有效冗余值。
[0010] 在某些示例中,確定針對具有副本塊的復制條帶的所述有效冗余值包括標識在對 應系統級別具有至少一個可用副本塊的唯一系統域的數目。確定針對在所述第二系統級別 具有數據塊和代碼塊的編碼條帶的所述有效冗余值包括標識所述第二系統級別內能夠在 維持數據可訪問性時處于不活動的唯一系統域的數目。確定針對在所述第三或第四系統級 別具有數據塊和代碼塊的編碼條帶的所述有效冗余值包括標識所述第三或第四級別內能 夠在維持數據可訪問性時處于不活動并且具有與剩余系統域相比最大數目的塊的系統域。 當不止一個系統域具有所述最大數目的塊時,該方法包括隨機選擇所述系統域之一。
[0011] 在某些實現方式中,確定針對具有數據塊、代碼檢查塊和字檢查塊的嵌套代碼條 帶的所述有效冗余值包括確定列有效冗余或條帶有效冗余之一。確定列有效冗余包括標識 列內能夠從所述列內的其他塊重構的唯一塊的數目,以及確定條帶有效冗余包括標識條帶 內能夠從所述條帶內的其他塊重構的唯一塊的數目。
[0012] 在某些實現方式中,該方法包括確定所述條帶包括高可用性塊還是低可用性塊。 當所述條帶的塊變得不可訪問時,該方法包括使用所述數據處理設備來實質上立即重構具 有小于閾值有效冗余值的有效冗余值的不可訪問、高可用性塊。此外,當所述條帶的塊變得 不可訪問時,該方法還包括在閾值時間段之后重構:1)不可訪問、低可用性塊;以及2)具有 大于或等于所述閾值有效冗余(ERT)的有效冗余值(ER)的不可訪問、高可用性塊。該閾值時 間段可以在大約15分鐘與大約30分鐘之間。其他閾值時間段也是可以的。
[0013] 本公開內容的又一方面提供了一種用于優先化數據以在分布式存儲系統中恢復 的系統。該系統包括存儲器主機,每個存儲器主機具有非瞬態存儲器;計算機處理器,其與 所述存儲器主機通信。所述計算機處理器執行指令用于:管理跨所述存儲器主機文件的分 條,每個文件包括具有塊的條帶。針對包括具有塊的多個條帶的文件的每個條帶,計算機處 理器使用數據處理設備來確定所述條帶包括高可用性塊還是低可用性塊。另外,計算機處 理器確定針對所述文件的每個條帶的有效冗余值。所述有效冗余值基于所述塊以及與所述 對應條帶相關聯的任意系統域。所述分布式存儲系統具有包括系統域的系統層級,每個系 統域具有活動狀態或不活動狀態。與處于所述活動狀態的系統域相關聯的條帶的塊是可訪 問的,而與處于所述不活動狀態的系統域相關聯的條帶的塊是不可訪問的。
[0014] 本公開內容的此方面的實現方式可以包括以下可選特征中的一個或多個特征。當 條帶的塊變得不可訪問時,計算機處理器使得實質上立即重構具有小于閾值有效冗余值的 有效冗余值的不可訪問、高可用性塊。此外,當條帶的塊變得不可訪問時,計算機處理器使 得在閾值時間段之后重構:1)不可訪問、低可用性塊;以及2)具有大于或等于所述閾值有效 冗余的有效冗余值的不可訪問、高可用性塊。
[0015] 計算機處理器使得重構具有小于閾值有效冗余值的有效冗余值的不可訪問、高可 用性塊并且使得在不可訪問塊的不可訪問性時間點后的閾值時間段之后使用數據處理設 備重構剩余的不可訪問塊。剩余的不可訪問塊可以是高可用性塊和/或低可用性塊。
[0016] 在某些實現方式中,當系統域處于所述不活動狀態時,所述計算機處理器更新針 對與所述系統域相關聯的所述文件的每個條帶的所述有效冗余值。所述閾值時間段可以在 15分鐘與30分鐘之間。
[0017] 在某些示例中,系統層級包括第一到第四系統層級。第一系統級別對應于數據處 理設備、非瞬態存儲器設備或網絡接口控制器的主機機器。每個主機機器具有系統域。第二 系統級別對應于容納所述主機機器的機架的功率遞送器、通信遞送器或冷卻遞送器。所述 機架的每個功率遞送器、通信遞送器或冷卻遞送器具有系統域。第三系統級別對應于具有 相關聯機架的單元的功率遞送器、通信遞送器或冷卻遞送器。所述單元的每個功率遞送器、 通信遞送器或冷卻遞送器具有系統域。第四系統級別對應于所述單元的分發中心模塊,每 個分發中心模塊具有系統域。計算機處理器針對每個條帶確定針對每個系統級別的所述有 效冗余值。
[0018] 計算機處理器可以通過標識在對應系統級別具有至少一個可用副本塊的唯一系 統域的數目,來確定針對具有副本塊的復制條帶的所述有效冗余值。計算機處理器可以通 過標識所述第二系統級別內能夠在維持數據可訪問性時處于不活動的唯一系統域的數目, 來確定針對在所述第二系統級別具有數據塊和代碼塊的編碼條帶的所述有效冗余值。所述 計算機處理器可以通過標識所述第三或第四級別內能夠在維持數據可訪問性時處于不活 動并且具有與剩余系統域相比最大數目的塊的系統域,來確定針對在所述第三或第四系統 級別具有數據塊和代碼塊的編碼條帶的所述有效冗余值。當不止一個系統域具有所述最大 數目的塊時,所述計算機處理器隨機選擇所述系統域之一。
[0019] 在某些實現方式中,計算機處理器通過確定列有效冗余或條帶有效冗余之一來確 定針對具有數據塊、代碼檢查塊和字檢查塊的嵌套代碼條帶的所述有效冗余值。計算機處 理器通過標識列內能夠從所述列內的其他塊重構的唯一塊的數目來確定列有效冗余,以及 通過標識條帶(320)內能夠從所述條帶(320)內的其他塊(330)重構的唯一塊(330)的數目 來確定條帶有效冗余。
[0020] 在下面的附圖和描述中闡述本公開內容的一個或多個實現方式的細節。其他特 征、方面和優點將從說明書、附圖和權利要求變得顯而易見。
【附圖說明】
[0021 ]圖1A是示例性分布式存儲系統的示意圖。
[0022]圖1B是具有由管理器管理的存儲器資源的單元的示例性分布式存儲系統的示意 圖。
[0023]圖2是針對分布式存儲系統的示例性管理器的示意圖。
[0024] 圖3A是拆分成被復制的條帶的示例性文件的示意圖。
[0025] 圖3B是拆分成數據塊和非數據塊的示例性文件的示意圖。
[0026] 圖3C是里德-所羅門編碼技術的示意圖。
[0027] 圖3D至圖3G是示例性嵌套編碼技術的示意圖。
[0028] 圖3H是用于使用嵌套編碼技術來存儲數據的操作的示例性布置。
[0029]圖4A至圖4E是示例性系統層級的示意圖。
[0030]圖5至圖7是用于優先化分布式存儲系統中用以恢復的數據的操作的示例性布置 的示意圖。
[0031 ]類似的附圖標記在各附圖中指示類似的元件。
【具體實施方式】
[0032] 參考圖1A和圖1B,在某些實現方式中,分布式存儲系統100包括松散耦合的資源主 機110、110a-n(例如,計算機或服務器),每個資源主機具有與可以用于對數據312進行高速 緩存的存儲資源114(例如,存儲器、閃速存儲器、動態隨機訪問存儲器(DRAM)、相變存儲器 (PCM)和/或盤)進行通信的計算資源112(例如,一個或多個處理器或中央處理單元(CPU))。 覆蓋在存儲資源114上的存儲抽象(例如,鍵/值存儲或文件系統)允許由一個或多個客戶端 120、120a-n對存儲資源114的可擴展使用。客戶端120可以通過網絡130(例如,經由RPC)與 資源主機110進行通信。
[0033] 分布式存儲系統100可以包括多層冗余,其中數據312被復制和/或編碼并被存儲 在多個數據中心中。數據中心容納計算機系統及其相關聯的部件,例如電信和存儲系統 100。數據中心通常包括備用電源、冗余通信連接、環境控制(以維持恒定溫度)和安全設備。 數據中心可以為使用大量電力(例如,和小鎮一樣多)的大型工業級操作。數據中心可以被 定位在不同地理位置(例如,不同城市、不同國家和不同洲)中。在某些示例中,數據中心或 其各部分要求維護(例如,由于功率中斷,或將存儲系統100的一部分斷開連接以更換零件, 或者系統故障,或者其組合)。存儲在這些數據中心并且具體地分布式存儲系統100中的數 據312可能在維護期間對用戶/客戶端120不可用,從而導致損害或停止用戶的操作。在分布 式存儲系統100的維護(或意外故障)期間,某些數據312具有比其他數據312更高的風險變 得完全不可用。期望將數據總體分割成高可用性數據312和低可用性數據312并且確定哪些 數據312會由于維護而產生更高的丟失風險,繼而恢復/復制該數據312而不需要恢復所有 或大多數剩余的數據312,這可能導致缺乏效率。
[0034] 在某些實現方式中,分布式存儲系統100是"單邊"的,從而消除對用于對來自客戶 端120的遠程過程調用(RPC)做出響應以存儲或取回在它們的對應資源主機110上的數據 312的任何服務器作業的需要,并且相反可以依靠專用硬件來處理遠程請求122。"單邊"是 指通過其可以在硬件中而非通過運行在資源主機110的CPU 112上的軟件來完成在資源主 機110上的大多數請求處理的方法。不是使資源主機11〇(例如,服務器)的處理器112運行將 對應的存儲資源114(例如,非瞬態存儲器)的訪問導出到運行在客戶端120上的客戶端進程 128的服務器進程118,相反,客戶端120可以通過資源主機110的網絡接口控制器(NIC)116 直接訪問存儲資源114。換言之,運行在客戶端120上的客戶端進程128可以直接地與一個或 多個存儲資源114對接,而無需對運行在計算資源112上的任何服務器進程118的例程的運 行。該單邊分布式存儲架構提供相對高的吞吐量和低延遲,這是因為客戶端120能夠訪問存 儲資源114,而不與資源主機110的計算資源112對接。這具有典型的雙邊分布式存儲系統 100帶來的對針對存儲114和CPU周期的要求去耦合的影響。單邊分布式存儲系統100能夠利 用遠程存儲資源114,而無論在該資源主機110上是否存在空閑的CPU周期;另外,由于單邊 操作不爭奪服務器CPU 112資源,所以單邊系統能夠以非常可預測的低延遲來服務高速緩 存請求122,甚至當資源主機以高CPU利用率運行時。因此,單邊分布式存儲系統100允許比 傳統雙邊系統更高的集群存儲114和CPU 112資源兩者的利用率,同時給出可預測的低延 遲。
[0035] 在某些實現方式中,分布式存儲系統100包括存儲邏輯部分102、數據控制部分104 以及數據存儲部分106。存儲邏輯部分102可以包括事務應用編程接口(API)350(例如,單邊 事務系統客戶端庫),其負責例如經由RPC或單邊操作訪問底層數據。數據控制部分104可以 管理關于任務對存儲資源114的指派和訪問,例如指派存儲資源114,用對應的網絡接口控 制器116登記存儲資源114,建立在(一個或多個)客戶端120與資源主機110之間的連接,處 置在機器故障的情況下的錯誤,等等。數據存儲部分106可以包括松散耦合的資源主機110、 110a-n〇
[0036] 分布式存儲系統100可以將數據312存儲在動態隨機存取存儲器(DRAM) 114中并經 由具有遠程直接存儲器訪問(RDMA)能力的網絡接口控制器116從遠程主機110供應數據 312。網絡接口控制器116(還被稱為網絡接口卡、網絡適配器、或LAN適配器)可以為計算機 硬件部件,其將計算資源112連接到網絡130。資源主機110a-n和客戶端120兩者可以均具有 用于網絡通信的網絡接口控制器116。運行在資源主機110的計算處理器112上的主機進程 118用網絡接口控制器116登記存儲器114的遠程直接存儲器可訪問區115a-n的集合。主機 進程118可以將存儲器114的遠程直接存儲器可訪問區115a-n登記為具有只讀或讀/寫權 限。資源主機110的網絡接口控制器116創建針對每個所登記的存儲器區115a-n的客戶端密 鑰302。
[0037] 由網絡接口控制器116執行的單邊操作可以限于簡單的讀、寫以及比較和交換操 作,其中沒有一個操作可以足夠復雜以用作針對由用于執行高速緩存請求并管理高速緩存 策略的傳統高速緩存服務器作業實現的軟件邏輯的簡易替代。事務API 350將諸如查找或 插入數據命令的命令轉譯成基元網絡接口控制器操作的序列。事務API 350與分布式存儲 系統100的數據控制和數據存儲部分104、106對接。
[0038] 分布式存儲系統100可以包括用于向網絡接口控制器116登記的供遠程訪問的存 儲器114的共同定位的軟件并建立與客戶端進程128的連接。一旦建立了連接,客戶端進程 128就能夠經由網絡接口控制器116的硬件中的引擎訪問所登記的存儲器114,而無需來自 對應的資源主機110的本地CPU 112上的軟件的任何參與。
[0039]參考圖1B,在某些實現方式中,分布式存儲系統100包括多個單元200(每個單元 200包括資源主機110)以及與資源主機110進行通信的管理器(CUrat〇r)210。管理器210(例 如,進程)可以運行在連接到網絡130的計算處理器202(例如具有非瞬態存儲器204的服務 器)上并管理數據存儲(例如,管理存儲在資源主機110上的文件系統),控制數據放置和/或 發起數據恢復。此外,管理器210可以跟蹤資源主機110上的數據312的存在和存儲位置。冗 余管理器210是可能的。在某些實現方式中,(一個或多個)管理器210跟蹤跨多個資源主機 110的數據312的分條(striping)和用于冗余和/或執行的給定條帶的多個副本的存在和/ 或位置。在計算機數據存儲中,數據分條是以使對不同物理存儲設備114(例如,單元(cell) 200和/或資源主機110)做出順序分段的訪問的方式將順序數據312(例如,文件310(圖2)) 邏輯地分割的技術。在處理設備請求比存儲設備114能夠提供訪問更快地訪問數據時,分條 是有用的。通過執行在多個設備上的分段訪問,能夠并發地訪問多個分段。這提供更多的數 據訪問吞吐量,其避免使處理器空閑地等待數據訪問。
[0040] 在某些實現方式中,事務API 350在(例如,具有客戶端進程128的)客戶端120與管 理器210之間進行對接。在某些示例中,客戶端120通過一個或多個遠程過程調用(RPC)與管 理器210進行通信。響應于客戶端請求122,事務API 350可以找到在(一個或多個)資源主機 110上的特定數據312的存儲位置并獲得允許訪問數據312的密鑰302。事務API 350(經由網 絡接口控制器116)直接與適當的資源主機110進行通信以(例如,使用遠程直接存儲器訪 問)讀或寫數據312。在資源主機110是非操作性的或者數據312被移動到不同資源主機110 的情況下,客戶端請求122發生故障,從而提示客戶端120重新查詢管理器210。
[0041] 參考圖2,在某些實現方式中,管理器210存儲并管理文件系統元數據212。元數據 212可以包括將文件31(h-n映射到文件描述符30(h- n的文件映射214。管理器210可以檢查并 修改其持久元數據212的表示。管理器210可以使用針對元數據212的三種不同的訪問模式: 只讀;文件事務;以及條帶事務。參考圖2和圖3A至圖3C,在某些實現方式中,由管理器210存 儲的文件描述符30(h- n包含元數據212,例如文件映射214,文件映射214在適當的情況下將 條帶320a-n映射到存儲在存儲器主機110上的數據塊330nD和代碼塊330nC。為了打開文件 310,客戶端120將請求122發送到管理器210,其返回文件描述符300。客戶端120使用文件描 述符300來將文件塊偏移轉譯到遠程存儲器位置115a-n。文件描述符300可以包括客戶端密 鑰302(例如,32位密鑰),其對存儲器主機110上的塊330是唯一的并且用于RDMA讀該塊330。 在客戶端120加載文件描述符300之后,客戶端120可以經由RDMA或另一數據獲取方法來訪 問文件310的數據312。
[0042]管理器210可以維持針對為單元200的部分的所有存儲器主機110的狀態信息。狀 態信息可以包括容量、空閑空間、存儲器主機110上的負載、從客戶端的視角的存儲器主機 110的延遲以及當前狀態。管理器210可以通過直接地查詢單元200中的存儲器主機110和/ 或通過查詢客戶端120以從客戶端的視角收集延遲統計數字來獲得該信息。在某些示例中, 管理器210使用存儲器主機狀態信息來做出再平衡、消耗、恢復決策和指派決策。
[0043](一個或多個)管理器210可以指派塊330以便處置針對文件310中的更多存儲空間 的并且用于再平衡和恢復的客戶端請求122。在某些示例中,與在存儲設備114之間分發數 據塊330nD和代碼塊330nC不同,處理器202在存儲設備114之間復制塊330。管理器210可以 維持存儲器主機負載和活力的負載圖216。在某些實現方式中,管理器210通過生成候選存 儲器主機110的列表來指派塊330并將指派塊請求發送到候選存儲器主機110中的每個候選 存儲器主機。如果存儲器主機110超載或不具有可用空間,則存儲器主機110可以拒絕該請 求122。在這種情況下,管理器210選擇不同的存儲器主機110。每個管理器210可以持續地掃 描文件名稱空間的其指定部分,大約每分鐘檢查一次所有元數據212。管理器210可以使用 文件掃描來檢查元數據212的完整性,確定需要被執行的工作,和/或生成統計數字。文件掃 描可以并發地與管理器210的其他操作進行操作。掃描本身可以不修改元數據212,但是調 度要由系統100的其他部件完成的工作并計算統計數字。
[0044]參考圖3A至圖3H,數據312可以為一個或多個文件310,其中每個文件310具有指定 復制級311和/或錯誤校正代碼313。管理器210可以將每個文件310劃分成條帶320的集合, 其中每個條帶320與剩余條帶320獨立地被編碼。針對被復制的文件310(圖3A),每個條帶 320是管理器210復制為條帶副本330n的單個邏輯塊并且被存儲在多個存儲設備114上。在 這種情況下,條帶副本330n也被稱為塊330。針對擦除編碼的文件310(圖3B),每個條帶320 包括多個數據塊330nD和非數據塊330nC(例如,代碼塊),管理器210將其放置在多個存儲資 源114上,其中數據塊330nD和非數據塊330nC的集合形成單個編碼字。總體上,管理器210可 以將每個條帶320放置在存儲資源114上,與文件310中的其他條帶320如何被放置在存儲資 源114上無關。錯誤校正代碼313將冗余數據或奇偶校驗數據添加到文件310,使得文件310 能夠稍后被接收者恢復,甚至當引入了許多錯誤(高達被使用的編碼的容量)時。錯誤校正 代碼313用于維持存儲器設備中的數據完整性,用于重構數據312以用于執行(延遲),或者 用于更快地消耗(drain)機器。
[0045]參考圖3B,每個條帶320基于編碼級別而被劃分成數據塊330nD和非數據塊330nC, 編碼級別例如里德-所羅門(Reed-Solomon)代碼(圖3C)、嵌套代碼(圖3D至圖3H)或其他層 級擦除編碼。非數據塊330nC可以為代碼塊330nC(例如,對于里德-所羅門編碼)。在其他示 例中,非數據塊330nC可以為代碼檢查塊330nCC、字檢查塊330nWC以及代碼檢查字檢查塊 330nCCWC(對于嵌套編碼)。
[0046]數據塊330nD是指定量的數據312。在某些實現方式中,數據塊330nD是來自文件 310的連續部分的數據312。在其他實現方式中,數據塊330nD是來自文件310的一個或多個 非連續部分的數據312。例如,數據塊330nD能夠為256字節或其他單位的數據312。
[0047]損壞的塊330(例如,數據塊330nD或非數據塊330nC)是包含一個或多個錯誤的塊 330。通常,損壞的塊330使用錯誤檢測編碼313來標識。例如,損壞的塊330可以是被完全擦 除的(例如,如果塊330被存儲于在颶風中被破壞的硬盤驅動器中),或者損壞的塊330能夠 具有單個比特翻轉。健康塊330是未被損壞的塊330。損壞的塊330能夠被有意損壞,例如在 特定資源主機110被關閉以進行維護的情況下。損壞的塊可以是缺失的或不可用的塊。在這 種情況下,損壞的塊330能夠通過標識被存儲在被關機的資源主機110處的塊330來標識。在 某些實現方式中,損壞的塊330可以使用健康塊330恢復。損壞的塊(例如,數據塊330nD或非 數據塊330nC)可能由于各種原因而被損壞。條帶320內的損壞的塊330可以從健康塊330中 恢復。文件310的非數據塊330nC包括錯誤校正代碼塊313。錯誤校正代碼塊313包括基于一 個或多個數據塊330nD的數據312的塊330。在某些實現方式中,每個代碼塊330nC具有與數 據塊330nD相同的指定大小(例如,256字節)。代碼塊330nC是使用錯誤校正代碼313(例如最 大距離分害U(MDS)編碼)來生成的。MDS編碼的示例包括里德-所羅門編碼。各種技術能夠被 用于生成代碼塊330nC。通常,任意錯誤校正代碼313能夠被使用,能夠從d個獨特的健康的 塊330(數據塊330nD或代碼塊330nC)的任何集合重構d個數據塊330nD。
[0048] 編碼字是數據塊330nD和基于那些數據塊330nD的代碼塊330nC的集合。如果MDS編 碼被用于生成包含d個數據塊330nD和c個代碼塊330nC的編碼字,則所有塊330(數據或編 碼)都能夠被重構,只要能夠從編碼字獲得任意健康塊330 (數據或編碼)。
[0049]圖3C示出里德-所羅門編碼313a作為錯誤校正代碼塊313。每個條帶320被劃分成 存儲在多個存儲資源114上的塊330。塊330可以為數據塊330nD或代碼塊330nC,其一起形成 單個編碼字。數據塊330nD包括實際數據312;而代碼塊330nC是用于奇偶校驗以確定文件 310是否是完整無缺的。里德-所羅門編碼313a允許高達代碼塊330nC的總數目的丟失,其中 條帶310仍然可以根據數據塊330nD來被重構。因此,文件310的每個條帶320包括多個數據 塊330nD和代碼塊330nC代碼塊,管理器210將其放置在多個存儲資源114上,其中數據塊 330nD和代碼塊330nC的集合形成單個編碼字。總體上,管理器210可以將每個條帶32放置在 存儲資源114上,與文件310中的其他條帶320如何被放置在存儲資源114上無關。里德-所羅 門編碼313a將冗余數據312或奇偶校驗數據312添加到文件310,使得文件310能夠稍后被接 收者恢復,甚至當引入了許多錯誤(高達被使用的編碼的容量)時。里德-所羅門編碼313a用 于維持資源主機110中的數據完整性,用于重構數據312以用于執行(延遲),或者用于更快 地消耗機器。
[0050]參考圖3D至圖3H,在嵌套編碼313b技術中,編碼數據分塊316包括數據分塊316(具 有數據塊330nD)和錯誤校正代碼塊(即,非數據塊330nC),其被存儲被視為形成二維R x C 數組。針對每列C存在能夠用于重構每列的X個或更少的損壞的塊330的X個代碼塊330nC(被 稱為"代碼檢查塊330nCC")。針對整個2-D數組存在Y個代碼塊330nC(被稱為"字檢查塊 330nWC")。當在一行或多行C中存在超過X個損壞的塊330時,除了其他健康塊330之外還使 用代碼檢查塊330nWC來重構損壞的塊330。盡管在本說明書中描述的某些示例將編碼數據 分塊314(即,數據分塊316和代碼塊330nC(即,非數據塊330nC))圖示為形成二維數組,但是 能夠進行創建不同地配置的編碼數據分塊314的編碼技術。例如,不同的列能夠具有不同數 目的代碼檢查塊330nCC,并且包含字檢查塊330nWC的列C能夠具有與包含數據塊330nD和代 碼檢查塊330nC的列不同的數目的行。
[0051 ]編碼330nC能夠被用于通過將每列C的數據塊330nD分配到數據中心來將數據312 跨資源主機110存儲。列C內的每塊3 30能夠被分配到數據中心內的資源主機110。之后,如果 X個或更少的塊330在數據中心處丟失,則塊330能夠使用僅僅數據中心內通信來被重構(例 如,因此沒有其他數據中心必須在執行重構中提供數據312)。如果超過X個塊330在一個或 多個數據中心中丟失,則Y個字檢查塊330nWC用于嘗試重構。因此,數據中心間通信(其可以 是代價更高的,例如比數據中心內通信更慢)僅僅當在單個數據中心內X個塊330被損壞時 是需要的。
[0052]編碼還能夠在單個數據中心內被使用。代替將不同的列C分配到不同的數據中心, 編碼系統102將所有列存儲在單個數據中心處。數據塊330nD和代碼塊330nC能夠被存儲在 該數據中心內的不同的資源主機110處。這例如在重構期間從資源主機110讀取數據312是 代價高的(例如,耗時的)情況下是有用的,使得編碼系統102能夠在重構期間讀取比使用傳 統編碼技術將需要的更少的塊330。少量損壞的塊330能夠通過讀取少量其他塊330(列C中 的代碼檢查塊330nCC和其他數據塊330nD)來被重構,并且大量損壞的塊330能夠通過在需 要時使用字檢查塊330nWC來被重構。
[0053]參考圖3D至圖3H,在某些實現方式中,嵌套編碼313b技術示出形成編碼字的數據 塊330nD和代碼塊330nC。如所示出的,嵌套編碼313b技術是二維(2D)嵌套編碼313b技術,但 是三維(3D)嵌套編碼313b技術也可以被應用。2D嵌套代碼313b根據采用系統形式的任意線 性MDS編碼來創建。基于數據分塊316的字檢查塊330nWC被劃分成兩組,第一組包括X個代碼 塊330nC,并且第二組包括N個代碼塊330nC。數據312的分塊被視為形成列C的數組,并且第 一組中的X個代碼塊330nC用于通過將它們"拆分"成每列的分離的分量來創建每列X列塊 330("拆分的"代碼檢查塊330nCC)。第二組中的N個代碼塊330nC形成字檢查塊330nWC。 [0054] 例如,圖3E示出數據分塊(D0-D41)316(其中D0-D41是數據塊330nD)和基于數據分 塊(D0-D41)316 的代碼塊(C0-C7)330nC。數據塊(D0-D41)330nD 和代碼塊(C0-C7)330nC 形成 編碼字。代碼塊330nC被劃分成第一組和第二組,其中第一組包括C0-C1,第二組包括C2-C7。 C0-C1被拆分以形成拆分的代碼檢查塊330nCC<X2-C7被用作字檢查塊330nWC。
[0055] 參考圖3F,示出了包括數據分塊(D0-D41)316和額外代碼塊330nC(拆分的代碼檢 查塊330nCC和字檢查塊330nWC)的得到的編碼數據分塊314。為了生成與列j的C0(標示為 C0,j)相對應的拆分的代碼檢查塊330nCC,生成C0,即使不是列j中的所有數據塊330nD都具 有值零。也就是說,C0,j具有將從執行使用數據塊330nD的完整數據分塊316而非相反使用 僅僅列j來生成C0的操作得到的值,其中所有其他列被清零。例如,如果生成器矩陣將被用 于生成完整數據分塊316的C0,則生成器矩陣能夠被修改以生成CO,j,使得其具有將使用原 始生成器矩陣并將該原始生成器矩陣應用到數據分塊316得到的值,其中除了列j的列中的 數據塊330nD被清零。
[0056]針對每列C的拆分的Cl,j的代碼檢查塊330nCC類似地但是使用C1代替C0來生成。 結果,C0是CO,0-C0,6的線性組合,并且C1是Cl,0-C1,6的線性組合。也就是說, 「00571 " L。。57」C0=.、 :開且 (1) _] ⑵
[0059] 在圖3F中被標示為"? "的塊330能夠以如下面參考圖3G進一步描述的各種方式來 生成。
[0060] 在圖3E和圖3F的示例中,得到的編碼數據分塊316包括42個數據塊330nD和8個代 碼塊330nC。參考用于創建編碼分塊314的原始編碼,代碼塊330nC屬于如以上所描述的兩組 中的一組,其中X = 2處于第一組中,并且其中的N=6處于第二組中。無論何時在頭七列中的 一列內存在兩個或更少的(X個或更少的)損壞的塊330,就能夠使用列C的健康塊330和針對 列C的拆分的代碼檢查塊330nCC來校正損壞的塊330。為了證明這個,假設j標示包括兩個或 更少的損壞的塊330的類C并且考慮通過將來自列C的除了 j之外的所有數據塊330nD清零獲 得的編碼字。在該編碼字中,C0 = C0,j并且Cl = C1,j。結果,其他列中的兩個或更少的損壞 的塊330As同樣包含所有零數據塊330nD,并且通過查看字檢查塊330nWC為被損壞的。
[00611在圖3F中示出的示例中,字檢查塊330nWC完整地填充整列C(右邊的列)。2D嵌套代 碼313b能夠利用字檢查塊330nWC的任意數目的列C來創建。字檢查塊330nWC的列C能夠具有 與數據塊330nD的列相同數目的行R或不同數目的行R,并且字檢查塊330nWC的列C能夠具有 彼此不同的數目的行R。字檢查塊330nWC的列C能夠但不必須具有代碼檢查塊330nCC,即代 碼檢查字檢查塊330nCCWC。增加字檢查塊330nWC的數目改進所存儲的數據312的可靠性但 是在資源主機110處使用更多的存儲。總體上,針對嵌套代碼313b,列C包括數據塊330nD或 字檢查塊330nWC但是不是兩者。
[0062] 總體上,具有每列C有X個拆分的代碼檢查塊330nCC和N個字檢查塊330nWC的2D嵌 套代碼313b能夠被用于在執行僅僅列內通信(其通常為例如數據中心內通信)的同時重構 每列C有X個損壞的塊330(在包括數據塊330nD的那些列中)。在重構分塊內的多個損壞的塊 330中,那些損壞的塊330通常首先被重構,因為列內通信比列間通信代價較低,但是其他損 壞的塊330可能仍然存在。如果在重構列內的損壞的塊330之后,仍然存在(N+X)個或更少的 其他塊330(因為它們不能夠使用列內通信來被重構),則那些其他損壞的塊330能夠使用字 檢查塊330nWC和拆分的代碼檢查塊330nCC來被重構。第一組中的字檢查塊330nWC(C0和C1) 能夠根據拆分的代碼檢查塊330nCC例如使用公式= 來確定,即使那些字檢 查塊330nWC未被明確存儲。
[0063]為了證明這個,假設Z標示被損壞的字檢查塊330nWC的數目,并且假設Y標示第一 組中的不能夠根據公式e %1從它們對應的拆分的代碼檢查塊330nCC重構為被 損壞的拆分的代碼檢查塊330nCC的字檢查塊330nWC的數目。使用該公式,能夠確定來自第 一組的X-Y個字檢查塊330nWC,從而得到具有第一組中的Y個損壞的字檢查塊330nWC和第二 組中的Z個損壞的字檢查塊330nWC的的編碼字(例如,圖3E中示出的編碼字)。因為至多存在 總計N+X個損壞的塊330,所以至多存在N+X-Y-Z個損壞的數據塊330nD。因此,能夠使用得到 的編碼字來重構所有損壞的塊330,因為其包括至多N+X-Y-Z+Y+Z = N+X個損壞的塊330。 [0064]參考圖3G,在某些實現方式中,得到的編碼分塊包括針對字檢查塊330nWC的代碼 檢查塊330nCC( 即,代碼檢查字檢查塊330nCCWC)。與圖3F的編碼分塊314相比較,圖3G的分 塊包括代碼檢查塊C0,7和Cl,7 330nCC代替在圖3F中利用"?"標記的位置。這是一種提供重 建損壞的字檢查塊330nWC而不依賴列間通信的方式。代碼檢查塊C0,7和Cl,7 330nCC能夠 以各種方式來生成。例如,那些代碼檢查塊330nCC能夠基于C2-C7以基于D0-D5來生成C0,0 和Cl,0相同的方式來生成。圖3G的(使用示例嵌套代碼313b)得到的編碼分塊能夠被用于在 執行列內重構之后重構高達八個損壞的塊330。能夠針對包括字檢查塊330nWC的任何數目 的列添加代碼檢查塊330nC。
[0065]參考圖3H,在某些實現方式中,管理器210使用嵌套代碼313b來分發數據312。系統 100接收數據分塊316(步驟372)。數據分塊316能夠包括md*nd數據塊330nC,md是數據行的數 目,并且nd是數據列的數目,并且m d和nd大于或等于一。編碼分塊包括m*n個塊330,其包括 md*nd,其中m是數據塊330nD和非數據塊330nC的行R的總數目,并且n是數據塊330nD和非數 據塊330nC的列C的數目;m和n大于或等于一。系統100使用采用系統形式的第一線性錯誤校 正代碼313和數據塊330nD來生成字檢查塊330nWC的一列或多列C(步驟374)。相同行R的字 檢查塊330nWC和數據塊330nD形成編碼字。對于數據塊330nC的md行中的每行,系統100生成 針對列C的一個或多個拆分的代碼檢查塊330nCC(步驟376)。拆分的代碼檢查塊330nCC被生 成使得來自不同列C的n個拆分的代碼檢查塊330nCC的線性組合形成包括數據塊330nD和m 個字檢查塊330nWC的第一代碼檢查塊。第一字檢查塊330nWC(以及從來自不同列C的拆分的 代碼檢查塊330nCC的線性組合得到的任何其他字檢查塊330nWC)形成具有數據塊330nD和 在步驟374中生成的字檢查塊330nWC的編碼字。例如,針對每列C的拆分的代碼檢查塊 330nCC能夠使用拆分的錯誤校正代碼313和md個數據塊330nD或字檢查塊330nWC來生成,其 中拆分的錯誤校正代碼313包括與針對被應用到數據塊330nD的第一線性錯誤校正代碼313 的生成器矩陣編碼相同的拆分的生成器矩陣,其中數據塊330nD對于除了列C之外的列C被 清零。
[0066]系統100存儲數據塊330nD和拆分的代碼檢查塊330nCC以及字檢查塊330nWC的列C (步驟378)。在某些實現方式中,系統100將所有塊330存儲在資源主機110的單個組處。在某 些其他實現方式中,系統100將每列C分配到資源主機110的不同組。當系統100標識一個或 多個損壞的塊330時,系統100能夠使用拆分的代碼檢查塊330nCC和字檢查塊330nWC來重構 損壞的塊330。通常,系統100試嘗試使用同一行C中的拆分的代碼檢查塊330nCC和其他數據 塊來重構損壞的塊330。如果在使用僅僅拆分的代碼檢查塊330nCC重構損壞的塊330之后, 某些損壞的塊330仍然存在,則系統100使用字檢查塊330nWC進行重建,包括使用能夠通過 確定拆分的代碼檢查塊330nCC的線性組合而確定的字檢查塊330nWC進行重建。在某些示例 中,當存在多個丟失時,系統100使用包括數據塊330nD的任意塊330。
[0067] 存儲系統100或其各部分可以經受一段時間的系統故障。在存儲系統100的資源主 機110上分發的數據312可能對于用戶不可用。例如,參考回圖1B,資源主機110a可能正在經 受維護或者具有系統故障;因此,資源主機ll〇a上存儲的數據312(例如,條帶副本330n、數 據塊330nD和非數據塊330nC)可能不可獲取(即,數據312不可訪問)。另外,資源主機110a可 能持續一段時間(例如,一周)功能才能正常或者維護才能完成。在此時間段期間,資源主機 ll〇a不可用,存儲系統100恢復丟失數據312使得如果用戶進行文件請求122,則數據312可 用。
[0068] 在某些實現方式中,系統100將數據312分割成高可用性數據312和低可用性數據 312并且確定哪些數據312會由于維護而產生更高的丟失風險。系統100可以恢復或復制高 可用性數據312而不需要恢復所有或大多數剩余的數據312。由于數據312的某些數據在維 護或故障之后馬上可用,因此系統100延遲恢復該數據312而是替換高可用性數據312。
[0069] 參考圖4A至圖4C,管理器210可以確定或接收分布式存儲系統100的層級400來標 識在其處可能發生維護的級別(例如,級別1-4),而不影響對所存儲的數據312的用戶訪問。 維護或故障(嚴格層級400a(圖4A)、非嚴格層級400b(圖4B))可以包括功率維護/故障、冷卻 系統維護/故障(圖4C)、聯網維護/故障、更新或更換零件、或影響分布式存儲系統100的其 他維護或功率故障。維護可以被調度,在某些示例中,未調度的系統故障可能發生。
[0070] 系統層級400包括具有跨越一個或多個系統級別1-5的維護單元/系統域402的系 統級別(例如,級別1-4)。每個系統域402具有活動狀態或不活動狀態。分發中心模塊410包 括一個或多個單元420,420a-n,并且每個單元420包括資源主機110的一個或多個機架430。 每個單元420還包括單元冷卻422、單元功率424(例如,母線槽)和單元級別聯網426 (例如, 網絡交換機)。類似地,每個機架430包括機架冷卻432、機架功率434(例如,母線槽)和機架 級別聯網436 (例如,網絡交換機)。
[0071]系統級別可以包括第一系統級別1、第二系統級別2、第三系統級別3和第四系統級 別4。第一系統級別1對應于數據處理設備112、非瞬態存儲器設備114或網絡設備116(例如, NIC)的資源主機或主機機器110,110a-n。每個主機機器/資源主機110具有系統域402。第二 系統級別2對應于機架430,430a-n以及在機架級別主機機器110的冷卻遞送器432、功率遞 送器434(例如,母線槽)或通信遞送器436(例如,網絡交換機和電纜)。每個機架430或機架 級別的冷卻遞送器432、功率遞送器434或通信遞送器436具有系統域402。第三系統級別3對 應于分發中心模塊410和向相關聯機架430供應的單元冷卻422、單元功率424或單元級別聯 網426的任意單元420,420a-n。每個單元420或單元冷卻422、單元功率424或單元級別聯網 426具有系統域402。第四系統級別4對應于分發中心模塊410。每個分發中心模塊410具有系 統域402。
[0072]圖4A示出了嚴格系統層級400a,其中系統層級400的每個層級部件(例如,資源主 機110、機架430、單元420或分發中心模塊410)取決于一個其他層級部件110、410、420、430。 而圖4B示出了非嚴格系統層級400b,其中一個層級部件110、410、420、430具有不止一個輸 入饋送。在某些示例中,管理器210將系統層級400存儲在其處理器202的非瞬態存儲器204 上。例如,管理器210將第一資源主機110(及其對應的處理器資源112a和存儲資源114a)映 射到第一機架430a,將第一機架430a映射到第一母線槽420a,以及將第一母線槽420a映射 到第一分發中心模塊410a。
[0073] 管理器210基于層級部件110、410、420、430的映射來確定當層級部件110、410、 420、430正在經受維護時哪些資源主機110是不活動的。一旦管理器210將系統域402映射到 資源主機11〇(因此映射到其對應的處理器資源112a和存儲資源114a),管理器210確定能夠 在其處執行維護的最高級別(例如,級別1-4),同時維持處理器或數據可用性。
[0074]系統域402包括經受維護的層級部件110、410、420、430和對其依賴的任何層級部 件110、410、420、430。因此,當一個層級部件110、410、420、430經受維護時,該層級部件110、 410、420、430是不活動的,并且層級部件110、410、420、430的系統域402中的任何其他層級 部件110、410、420、430也是不活動的。例如,當資源主機110經受維護時,包括存儲設備114、 數據處理器112和NIC 116的級別1系統域402a處于不活動的狀態。當機架430經受維護時, 包括機架430和依賴于機架430的任何資源主機110的級別2系統域402b處于不活動的狀態。 當單元420(例如,去往單元420a的單元冷卻部件422、母線槽424和/或網絡交換機426的任 意一個)經受維護時,包括單元420和依賴于單元420的級別3和4中的任何層級部件110、 410、420、430處于不活動的狀態。最后,當分發中心模塊410經受維護時,包括分發中心模塊 410和依賴于分發中心模塊410的級別2到4中的任何部件110、410、420、430處于不活動的狀 態。活動
[0075] 在某些示例中,如圖4B所示,非嚴格層級部件410、420、430、114可以具有雙重饋 送,即層級部件110、410、420、430取決于兩個或更多個其他層級部件110、410、420、430。例 如,單元420可以具有來自兩個分發中心模塊410的饋送;和/或機架430可以具有來自兩個 單元420的雙重饋送。如所示出的,級別2系統域402b可以包括兩個機架430a和430n,其中第 二機架430n包括來自兩個單元420a、420n的兩個饋送。因此,第二機架430n是兩個系統域 402ca和402cb的一部分。因此,系統層級400的較低級別被維持,而不引起系統層級400的較 高級別的丟失。這引起系統100中的冗余,其允許數據可訪問性。具體地,分發中心模塊410 可以被維持,而不丟失對其依賴的任何單元420。在某些示例中,機架430包括雙電源機架, 其允許母線槽的維護而不丟失到對其依賴的雙電源機架的功率。在某些示例中,可以被維 持而不引起中斷的系統域402在分發塊330時被忽視以允許維護;然而,被忽視的系統域402 可以在分發塊330時被包括,這是因為意外中斷可以仍然引起塊330的丟失。
[0076]在某些示例中,冷卻設備(諸如單元冷卻422和機架冷卻432)被用于分別冷卻單元 420和機架430。單元冷卻部件422可以冷卻一個或多個單元420。類似地,機架冷卻432可以 冷卻一個或多個機架430。管理器210存儲資源主機110與冷卻設備(即,單元冷卻422和機架 冷卻432)的關聯性。在某些實現方式中,管理器210考慮存儲系統100內可能出現的所有可 能的維護組合以確定系統層級400或維護層級400的組合。例如,其中一個或多個冷卻設備 422、432故障的系統層級400,或其中網絡設備116、426、436故障的系統層級400,或其中功 率分發424、434故障的系統層級400。
[0077]因此,當存儲系統100中的層級部件110、410、420、430被維護時,該層級部件110、 410、420、430和被映射到或依賴于該層級部件110、410、420、430的任何層級部件110、410、 420、430處于不活動的狀態。處于不活動狀態的層級部件110、410、420、430用戶120不可訪 問,而處于活動狀態的層級部件110、410、420、430用戶可訪問,從而允許用戶120處理/訪問 由該層級部件110、410、420、430存儲/支持/維持的數據312。如前面所提到的,在不活動狀 態期間,用戶120不能夠訪問與經受維護的系統域402相關聯的資源主機110;并且因此,客 戶端120不能夠訪問文件310(即,塊330,其包括條帶副本330n、數據塊330nD和非數據代碼 塊330nC)。
[0078] 在某些實現方式中,管理器210例如基于層級部件110、410、420、430的映射來限制 向任一系統域402的存儲設備114分發的多個塊330。因此,如果級別1系統域402是不活動 的,則管理器210維持對文件310(或條帶320)的可訪問性,盡管某些塊330可能是不可訪問 的。在某些示例中,對于每個文件310(或條帶320),管理器210確定可以被放置在單個系統 域402內的任何存儲設備114內的塊330的最大數目,使得如果與存儲針對文件310的塊330 的存儲設備114相關聯的系統域402正在經受維護,則管理器210可以仍然獲取文件310。塊 330的最大數目確保管理器210能夠重構文件310,盡管某些塊330可能是不可用的。在某些 示例中,塊330的最大數目被設置為較低閾值以適應任何系統故障,同時仍然能夠根據塊 330來重構文件310。當管理器210將塊330放置在存儲設備114上時,管理器210確保在條帶 320內,當單個系統域402經受維護時不超過最大數目的塊330是不活動的。此外,管理器210 還可以例如基于層級部件110、410、420、430的映射來限制系統域402內資源主機110的數據 處理器112上處理作業的數目。因此,如果級別1系統域402是不活動的,則管理器210維持對 作業的可訪問性,雖然資源主機110的某些處理器112是不活動的。
[0079] 在某些實現方式中,如先前所述,系統100可能經受維護或意外故障。存儲設備114 上存儲的某些數據312在其被存儲的存儲設備114處于不活動的狀態時,可能具有更高的風 險變得完全不可用。管理器210可以將數據312進行分割以便由于維護事件具有更大丟失風 險的數據312可以被恢復或復制而不需要管理器210必須復制或恢復數據312的剩余部分 (不具有更大的丟失風險)。
[0080] 在某些實現方式中,管理器210將塊330標識為高可用性塊330a或低可用性塊 330b。高可用性塊330a具有高優先級并且在低可用性塊330b之前。在某些示例中,管理器 210基于數據312或基于數據312的所有者或用戶來確定塊330的可用性。
[0081] 管理器210可以確定針對文件310的每個條帶320的有效冗余值以確定系統100是 否應當優先化條帶320用于恢復(即,添加副本330n或存儲文件310的重構塊/部分以改進文 件310的耐久性和可用性)。有效冗余值基于與對應條帶320相關聯的任意系統域402和塊 330。在某些實現方式中,有效冗余基于可以被丟失的系統域402的數目,使得條帶320中的 數據312變得不可用或不可訪問(例如,不可重構)。備選地,有效冗余是條帶320中需要被丟 失的塊330的數目,使得條帶320中的數據312變得不可用或不可訪問(例如,不可重構)。這 可以在條帶320的所有塊330在不同存儲器設備114上時應用,并且管理器210確定在盤級別 (系統級別1)的有效冗余值。如果丟失系統域402(或備選地,丟失塊330)的數目等于或大于 有效冗余,則系統100將無法重構條帶320(即,系統100無法讀取條帶312的數據)。例如,等 于一的有效冗余指示條帶320中存在至少一個塊330,使得如果該塊變得不可用,則系統100 無法讀取條帶320的數據312。等于二的有效冗余指示最小數目兩個塊330需要變得不可用, 系統100才無法讀取條帶320的數據。
[0082]在某些實現方式中,管理器210確定在各系統層級級別(例如,級別1-4)的有效冗 余值。管理器210考慮特定條帶320以及在其可以確定有效冗余值的級別。管理器210模擬從 條帶320移除塊330以確定有效冗余值。管理器210通過移除塊330來假設從條帶320移除哪 些塊330,其中塊330的最大數目依賴于系統層級400的選定級別中的單個節點。管理器210 保持假設移除塊330,直到剩余塊330的數目不能夠重構特定條帶320內的數據312。移除循 環的數目是有效冗余。
[0083]針對復制編碼(圖3A中所述),有效冗余值是在包含至少一個健康(例如,可訪問) 塊300的系統層級400的選定級別唯一系統域402的數目,因為只要系統100在系統域402中 保留一個塊330(例如,被復制的塊330n),則數據312是冗余的。例如,如果條帶320在單個系 統域402中具有一個或多個副本塊330n,則有效冗余等于1。如果條帶320在一個系統域402 中具有指示一個可用/可訪問塊330,并且在另一系統域402具有另一可用/可訪問塊330,則 有效冗余等于2。參考圖4C中所示的示例,假設條帶320具有在第一存儲設備114a、第二存儲 設備114b和第三存儲設備114c上存儲的三個副本塊330n。每個存儲設備114a-c位于不同的 機架430。第一存儲設備114a位于第一機架430a,第二存儲設備114b位于第二機架430b,以 及第三存儲設備114c位于第三機架430c。如圖所示,第一機架430a和第二機架430b共享相 同第一單元420a(例如,母線槽424),以及第三機架430c依賴于第二單元420b。因此,副本塊 330n位于兩個級別3系統域402ca和402cb。副本塊330n還位于三個級別2系統域402ba、 402bb和402bc,以及三個級別4系統域402aa、402ab和402ac。另外,第一單元420a和第二單 元420b都依賴于一個分發中心模塊410,410a。條帶320在存儲設備114的級別(在級別1)的 有效冗余等于3,因為副本塊330n被置于三個不同的存儲設備114上。條帶320在機架430的 級別(在級別2)的有效冗余也等于3,這是因為副本塊330n被置于取決于三個不同機架 430a-c的存儲設備114上。條帶320在單元420的級別(在級別3)的有效冗余等于2,因為數據 312被置于取決于饋送第一單元420a和第二單元420b的兩個母線槽424的存儲設備114上。 條帶320在分發中心模塊410的級別(在級別4)的有效冗余等于1。因此,有效冗余值可以被 認為是包含至少一個健康(例如,可訪問)塊300的系統層級400的選定級別唯一系統域402 的數目(因為只要系統100保留一個塊330,數據312就是冗余用于復制)。
[0084] 參考圖4D和圖4E,針對擦除編碼文件的有效冗余更復雜,這是由于系統100可能無 法簡單地減少塊330并對條帶320中唯一系統域的數目計數。
[0085]圖4D圖示了針對里德-所羅門擦除編碼文件310的示例性系統層級400d。假設條帶 320具有兩個代碼塊330nC和四個數據塊330nD,總共六個塊330。里德-所羅門編碼313a允許 多達代碼塊330nC總數或者代碼塊330nC或數據塊330nD的任意組合的丟失,其中文件310仍 然可以根據剩余的數據塊330nD和/或代碼塊330nC重構。在此情況下,系統100可以丟失多 達兩個塊330并仍然全部可重構。塊330被分發在六個機架Rl-R6,430a-430f(級別2),其轉 而被分發在四個單元420a-d(例如,級別3)。如圖所示,第一機架430a和第二機架430b取決 于第一單元420a。第三機架430c取決于第二單元420b,并且第四機架430d和第五機架430e 取決于第三單元420c。最后,第六機架430f取決于第四單元420d。另外,示例包括三個分發 中心模塊410a_c。第一單元420a和第二單元420b取決于第一分發中心模塊410a。第三單元 420c取決于第二分發中心模塊P2,410b,并且第四單元420d取決于第三分發中心模塊410c。 因此,當管理器210確定級別2(即,機架級別)的有效冗余時,管理器210考慮可以移除多少 系統域402并且系統100仍能夠從條帶320讀取數據312。在此示例中,系統100可以移除任意 兩個機架430a-f并且仍能夠讀取數據312。然而,如果系統100移除三個機架430a-f,則系統 100無法讀取數據312以重構條帶320。因此,有效冗余在機架級別(級別2)等于3;因為如果 系統100丟失三個機架430a-f,則條帶320不可讀。如先前提到的,系統100可以丟失多達兩 個塊330并且仍能夠重構條帶320。
[0086]管理器210可以通過假設移除單元420來確定單元級別(即,母線槽級別或級別3) 的有效冗余,該單元420包含與具有條帶320的剩余塊330的其他單元420相比包含條帶320 的最大數目的塊330(以假設最壞情況)。參考圖4D中所示的示例,管理器210假設移除包含 與其他單元420相比最大數目的塊330的單元420。在此情況下,第一單元420a(系統域 402ca)和第三單元420c(系統域402cc)具有最大數目的塊330,所以管理器210選擇(例如, 隨機或確定地)要移除的單元420以確定該級別的有效冗余。一旦管理器210移除單元420或 級別3系統域402c之一,系統100就被留下第一單元420a或第三單元420c并且仍能夠重構條 帶320。系統100繼而假設移除第一單元420a或第三單元420c的另一個,這導致四個不可用 的塊330(即,4>3,3是使得系統100無法讀取條帶320的不可用塊330的數目),這意味著條 帶320在丟失兩個單元420或兩個系統域402、402c之后不可讀。因此,在單元級別(級別3)的 有效冗余等于2,因為在兩個單元420或級別3系統域402c處于不活動狀態時系統100無法重 構條帶320。
[0087]接下來,管理器210考慮在分發中心模塊(級別4)的有效冗余。應用于級別3的相同 假設也被應用于級別4。因此,系統100移除分發中心模塊410,該分發中心模塊410包括與具 有條帶310的剩余塊330的其他分發中心模塊410相比最大數目的塊330。參考回圖4D的示 例,如果系統100移除第一分發中心模塊410a,則條帶320的三個塊330不再可用于重構條帶 320,使得系統100無法讀取條帶320。因此,在分發中心模塊級別的有效冗余等于1,這是因 為在丟失一個分發中心模塊410之后,條帶320不可讀。
[0088]圖4E圖示了針對嵌套編碼文件310的示例性系統層級400e。如先前參考圖3E和圖 3F所述,嵌套編碼文件310包括數據塊330nD、代碼檢查塊330nCC、字檢查塊330nWCC和代碼 檢查字檢查塊330nCCWC。在某些示例中,條帶320包括以兩個塊330的兩個列布置的四個數 據塊330nD,其中每列由一個代碼檢查塊330nCC(針對總共兩個代碼檢查)保護,并且數據塊 330nD由三個字檢查塊330nWC保護。還參考圖4E中的示例,第一到第四機架430a-d包括數據 塊330nD、第五機架430e和第六機架430f包括代碼檢查塊330nCC,以及第七到第九機架 430g-430i包括字檢查塊330nWCC(管理器210不考慮代碼檢查字檢查塊330nCCWC用于確定 嵌套編碼文件310的有效冗余)。
[0089]在每個系統級別,針對嵌套編碼文件310,管理器210可以確定基于列重構、基于條 帶重構或者兩者的有效冗余。針對基于列重構,管理器210僅考慮數據塊330nD和代碼檢查 塊330nCC。在某些示例中,管理器210可以在確定整個條帶320的有效冗余時忽視代碼檢查 塊330nCC。在某些實現方式中,在確定整個條帶320的有效冗余時,管理器210考慮哪個代碼 檢查塊330nCC伴隨哪個列C。例如,如果系統100丟失了第一列C1中的數據塊330nD和第二列 C2中的代碼檢查塊330nCC,則條帶320良好并且可重構。因此,在確定有效冗余值ER時,管理 器210可以考慮嵌套條帶320中塊330的"幾何結構"。
[0090] 在級別2(即,機架級別),管理器210通過考慮與第一到第四機架430a-d相關聯的 存儲設備114上存儲的數據塊330nD以及與第五機架430e和第六機架430f相關聯的存儲設 備114上存儲的代碼檢查塊330nCC,來確定列C的有效冗余。如示例所述,每列C包括兩個數 據塊330nD和一個代碼檢查塊330nCC,總共三個塊330。因此,為了重構列C,系統100需要兩 個可用塊330(即,在設備上存儲的塊330處于活動狀態)。如果兩個或更多個塊330不可用, 則系統100無法重構列C。因此,管理器210確定基于列重構在級別2系統域402的有效冗余等 于2,這是由于如果2個機架不活動,則系統100無法重構列。類似地,管理器210可以進行相 同假設用于確定在級別3和級別4系統域402的基于列重構。基于列重構在級別3系統域402 的有效冗余等于2,假設來自每列C的數據塊330被存儲在不同單元420中,并且基于列重構 在級別4系統域402的有效冗余等于1。
[0091] 此外,管理器210通過考慮與第一到第四機架430a-d相關聯的存儲設備114上存儲 的數據塊330nD以及與第七到第九機架430g-i相關聯的存儲設備114上存儲的字檢查塊 330nWCC,來確定條帶320的有效冗余。在某些示例中,通常在確定有效冗余值ER時,管理器 210忽視代碼檢查塊330nC;而在其他示例中,在確定基于列的有效冗余值ER時,管理器210 考慮代碼檢查塊330nC。因此,為了重構條帶320,系統100需要至少四個可用塊330(即,設備 上存儲的塊330處于活動狀態)。如果四個或更多個塊330不可用,則系統100無法重構條帶 320。因此,系統100確定基于條帶重構在級別2系統域402的有效冗余等于4,這是由于如果 四個機架430a-d不活動,則系統100無法重構條帶320。在確定條帶320的有效冗余時,管理 器210還可以考慮代碼塊330nC。此外,在確定有效冗余值ER時,管理器210可以考慮塊330的 幾何結構(例如,塊330駐留在哪個列C),這是因為第一列C1中的數據塊330nD和第二列C2中 的代碼檢查塊330nCC的丟失(假設沒有其他丟失)仍允許基于單獨列C進行條帶320的重構, 而丟失相同列中的數據塊330nD和代碼檢查塊330nCC可能防止條帶320的重構。丟失的某些 幾何結構(即,各種列C中塊330的丟失)可能不支持基于列重構,該基于列重構比其他類型 的重構更快。
[0092]類似地,管理器210進行相同假設用于確定在級別3和級別4系統域402的基于條帶 重構。在所示示例中,基于條帶重構在級別3系統域402的有效冗余等于2,并且基于條帶重 構在級別4系統域402的有效冗余等于1。
[0093]參考圖5,在某些實現方式中,系統100(例如,管理器210)優先化數據312用于恢 復。在存儲設備114上存儲的數據312具有以下三種狀態之一:可用狀態、不可用狀態和缺失 狀態。當數據312最初被存儲在存儲設備114上時,如在框502中所示其處于可用狀態。當數 據312處于可用狀態時,用戶/客戶端120可以訪問數據312。然而,在數據312處于不可用狀 態或缺失狀態時,用戶/客戶端120不能訪問數據312,并且系統100可以重構數據312使得其 對于用戶/客戶端120可用。數據312的不可用和缺失狀態可能是由于系統域402的不活動狀 態。因此,如果數據312與處于不活動狀態的系統域402相關聯,則數據312可以處于不可用 狀態或缺失狀態。數據312也可能出于其他原因變得不可用或缺失。參考判定框504,管理器 210確定數據312是否變得不可用。不可用數據312是在大于0的時間段不可用的任意數據 312。在框506,不可用狀態是可用狀態(框502)與缺失狀態(框512)之間的轉變狀態。閾值時 間段T m不可用的數據312是不可用數據312(例如,0<t<Tm,其中t是數據312不可用的時間, 并且T m是閾值時間)。在某些示例中,Tm等于15到30分鐘。在判定框508,當t彡TJ寸,數據312 被認為缺失并且向缺失狀態(框512)轉變。不可用數據312是被認為不可用的數據312,因為 其可能由于快速系統故障或維護在閾值時間段(〇<t<T m)內可用。然而,如果系統故障或 維護持續長過閾值時間Tm,則數據312被認為缺失并且系統100可用在框514重構缺失數據 312(使其再次可用)。管理器210可以周期性更新數據312的狀態,包括條帶320的當前有效 冗余ERc。
[0094]在某些實現方式中,管理器210將數據312標識為高可用性數據312a或低可用性數 據312b,并且重構具有小于閾值有效冗余值ERT( 即,有效冗余值)的當前有效冗余值ERC的高 可用性數據312a,而不考慮在數據312被認為缺失之前的閾值時間T m。實際上,這加速了重 構可能具有變得丟失風險的某些高可用性數據312a。因此,考慮框508,當t>T m為假時,即, 數據312仍處于不可用狀態,管理器210在框510確定數據312是否為高可用性數據312a,以 及數據312(即,條帶320)的有效冗余ER是否小于閾值有效冗余值ER(ER C彡ERt?)。如果數據 312是高可用性數據312a并且ERC彡ERt,則管理器210發起數據312a的重構,旁路在框508的 條件(t>T m)。在某些示例中,管理器210在重構數據312之前不更新數據312的狀態;而在其 他示例中,管理器210可以在框512將數據312從不可用狀態轉變到缺失狀態,這可以標志數 據312用于重構。然而,如果數據312不是高可用性數據312a并且數據312的當前有效冗余值 ERc不小于閾值有效冗余值ERt,則數據312在框506保持在不可用狀態。旁路框508的t多1"條 件允許管理器210通過允許系統100重構在低可用性數據312b之前并且在高可用性數據 312a丟失而沒有被重構之前已經到達閾值有效冗余值ERt的高可用性數據312a,來優先化 是高可用性的數據312。閾值有效冗余值ERt可以是系統100的配置選項。通常,有效冗余值 ER可以基于系統級別、其狀態、條帶320的編碼類型和條帶320中塊330的狀態(例如,可用、 不可用或缺失)。有效冗余值ER可以不指示可以丟失條帶320的多少塊330,而是可以丟失多 少系統域402,同時仍維持條帶320的冗余(允許重構)。丟失單個附加塊330可以不影響當前 有效冗余值ERc。
[0095] 在某些實現方式中,被分類為高可用性的條帶320的有效冗余值ER總是小于或等 于被分類為低可用性的條帶320的有效冗余值ER。例如,假設條帶320的三個經復制的塊330 在不同的系統域402。第一塊330針對t>T m不可用。第二塊330針對t<Tm不可用;以及第三塊 330可用。如果塊330是高可用性塊330a,則當前有效冗余值ER C是1,而如果塊330是低可用 性塊330b,則當前有效冗余值ERC是2,這是因為第二缺失塊330針對t彡T m不是不可用。當條 帶320(及其塊330)被分類為高可用性時,其有效冗余值ER通過考慮塊330缺失t<T m被更積 極地確定,從而使得在該條帶320具有變得丟失的風險時更快重構。
[0096] 參考圖6,在某些實現方式中,一種用于優先化數據312以在分布式存儲系統100中 恢復的方法600包括:針對包括具有塊330的多個條帶320的文件310的每個條帶320,使用數 據處理設備來確定602條帶320包括高可用性塊330a還是低可用性塊330b。文件310可以被 分類為高可用性或低可用性。文件的條帶320和條帶320的對應塊330可以被對應地分類為 高可用性或低可用性。方法600還包括使用所述數據處理設備來確定604針對文件310的每 個條帶320的有效冗余值ER。該有效冗余值ER基于塊330以及與對應條帶320相關聯的任意 系統域402。分布式存儲系統100具有包括系統域402的系統層級400。此外,每個系統域402 具有活動狀態或不活動狀態。與處于活動狀態的系統域402相關聯的條帶320的塊330是可 訪問的,而與處于不活動狀態的系統域402相關聯的條帶320的塊330是不可訪問的。塊330 也可能出于其他原因而變得不可訪問,并且不可訪問性可以不與系統域402的活動/不活動 狀態直接相關。
[0097]當條帶320的塊330變得不可訪問時,方法600包括使用數據處理設備來實質上立 即重構606具有小于閾值有效冗余值ERt的有效冗余值ER的不可訪問、高可用性塊330a。此 外,當條帶320的塊330變得不可訪問時,該方法還包括在閾值時間段之后重構608:1)不可 訪問、低可用性塊330b;以及2)具有大于或等于閾值有效冗余ERt的有效冗余值ER的不可訪 問、高可用性塊330a。因此,具有高風險變得丟失的某些高可用性塊330a(基于有效冗余值 ER)接收比低可用性塊330b或不具有高風險變得丟失的其他高可用性塊330a相對更快的重 構。除了或備選地閾值時間段,其他參數也可以用于觸發不可訪問塊330的重構。例如,客戶 端120可以向主機機器110的存儲器設備114請求數據312(例如,塊330),但沒有找到數據 312。響應于沒有找到數據312,客戶端120可以向管理器210通知不可訪問數據312。如果管 理器210確認數據312不可訪問(例如,針對t<T m不可用或缺失(針對t>Tm不可用)),則管理 器210可以發起數據312的重構,而不需要延遲(例如,不需要等待閾值時間段,諸如15或30 分鐘)。
[0098]在某些實現方式中,方法600進一步包括當系統域402處于不活動狀態時,更新針 對與該系統域402相關聯的文件310的每個條帶320的有效冗余值ER。閾值時間段可以在大 約15分鐘與大約30分鐘之間。
[0099]系統層級400可以包括系統級別。系統級別包括第一系統級別、第二系統級別、第 三系統級別和第四系統級別。第一系統級別(級別1)對應于數據處理設備112、非瞬態存儲 器設備114或網絡接口控制器116的主機機器110。每個主機機器110具有系統域402。第二系 統級別(級別2)對應于容納主機機器110的機架430的功率遞送器434、通信遞送器436或冷 卻遞送器432。機架430的每個功率遞送器434、通信遞送器436或冷卻遞送器432具有系統域 402。第三系統級別(級別3)對應于具有相關聯機架430的單元420的功率遞送器424、通信遞 送器426或冷卻遞送器422。單元420的每個功率遞送器424、通信遞送器426或冷卻遞送器 422具有系統域402。第四系統級別(級別4)對應于單元420的分發中心模塊410,每個分發中 心模塊410具有系統域402。
[0100]在某些示例中,針對每個條帶320,該方法600包括確定針對每個系統級別的有效 冗余值ER。確定針對具有副本塊330的復制條帶330n的有效冗余值ER包括標識在對應系統 級別具有至少一個可用副本塊330的唯一系統域402的數目。確定針對在第二系統級別具有 數據塊330nD和代碼塊330nC的編碼條帶320的有效冗余值ER包括標識第二系統級別內能夠 在維持數據可訪問性時處于不活動的唯一系統域(402)的數目。另外,確定針對在第三或第 四系統級別具有數據塊330nD和代碼塊330nC的編碼條帶320的有效冗余值包括標識第三或 第四級別內能夠在維持數據可訪問性時處于不活動并且具有與剩余系統域402相比最大數 目的塊330的系統域402。另外,當不止一個系統域402具有最大數目的塊330時,該方法600 包括隨機選擇系統域402之一。
[0101] 在某些實現方式中,確定針對具有數據塊330nD、代碼檢查塊330nCC和字檢查塊 330nWCC的嵌套代碼條帶的有效冗余值進一步包括確定列有效冗余或條帶有效冗余之一。 確定列有效冗余包括標識列C內能夠從該列C內的其他塊330重構的唯一塊330的數目;以及 確定條帶有效冗余包括標識條帶320內能夠從該條帶320內的其他塊330重構的唯一塊330 的數目。
[0102] 參考圖7,在某些實現方式中,一種用于優先化數據312以在分布式存儲系統100中 恢復的方法700包括使用計算處理器來確定702針對文件310的每個條帶320的有效冗余值, 文件310被分成具有塊330的條帶320。有效冗余值基于塊330以及與對應條帶320相關聯的 任意系統域402(ER)。當系統域402處于不活動狀態時,該方法700包括更新704針對與系統 域402相關聯的文件310的每個條帶320的有效冗余值。另外,該方法700包括當條帶320的有 效冗余值小于閾值有效冗余值ERt時,使得706所述條帶(320)重構。在某些示例中,該方法 700進一步包括針對每個條帶320確定針對每個系統級別的有效冗余值。
[0103] 在某些實現方式中,該方法700進一步包括確定條帶320包括高可用性塊330還是 低可用性塊330,并且延遲低可用性塊330的重構(例如,將低可用性塊330的重構延遲大約 15分鐘與大約30分鐘之間的時間段)。
[0104]可以在數字電子電路、集成電路、專門設計的ASIC(專用集成電路)、計算機硬件、 固件、軟件和/或其組合來實現本文描述的系統和技術的各種實現方式。這些各種實現方式 可以包括采用一個或多個計算機程序的實現方式,一個或多個計算機程序在包括至少一個 可編程處理器的可編程系統上是可執行的和/或可解釋的,至少一個可編程處理器可以是 專用的或通用的,其耦合為從存儲系統、至少一個輸入設備和至少一個輸出設備接收數據 和指令以及將數據和指令發送給存儲系統、至少一個輸入設備和至少一個輸出設備。
[0105] 這些計算機程序(還被稱為程序、軟件應用或代碼)包括針對可編程處理器的機器 指令,并且可以以高級程序式語言和/或面向對象編程語言和/或以匯編語言/機器語言來 實現。如本文所使用的,術語"機器可讀介質"和"計算機可讀介質"是指用于將機器指令和/ 數據提供給可編程處理器的任何計算機程序產品、裝置和/或設備(例如,磁盤、光盤、存儲 區、可編程邏輯器件(PLD)),包括接收作為機器可讀信號的機器指令的機器可讀介質。術語 "機器可讀信號"是指用于將機器指令和/數據提供給可編程處理器的任何信號。
[0106] 可以在數字電子電路中或者在計算機軟件、固件或者硬件(包括在本說明書中公 開的結構及其結構等效物)中或者在它們中的一項或者多項的組合中實施在本說明書中描 述的主題內容和功能操作的實現方式。此外,在本說明書中描述的主題內容可以被實施為 一個或多個計算機程序產品,即被編碼在計算機可讀介質上以用于由數據處理裝置運行或 者用于控制數據處理裝置的操作的計算機程序指令的一個或多個模塊。計算機可讀介質可 以為機器可讀存儲設備、機器可讀存儲襯底、存儲器設備、影響機器可讀傳播信號的物質的 成分、或者它們中的一項或者多項的組合。術語"數據處理裝置"、"計算設備"和"計算處理 器"涵蓋用于處理數據的所有裝置、設備和機器,舉例而言包括可編程處理器、計算機或多 個處理器或計算機。除了硬件,該裝置可以包括創建針對討論中的計算機程序的運行環境 的代碼,例如構成處理器固件、協議棧、數據庫管理系統、操作系統或它們中的一項或者多 項的組合的代碼。傳播信號為人為生成的信號,例如,機器生成的電信號、光信號或者電磁 信號,該信號被生成以對信息編碼以用于向適當接收器裝置傳輸。
[0107] 可以用包括編譯或者解譯語言的任何形式的編程語言編寫計算機程序(也被稱為 應用、程序、軟件、軟件應用、腳本或者代碼),并且可以用任何形式部署它、包括部署為獨立 程序或者部署為適合于在計算環境中使用的模塊、部件、子例程、對象或者其他單元。計算 機程序不是必需對應于文件系統中的文件。程序可以被存儲于保持其他程序或者數據的文 件(例如,存儲于標記語言文檔中的一個或者多個腳本)的一部分中、專用于討論的程序的 單個文件中或者多個協同文件(例如,存儲一個或者多個模塊、子程序或者代碼部分的文 件)中。計算機程序可以被部署用于在一個計算機上或者在位于一個站點或者分發于多個 站點并且由通信網絡互連的多個計算機上執行。
[0108] 在本說明書中描述的過程和邏輯流程可以由一個或者多個可編程處理器執行,該 一個或者多個可編程處理器執行一個或者多個計算機程序,以通過對輸入數據操作并且生 成輸出來執行動作。過程和邏輯流程也可以由專用邏輯電路裝置(例如,FPGA(現場可編程 門陣列)或者ASIC(專用集成電路))執行并且也可以將裝置實施為專用邏輯電路裝置。
[0109] 舉例而言,適合于執行計算機程序的處理器包括通用和專用微處理器二者以及任 何種類的數字計算機的任一或者多個處理器。通常,處理器將從只讀存儲器或者隨機存取 存儲器或者二者接收指令和數據。計算機的基本單元是用于根據指令執行動作的處理器以 及用于存儲指令和數據的一個或者多個存儲器設備。通常,計算機也將包括用于存儲數據 的一個或者多個海量存儲設備(例如,磁盤、磁光盤或者光盤),或者被操作地耦合用于從該 一個或者多個海量存儲設備接收數據或者向該一個或者多個海量存儲設備發送數據或者 二者。然而,計算機不是必需具有這樣的設備。另外,計算機可以被嵌入于另一設備中,例 如,移動電話、個人數字助理(PDA )、移動音頻播放器、全球定位系統(GPS ),等等。適合于存 儲計算機程序指令和數據的計算機可讀介質包括所有形式的非易失性存儲器、介質和存儲 器設備,舉例而言包括半導體存儲器設備,例如,EPROM、EEPROM和閃速存儲器設備;磁盤,例 如,內部硬盤或者可移動盤;磁光盤;以及⑶-ROM和DVD-ROM盤。處理器和存儲器可以由專用 邏輯電路裝置補充或者被并入于專用邏輯電路裝置中。
[0110] 為了提供與用戶的交互,可以在計算機上實施本公開內容的一個或多個方面,該 計算機具有用于向用戶顯示信息的顯示設備(例如,CRT(陰極射線管)IXD(液晶顯示器)監 視器或者觸摸屏)以及用戶可以用來向計算機提供輸入的鍵盤和指點設備,例如,鼠標或者 跟蹤球。其他種類的設備也可以用來提供與用戶的交互;例如,向用戶提供的反饋可以是任 何形式的感官反饋,例如,視覺反饋、聽覺反饋或者觸覺反饋;并且可以用包括聲音、語音或 者觸覺輸入的任何形式接收來自用戶的輸入。此外,計算機可以通過向由用戶使用的設備 發送文檔和從該設備接收文檔(例如,通過響應于從用戶的客戶端設備上的web瀏覽器接收 的請求向該web瀏覽器發送網頁)來與用戶交互。
[0111] 可以在計算系統中實施本公開內容中的一個或多個方面,該計算系統包括例如作 為數據服務器的后端部件或者包括中間件部件(例如,應用服務器)或者包括前端部件(例 如,具有圖形用戶界面或者Web瀏覽器(用戶可以通過該圖形用戶界面或者Web瀏覽器與在 本說明書中描述的主題內容的實現方式交互)的客戶端計算機)或者一個或者多個這樣的 后端、中間件或者前端部件的任何組合。系統的部件可以由任何數字數據通信形式或者介 質(例如,通信網絡)互連。通信網絡的示例包括局域網("LAN")和廣域網("WAN")、互聯網絡 (例如,因特網)和對等網絡(例如,自組織對等網絡)。
[0112] 計算系統可以包括客戶端和服務器。客戶端和服務器一般相互遠離并且通常通過 通信網絡交互。客戶端和服務器的關系借助在相應計算機上運行并且相互具有客戶端-月艮 務器關系的計算機程序而產生。在某些實現方式中,服務器向客戶端設備傳輸數據(例如, HTML頁面)(例如,用于向與客戶端設備交互的用戶顯示數據并且從該用戶接收用戶輸入)。 可以在服務器處從客戶端設備接收在客戶端設備生成的數據(例如,用戶交互的結果)。
[0113] 盡管本說明書包含許多具體細節,但是不應將這些解釋為限制本公開內容的或者 可以要求保護的內容的范圍,而是應當理解為對本公開內容的具體實現方式特有的特征的 描述。在本說明書中在不同的實現方式的背景中描述的某些特征也可以在單個實施例中被 組合實施。相反,在單個實現方式的背景中描述的各種特征也可以在多個實施例中單獨地 或者在任何適當子組合中被實施。另外,雖然上文可以將特征描述為在某些組合中動作,并 且甚至初始地這樣要求保護,但是來自要求保護的組合的一個或者多個特征可以在某些情 況下從該組合中被刪除,并且要求保護的組合可以涉及子組合或者子組合的變型。
[0114] 類似地,盡管在附圖中以特定順序描繪操作,但是這不應被理解為要求以所示特 定順序或者以依次順序執行這樣的操作或者執行所有所示操作以實現期望的結果。在某些 情況下,多任務和并行處理可以是有利的。另外,在上文描述的實施例中的各種系統部件的 分離不應被理解為在所有實施例中要求這樣的分離,并且應當理解描述的程序部件和系統 通常可以被一起集成于單個軟件產品中或者封裝到多個軟件產品中。
[0115]已經描述了許多實現方式。然而,應當理解,在不脫離本公開內容的精神和范圍的 情況下,可以進行各種修改。因此,其他實現方式也處于所附權利要求的范圍內。例如,在權 利要求中記載的動作可以按不同順序被執行而仍然實現期望的結果。
【主權項】
1. 一種用于優先化數據(312)以在分布式存儲系統(100)中恢復的方法(600),所述方 法(600)包括: 針對包括具有塊(330)的多個條帶(320)的文件(310)的每個條帶(320),使用數據處理 設備(202)來確定所述條帶(320)包括高可用性塊(330a)還是低可用性塊(330b); 使用所述數據處理設備(202)來確定針對所述文件(310)的每個條帶(320)的有效冗余 值(ER),所述有效冗余值(ER)基于所述塊(330)以及與所述對應條帶(320)相關聯的任意系 統域(402 ),所述分布式存儲系統(100)具有包括系統域(402)的系統層級(400 ),每個系統 域(402)具有活動狀態或不活動狀態,其中與處于所述活動狀態的系統域(402)相關聯的條 帶(320)的塊(330)是可訪問的,并且與處于所述不活動狀態的系統域(402)相關聯的條帶 (320)的塊(330)是不可訪問的;以及 當條帶(320)的塊(330)變得不可訪問時: 使用所述數據處理設備(202)來實質上立即重構具有小于閾值有效冗余值(ER)的有效 冗余值(ER)的不可訪問、高可用性塊(330a);以及 在閾值時間段之后,使用所述數據處理設備(202)來重構: 不可訪問、低可用性塊(330b);以及 具有大于或等于所述閾值有效冗余(ERt)的有效冗余值(ER)的不可訪問、高可用性塊 (330a) 〇2. 根據權利要求1所述的方法(600),進一步包括當系統域(402)處于所述不活動狀態 時,更新針對與所述系統域(402)相關聯的所述文件(310)的每個條帶(320)的所述有效冗 余值(ER)。3. 根據權利要求1所述的方法(600 ),其中所述閾值時間段包括在大約15分鐘與大約30 分鐘之間。4. 根據權利要求1所述的方法(600),其中所述系統層級(400)包括系統級別(級別1、2、 3、4)包括: 第一系統級別(級別1),對應于數據處理設備(112)、非瞬態存儲器設備(114)或網絡接 口控制器(116)的主機機器(110),每個主機機器(110)具有系統域(402); 第二系統級別(級別2),對應于容納所述主機機器(110)的機架(430)的功率遞送器 (434)、通信遞送器(436)或冷卻遞送器(432),所述機架(430)的每個功率遞送器(434)、通 信遞送器(436)或冷卻遞送器(432)具有系統域(402);以及 第三系統級別(級別3),對應于具有相關聯機架(430)的單元(420)的功率遞送器 (424)、通信遞送器(426)或冷卻遞送器(422),所述單元(420)的每個功率遞送器(424)、通 信遞送器(426)或冷卻遞送器(422)具有系統域(402);以及 第四系統級別(級別4),對應于所述單元(420)的分發中心模塊(410、410&、41013),每個 分發中心模塊(410、410a、410b)具有系統域(402)。5. 根據權利要求4所述的方法(600),進一步包括針對每個條帶(320)確定針對每個系 統級別(級別1、2、3、4)的所述有效冗余值(ER)。6. 根據權利要求5所述的方法(600 ),其中確定針對具有副本塊(330、330η)的復制條帶 (330η)的所述有效冗余值(ER)包括標識在對應系統級別(級別1、2、3、4)具有至少一個可用 副本塊(330、330n)的唯一系統域(402)的數目。7. 根據權利要求5所述的方法(600),其中確定針對在所述第二系統級別(級別2)具有 數據塊(330nD)和代碼塊(330nC)的編碼條帶(320)的所述有效冗余值(ER)包括標識所述第 二系統級別(級別2)內能夠在維持數據可訪問性時處于不活動的唯一系統域(402)的數目。8. 根據權利要求5所述的方法(600),其中確定針對在所述第三或第四系統級別(級別3 或級別4)具有數據塊(330nD)和代碼塊(330nC)的編碼條帶(320)的所述有效冗余值(ER)包 括標識所述第三或第四級別(級別3或級別4)內能夠在維持數據可訪問性時處于不活動并 且具有與剩余系統域(402)相比最大數目的塊(330)的系統域(402)。9. 根據權利要求8所述的方法(600),其中當不止一個系統域(402)具有所述最大數目 的塊(330)時,隨機選擇所述系統域(402)之一。10. 根據權利要求1所述的方法(600),其中確定針對具有數據塊(330nD)、代碼檢查塊 (330nCC)和字檢查塊(330nWCC)的嵌套代碼條帶(320)的所述有效冗余值(ER)包括: 確定列有效冗余或條帶有效冗余之一; 其中確定列有效冗余包括標識列(C)內能夠從所述列(C)內的其他塊(330)重構的唯一 塊(330)的數目;以及 其中確定條帶有效冗余包括標識條帶(320)內能夠從所述條帶(320)內的其他塊(330) 重構的唯一塊(330)的數目。11. 一種用于優先化數據(312)以在分布式存儲系統(100)中恢復的方法(700),所述方 法(700)包括: 使用計算處理器(202)來確定針對文件(310)的每個條帶(320)的有效冗余值(ER),所 述文件(310)包括具有塊(330)的條帶(320)、基于所述塊(330)以及與所述對應條帶(320) 相關聯的任意系統域(402)的所述有效冗余值(ER),所述分布式存儲系統(100)具有包括系 統域(402)的系統層級(400),每個系統域(402)具有活動狀態或不活動狀態; 當系統域(402)處于所述不活動狀態時,更新針對與所述系統域(402)相關聯的所述文 件(310)的每個條帶(320)的所述有效冗余值(ER);以及 當條帶(320)的所述有效冗余值(ER)小于閾值有效冗余值(ERt)時,使得所述條帶(320) 重構。12. 根據權利要求11所述的方法(700),其中所述系統層級(400)包括系統級別(1、2、3、 4)包括: 第一系統級別(級別1),對應于數據處理設備(112)、非瞬態存儲器設備(114)或網絡接 口控制器(116)的主機機器(110),每個主機機器(110)具有系統域(402); 第二系統級別(級別2),對應于容納所述主機機器(110)的機架(430)的功率遞送器 (434)、通信遞送器(436)或冷卻遞送器(432),所述機架(430)的每個功率遞送器(434)、通 信遞送器(436)或冷卻遞送器(432)具有系統域(402);以及 第三系統級別(級別3),對應于具有相關聯機架(430)的單元(420)的功率遞送器 (424)、通信遞送器(426)或冷卻遞送器(422),所述單元(420)的每個功率遞送器(424)、通 信遞送器(426)或冷卻遞送器(422)具有系統域(402);以及 第四系統級別(級別4),對應于所述單元(420)的分發中心模塊(410、410&、41013),每個 分發中心模塊(410、410a、410b)具有系統域(402)。13. 根據權利要求12所述的方法(700 ),進一步包括針對每個條帶(320)確定針對每個 系統級別(級別I、2、3、4)的所述有效冗余值(ER)。14. 根據權利要求12所述的方法(700),其中確定針對具有副本塊(330、330n)的復制條 帶(330、330η)的所述有效冗余值(ER)包括標識在對應系統級別(級別1、2、3、4)具有至少一 個可用副本塊(330、330n)的唯一系統域(402)的數目。15. 根據權利要求12所述的方法(700),其中確定針對在所述第二系統級別(級別2)具 有數據塊(330nD)和代碼塊(330nC)的編碼條帶(320)的所述有效冗余值(ER)包括標識所述 第二系統級別(級別2)內能夠在維持數據可訪問性時處于不活動的唯一系統域(402)的數 目。16. 根據權利要求12所述的方法(700),其中確定針對在所述第三或第四系統級別(級 另IJ3或級別4)具有數據塊(330nD)和代碼塊(330nC)的編碼條帶(320)的所述有效冗余值 (ER)包括標識所述第三或第四級別(級別3或級別4)內能夠在維持數據可訪問性時處于不 活動并且具有與剩余系統域(402)相比最大數目的塊(330)的系統域(402)。17. 根據權利要求16所述的方法(700),其中當不止一個系統域(402)具有所述最大數 目的塊(330)時,隨機選擇所述系統域(402)之一。18. 根據權利要求11所述的方法(700),其中確定針對具有數據塊(330nD)、代碼檢查塊 (330nCC)和字檢查塊(330nWCC)的嵌套代碼條帶(320)的所述有效冗余值(ER)包括: 確定列有效冗余或條帶有效冗余之一; 其中確定列有效冗余包括標識列(C)內能夠從所述列(C)內的其他塊(330)重構的唯一 塊(330)的數目;以及 其中確定條帶有效冗余包括標識條帶(320)內能夠從所述條帶(320)內的其他塊(330) 重構的唯一塊(330)的數目。19. 根據權利要求11所述的方法(700 ),進一步包括: 確定所述條帶(320)包括高可用性塊(330a)還是低可用性塊(330b);以及 當所述條帶(320)的塊(330)變得不可訪問時: 使用所述數據處理設備(202)來實質上立即重構具有小于閾值有效冗余值(ERt)的有效 冗余值(ER)的不可訪問、高可用性塊(330a);以及 在閾值時間段之后,使用所述數據處理設備(202)來重構: 不可訪問、低可用性塊(330b);以及 具有大于或等于所述閾值有效冗余(ERt)的有效冗余值(ER)的不可訪問、高可用性塊 (330a) 〇20. 根據權利要求19所述的方法(700),進一步包括將低可用性塊(330b)的重構延遲在 大約15分鐘與大約30分鐘之間的時間段。21. -種用于優先化數據以在分布式存儲系統(100)中恢復的系統,所述系統包括: 存儲器主機(110),每個存儲器主機(110)具有非瞬態存儲器(114); 計算機處理器(202),其與所述存儲器主機(110)通信,所述計算機處理器(202)執行指 令用于: 管理跨所述存儲器主機(110)文件(310)的分條,每個文件(310)包括具有塊(330)的條 帶(320); 針對包括具有塊(330)的多個條帶(320)的文件(310)的每個條帶(320),使用數據處理 設備(202)來確定所述條帶(320)包括高可用性塊(330a)還是低可用性塊(330b); 確定針對所述文件(310)的每個條帶(320)的有效冗余值(ER),所述有效冗余值(ER)基 于所述塊(330)以及與所述對應條帶(320)相關聯的任意系統域(402),所述分布式存儲系 統(100)具有包括系統域(402)的系統層級(400),每個系統域(402)具有活動狀態或不活動 狀態,其中與處于所述活動狀態的系統域(402)相關聯的條帶(320)的塊(330)是可訪問的, 并且與處于所述不活動狀態的系統域(402)相關聯的條帶(320)的塊(330)是不可訪問的; 以及 當條帶(320)的塊(330)變得不可訪問時: 實質上立即重構具有小于閾值有效冗余值(ERt)的有效冗余值(ER)的不可訪問、高可用 性塊(330a);以及 在閾值時間段之后,重構: 不可訪問、低可用性塊(330b);以及 具有大于或等于所述閾值有效冗余(ERt)的有效冗余值(ER)的不可訪問、高可用性塊 (330a) 〇22. 根據權利要求21所述的系統,其中當系統域(402)處于所述不活動狀態時,所述計 算機處理器(202)更新針對與所述系統域(402)相關聯的所述文件(310)的每個條帶(320) 的所述有效冗余值(ER)。23. 根據權利要求21所述的系統,其中所述閾值時間段包括在15分鐘與30分鐘之間。24. 根據權利要求21所述的系統,其中所述系統層級(400)包括系統級別(1、2、3、4)包 括: 第一系統級別(級別1),對應于數據處理設備(112)、非瞬態存儲器設備(114)或網絡接 口控制器(116)的主機機器(110),每個主機機器(110)具有系統域(402); 第二系統級別(級別2),對應于容納所述主機機器(110)的機架(430)的功率遞送器 (434)、通信遞送器(436)或冷卻遞送器(432),所述機架(430)的每個功率遞送器(434)、通 信遞送器(436)或冷卻遞送器(432)具有系統域(402);以及 第三系統級別(級別3),對應于具有相關聯機架(430)的單元(420)的功率遞送器 (424)、通信遞送器(426)或冷卻遞送器(422),所述單元(420)的每個功率遞送器(424)、通 信遞送器(426)或冷卻遞送器(422)具有系統域(402);以及 第四系統級別(級別4),對應于所述單元(420)的分發中心模塊(410、410&、41013),每個 分發中心模塊(410、410a、410b)具有系統域(402)。25. 根據權利要求24所述的系統,其中所述計算機處理器(202)針對每個條帶(320)確 定針對每個系統級別(級別1、2、3、4)的所述有效冗余值(ER)。26. 根據權利要求24所述的系統,其中所述計算機處理器(202)通過標識在對應系統級 另IJ (級別1、2、3、4)具有至少一個可用副本塊(330、330η)的唯一系統域(402)的數目,來確定 針對具有副本塊(330、330η)的復制條帶(330η)的所述有效冗余值(ER)。27. 根據權利要求24所述的系統,其中所述計算機處理器(202)通過標識所述第二系統 級別(級別2)內能夠在維持數據可訪問性時處于不活動的唯一系統域(402)的數目,來確定 針對在所述第二系統級別(級別2)具有數據塊(330nD)和代碼塊(330nC)的編碼條帶(320) 的所述有效冗余值(ER)。28. 根據權利要求24所述的系統,其中所述計算機處理器(202)通過標識所述第三或第 四級別(級別3或級別4)內能夠在維持數據可訪問性時處于不活動并且具有與剩余系統域 (402)相比最大數目的塊(330)的系統域(402),來確定針對在所述第三或第四系統級別(級 另IJ3或級別4)具有數據塊(330nD)和代碼塊(330nC)的編碼條帶(320)的所述有效冗余值 (ER) 029. 根據權利要求28所述的系統,其中當不止一個系統域(402)具有所述最大數目的塊 (330)時,所述計算機處理器(202)隨機選擇所述系統域(402)之一。30. 根據權利要求21所述的系統,其中所述計算機處理器(202)通過以下各項,來確定 針對具有數據塊(330nD)、代碼檢查塊(330nCC)和字檢查塊(330nWCC)的嵌套代碼條帶 (320)的所述有效冗余值(ER): 確定列有效冗余或條帶有效冗余之一; 其中確定列有效冗余包括標識列(C)內能夠從所述列(C)內的其他塊(330)重構的唯一 塊(330)的數目;以及 其中確定條帶有效冗余包括標識條帶(320)內能夠從所述條帶(320)內的其他塊(330) 重構的唯一塊(330)的數目。
【文檔編號】G06F17/30GK105960639SQ201580006691
【公開日】2016年9月21日
【申請日】2015年1月23日
【發明人】S·R·希里帕, C·E·施羅克, R·希弗, S·奎因蘭
【申請人】谷歌公司