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