專利名稱:在分布式數(shù)據(jù)庫(kù)中管理完整性的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明總體上涉及分布式計(jì)算機(jī)網(wǎng)絡(luò)中的高有效性、可靠性和永久性數(shù)據(jù)存儲(chǔ)的技術(shù)。
背景技術(shù):
存在“固定內(nèi)容”的存檔存儲(chǔ)設(shè)備以高有效性、可靠性和永久性的方式替換或補(bǔ)充傳統(tǒng)的磁帶和光學(xué)存儲(chǔ)解決方案的需求。術(shù)語(yǔ)“固定內(nèi)容”一般是指期望為不會(huì)因?yàn)閰⒖蓟蚱渌康母淖兌3值娜我忸愋偷臄?shù)字信息。這樣的固定內(nèi)容的例子包括,例如電子郵件、文檔、診斷圖像、檢查圖像、錄音、電影和視頻等。傳統(tǒng)的獨(dú)立節(jié)點(diǎn)冗余陣列(RAIN)存儲(chǔ)方法作為創(chuàng)建用于存儲(chǔ)這些固定內(nèi)容信息資產(chǎn)的大型在線存檔的選擇的架構(gòu)呈現(xiàn)。根據(jù)需要允許節(jié)點(diǎn)加入或離開群集,RAIN架構(gòu)將存儲(chǔ)群組與一個(gè)或多個(gè)節(jié)點(diǎn)的故障隔離。通過(guò)復(fù)制多個(gè)節(jié)點(diǎn)上的數(shù)據(jù),RAIN-型存檔可以自動(dòng)為節(jié)點(diǎn)故障或移除進(jìn)行補(bǔ)償。一般地,RAIN系統(tǒng)很大程度上表現(xiàn)為在封閉系統(tǒng)內(nèi)由相同元件設(shè)計(jì)的硬件設(shè)施。已知的現(xiàn)有技術(shù)中的存檔存儲(chǔ)系統(tǒng)一般存儲(chǔ)每個(gè)文件的元數(shù)據(jù)及其內(nèi)容。元數(shù)據(jù)是用于描述該數(shù)據(jù)的數(shù)據(jù)元素。一般,元數(shù)據(jù)描述存儲(chǔ)在系統(tǒng)中的實(shí)際數(shù)據(jù)的內(nèi)容、質(zhì)量、條件和其他特征。在分布式存儲(chǔ)設(shè)備情景中,文件的元數(shù)據(jù)包括,例如文件名稱、文件塊存儲(chǔ)地點(diǎn)、文件創(chuàng)建日期、保留數(shù)據(jù)等。為實(shí)現(xiàn)文件的可靠性和有效性的存儲(chǔ)系統(tǒng),可靠性文件存儲(chǔ)設(shè)備是必要的,并且元數(shù)據(jù)的完整也是系統(tǒng)的重要部分。然而,在現(xiàn)有技術(shù)中,在潛在的不可靠節(jié)點(diǎn)的分布式系統(tǒng)之間分布元數(shù)據(jù)是不可能的。本發(fā)明解決本領(lǐng)域中的這種需求。在共有的專利號(hào)為N0.7,155,466、N0.7,657,581和N0.7,657,586的美國(guó)專利中描述了一種改進(jìn)的存檔存儲(chǔ)系統(tǒng)。該系統(tǒng)提供了一種跨分布式節(jié)點(diǎn)集的分布式對(duì)象存儲(chǔ)。根據(jù)美國(guó)專利N0.7,657,581,對(duì)稱節(jié)點(diǎn)的存檔存儲(chǔ)群組包括組織和提供訪問元數(shù)據(jù)的“元數(shù)據(jù)管理”系統(tǒng),優(yōu)選以元數(shù)據(jù)對(duì)象的形式。每個(gè)元數(shù)據(jù)對(duì)象具有唯一名稱,并且元數(shù)據(jù)對(duì)象被組織成區(qū)域。在一個(gè)實(shí)施例中,通過(guò)哈希一個(gè)或多個(gè)對(duì)象的屬性(例如,對(duì)象名稱)并獲取結(jié)果哈希值的給定數(shù)量的比特來(lái)選擇區(qū)域。比特的數(shù)量可以由配置參數(shù)來(lái)控制。在該方案中,每個(gè)區(qū)域冗余存儲(chǔ),并且區(qū)域包括一組區(qū)域副本。特別的,存在區(qū)域的一個(gè)授權(quán)副本以及零個(gè)或多個(gè)備份副本。如所描述的,副本的數(shù)量可以由配置參數(shù)來(lái)控制,有時(shí)候副本的數(shù)量指的是元數(shù)據(jù)保護(hù)層(“MDPL”)的數(shù)量。從而,例如,在該方案的一個(gè)實(shí)施例中,區(qū)域包括授權(quán)區(qū)域副本及其MDPL-1個(gè)備份副本。區(qū)域副本在群組節(jié)點(diǎn)之間的分布可以平衡每個(gè)節(jié)點(diǎn)上的授權(quán)區(qū)域副本的數(shù)量和每個(gè)節(jié)點(diǎn)上的區(qū)域副本的總數(shù)量。以上描述的元數(shù)據(jù)管理系統(tǒng)的另一方面是指識(shí)別為每個(gè)區(qū)域的每個(gè)副本負(fù)責(zé)的節(jié)點(diǎn)的區(qū)域“映射”。區(qū)域映射可以通過(guò)包括元數(shù)據(jù)管理系統(tǒng)的過(guò)程訪問。區(qū)域映射中的區(qū)域表示一組哈希值,并且該組中的所有區(qū)域覆蓋所有可能的哈希值。通過(guò)號(hào)碼來(lái)識(shí)別區(qū)域,該號(hào)碼來(lái)源于獲取的哈希值的比特的數(shù)量。使用名稱空間分區(qū)方案來(lái)明確區(qū)域映射中的區(qū)域并控制給定區(qū)域的所有權(quán)。該分區(qū)方案在數(shù)據(jù)庫(kù)中實(shí)現(xiàn)。在該方案中,區(qū)域副本具有三個(gè)狀態(tài)之一:“授權(quán)的”、“備份的”和“不完全的”。如果區(qū)域副本是授權(quán)的,則將對(duì)該區(qū)域的所有請(qǐng)求發(fā)送到該副本,并且每個(gè)區(qū)域存在一個(gè)授權(quán)副本。如果區(qū)域副本是備份(或者不完全的),則副本接收(來(lái)自授權(quán)區(qū)域管理過(guò)程的)更新請(qǐng)求。如果正在加載元數(shù)據(jù)卻還未同步副本(一般地是與相應(yīng)的授權(quán)區(qū)域副本同步),則區(qū)域副本是不完全的。在同步完成之前,不完全區(qū)域副本是無(wú)法升級(jí)至另一狀態(tài)的,當(dāng)同步完成時(shí),副本變成備份副本。以上描述的元數(shù)據(jù)管理方案的另一方面是備份區(qū)域副本與授權(quán)區(qū)域副本保持同步。當(dāng)處理更新請(qǐng)求時(shí),通過(guò)實(shí)現(xiàn)授權(quán)區(qū)域副本與其MDPL-1個(gè)備份副本之間的協(xié)議或“合同”來(lái)保證同步。例如,在本地提交更新之后,授權(quán)區(qū)域管理過(guò)程將更新請(qǐng)求發(fā)布至其MDPL-1個(gè)備份副本(一般位于其他節(jié)點(diǎn))的每一個(gè)。在通常過(guò)程中,當(dāng)接收到更新請(qǐng)求時(shí),與給定備份副本相關(guān)的區(qū)域管理過(guò)程發(fā)布或試圖發(fā)布應(yīng)答。在發(fā)出更新已經(jīng)成功的指示之前,授權(quán)區(qū)域管理過(guò)程等待來(lái)自所有MDPL-1個(gè)備份副本的應(yīng)答。這里有幾種方式,然而其中該更新處理會(huì)失敗,例如,授權(quán)區(qū)域管理者(在等待應(yīng)答時(shí))可能遇到表示備份管理過(guò)程已經(jīng)不運(yùn)行或者備份管理過(guò)程即使它已經(jīng)發(fā)布應(yīng)答也無(wú)法在本地處理更新請(qǐng)求的例外,或者備份區(qū)域管理過(guò)程在發(fā)布應(yīng)答時(shí)遇到表示授權(quán)區(qū)域管理處理已經(jīng)不運(yùn)行的例外等。如果備份區(qū)域管理者無(wú)法處理更新,則其將自己從服務(wù)移除。如果備份區(qū)域管理過(guò)程或授權(quán)管理過(guò)程不運(yùn)行,則發(fā)布新的區(qū)域映射。通過(guò)以這種方式來(lái)確保同步,每個(gè)備份副本是授權(quán)副本的“熱備份”。如果授權(quán)區(qū)域副本丟失或由于負(fù)載平衡需求指示降級(jí)當(dāng)前授權(quán)區(qū)域副本(并且提升某個(gè)備份區(qū)域副本),則將這種備份副本升級(jí)至授權(quán)副本是適當(dāng)?shù)?。上述描述的方案的?yōu)點(diǎn)在于,即使在同時(shí)多個(gè)節(jié)點(diǎn)故障時(shí)也能確保元數(shù)據(jù)的高有效性。當(dāng)有節(jié)點(diǎn)故障時(shí),一個(gè)或多個(gè)區(qū)域會(huì)丟失,之后系統(tǒng)需要恢復(fù)?;謴?fù)過(guò)程涉及為丟失的區(qū)域創(chuàng)建區(qū)域副本。該修復(fù)會(huì)消耗硬件和數(shù)據(jù)庫(kù)資源從而會(huì)消耗性能。在大型群組中,修復(fù)會(huì)消耗大量時(shí)間,并且在這段時(shí)間中群組可能會(huì)低于MDPL。
發(fā)明內(nèi)容
通過(guò)本文描述的增量式刷新技術(shù)減少了群組恢復(fù)時(shí)間。本技術(shù)的目的在于挽救部分冗余分布式數(shù)據(jù)庫(kù)的損失(例如,在故障期間),這是在損失期間通過(guò)僅對(duì)發(fā)生在該部分?jǐn)?shù)據(jù)庫(kù)的更新執(zhí)行增量式刷新來(lái)實(shí)現(xiàn)。在一個(gè)實(shí)施例中,增量式刷新在聯(lián)網(wǎng)的獨(dú)立節(jié)點(diǎn)的冗余陣列中實(shí)現(xiàn),其中,元數(shù)據(jù)對(duì)象存儲(chǔ)在跨所述陣列分布的區(qū)域的集合中。區(qū)域映射用于識(shí)別所述區(qū)域的集合的位置,所述區(qū)域映射包括處于多個(gè)狀態(tài)之一的所述區(qū)域的副本,所述狀態(tài)包括以下之一:授權(quán)的
(A)、備份的(B)和不完全的(I),并且其中不完全的區(qū)域副本存儲(chǔ)對(duì)所述區(qū)域的待執(zhí)行更新。根據(jù)本技術(shù),狀態(tài)還包括部分狀態(tài),所述部分狀態(tài)從待執(zhí)行更新來(lái)構(gòu)成,在用于修復(fù)返回到所述區(qū)域的集合的區(qū)域的恢復(fù)期間使用所述待執(zhí)行更新。具體地,修復(fù)包括以下步驟。首先,當(dāng)確定(A)或(B)過(guò)期時(shí),優(yōu)選地,通過(guò)將(A)或(B)區(qū)域副本降級(jí)為(或者轉(zhuǎn)換為)(P)區(qū)域來(lái)創(chuàng)建區(qū)域的部分(P)副本。之后,通過(guò)對(duì)于適當(dāng)?shù)牟煌耆?I)區(qū)域應(yīng)用已經(jīng)排隊(duì)的待執(zhí)行更新使部分(P)區(qū)域?yàn)樽钚碌?。之后?P)區(qū)域轉(zhuǎn)換為備份(B)區(qū)域副本。通過(guò)在(P)區(qū)域轉(zhuǎn)換時(shí)使它進(jìn)行更新將它作為備份區(qū)域。在特定環(huán)境中,從所述區(qū)域的授權(quán)(A)副本通過(guò)同步所述部分(P)副本中的一部分來(lái)使得所述部分(P)副本成為最新的,以取消最后一次更新。在替換實(shí)施例中,在包括處理器和保存計(jì)算機(jī)程序指令的計(jì)算機(jī)存儲(chǔ)器的裝置中執(zhí)行以上描述的方法,以及當(dāng)由處理器執(zhí)行計(jì)算機(jī)程序指令時(shí),執(zhí)行上述的方法。在另一替換實(shí)施例中,通過(guò)在與版本化文件系統(tǒng)結(jié)合使用的計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)程序產(chǎn)品執(zhí)行以上描述的方法,其中,版本化文件系統(tǒng)位于備份存儲(chǔ)器。計(jì)算機(jī)程序產(chǎn)品存儲(chǔ)計(jì)算機(jī)程序指令,當(dāng)由處理器執(zhí)行計(jì)算機(jī)程序指令時(shí),執(zhí)行上述的方法。前面概述了本發(fā)明的一些較重要的特征。這些特征僅是示例性的。如將要描述的,通過(guò)以不同方式應(yīng)用公開的本發(fā)明或通過(guò)修改本發(fā)明可以獲得很多其他有益效果。
為了更完整的理解本發(fā)明及其優(yōu)點(diǎn),以下結(jié)合附圖參考具體實(shí)施方式
,其中:圖1是其中實(shí)現(xiàn)本文的主題的固定內(nèi)容存儲(chǔ)存檔的簡(jiǎn)化框圖;圖2是獨(dú)立節(jié)點(diǎn)冗余陣列的簡(jiǎn)化示意圖,其中每個(gè)獨(dú)立節(jié)點(diǎn)是對(duì)稱的并且支持存檔群組應(yīng)用;圖3是在給定節(jié)點(diǎn)上執(zhí)行存檔群組應(yīng)用的各種元件的高級(jí)示意圖;圖4是在群組的給定節(jié)點(diǎn)上的元數(shù)據(jù)管理系統(tǒng)的元件示意圖;圖5是示意性的區(qū)域映射;圖6示出了當(dāng)群組在尺寸上增長(zhǎng)時(shí)如何應(yīng)用名稱空間分區(qū)方案以促使區(qū)域映射的改變;圖7是根據(jù)本文描述的技術(shù)如何在(B)區(qū)域丟失之后的恢復(fù)期間創(chuàng)建(P)區(qū)域副本(P區(qū)域)并之后升級(jí)至(B)區(qū)域的例子示意圖;以及圖8是根據(jù)本文描述的技術(shù)如何在(A)區(qū)域丟失之后的恢復(fù)期間創(chuàng)建(P)區(qū)域副本并之后升級(jí)至(B)區(qū)域的例子示意圖。
具體實(shí)施例方式以下描述的技術(shù)優(yōu)選地在可擴(kuò)展的基于磁盤的存檔存儲(chǔ)管理系統(tǒng)中實(shí)現(xiàn),優(yōu)選地,是基于獨(dú)立節(jié)點(diǎn)冗余陣列的系統(tǒng)架構(gòu)。節(jié)點(diǎn)可能包括不同的硬件從而認(rèn)為是“異構(gòu)性”。一般,節(jié)點(diǎn)訪問一個(gè)或多個(gè)存儲(chǔ)磁盤,存儲(chǔ)磁盤可以是實(shí)際的物理性存儲(chǔ)磁盤,也可以是如存儲(chǔ)區(qū)域網(wǎng)絡(luò)(SAN)中的虛擬存儲(chǔ)磁盤。在每個(gè)節(jié)點(diǎn)上支持的存檔群組應(yīng)用(以及,可選地執(zhí)行應(yīng)用的底層操作系統(tǒng))可以是相同的或者是本質(zhì)上相同的。在一個(gè)示例性實(shí)施例中,在每個(gè)節(jié)點(diǎn)上的軟件棧(可以包括操作系統(tǒng))是對(duì)稱的,而硬件可能是異構(gòu)的。使用如圖1所示的系統(tǒng),企業(yè)可以為很多不同種類的固定內(nèi)容信息創(chuàng)建永久性存儲(chǔ)設(shè)備,其中固定內(nèi)容信息如文檔、電子郵件、衛(wèi)星圖像、診斷圖像、檢查圖像、錄音、錄像以及其他等。當(dāng)然,這些類型僅是示例性的。通過(guò)在獨(dú)立服務(wù)器或者所謂的存儲(chǔ)節(jié)點(diǎn)上復(fù)制數(shù)據(jù)來(lái)實(shí)現(xiàn)高度可靠性。優(yōu)選地,每個(gè)節(jié)點(diǎn)與其同伴之間是對(duì)稱的。因而,由于任意給定的節(jié)點(diǎn)優(yōu)選地可以執(zhí)行所有功能,所以任一節(jié)點(diǎn)的故障在存檔的可用性上具有很小的影響力。如在共有的美國(guó)專利N0.7,155,466、N0.7,657,581 和 N0.7,657,586 描述,在每個(gè)節(jié)點(diǎn)上執(zhí)行的分布式軟件應(yīng)用獲取、維護(hù)、管理并恢復(fù)數(shù)字資產(chǎn)。在圖2的示例性實(shí)施例中,各個(gè)存檔的物理邊界稱為群組。一般,群組并不是單個(gè)設(shè)備,而是設(shè)備的集合。設(shè)備可以是相同類型的,也可以是不同類型的。一種類型的設(shè)備是計(jì)算機(jī)或者運(yùn)行如Linux之類的操作系統(tǒng)的機(jī)器。運(yùn)行在通用硬件上的基于Linux系統(tǒng)的群組提供存檔機(jī)制(archive),該存檔機(jī)制可以從幾個(gè)存儲(chǔ)節(jié)點(diǎn)服務(wù)器擴(kuò)展到存儲(chǔ)成千上萬(wàn)字節(jié)的數(shù)據(jù)的很多節(jié)點(diǎn)。該架構(gòu)確保了存儲(chǔ)容量可以始終與組織增長(zhǎng)的存檔需求保持同步。優(yōu)選地,數(shù)據(jù)跨過(guò)群組進(jìn)行復(fù)制,從而存檔可以始終不受設(shè)備故障影響。如果磁盤或者節(jié)點(diǎn)故障,則群組對(duì)于群組中的其他節(jié)點(diǎn)自動(dòng)故障以維持相同數(shù)據(jù)的復(fù)制。優(yōu)選地,示例性群組包括以下通常種類的元件:節(jié)點(diǎn)202、一對(duì)網(wǎng)絡(luò)交換機(jī)204、配電單元(PDU)206、以及不中斷電源(UPS)208。節(jié)點(diǎn)202典型地包括一個(gè)或多個(gè)日常服務(wù)器并包含CPU(例如,InteI X 86、適當(dāng)?shù)碾S機(jī)存取存儲(chǔ)器(RAM)、一個(gè)或多個(gè)硬盤驅(qū)動(dòng)器(例如,標(biāo)準(zhǔn)IDE/SATA、SCSI等)、以及兩個(gè)或多個(gè)網(wǎng)絡(luò)接口(NIC)卡。典型的節(jié)點(diǎn)是具有2.4GHz芯片、512MBRAM以及六(6)個(gè)200GB硬盤驅(qū)動(dòng)器的2U機(jī)架式單元。然而,這并不是限制。網(wǎng)絡(luò)交換機(jī)204典型地包括能夠在節(jié)點(diǎn)之間點(diǎn)對(duì)點(diǎn)通信的內(nèi)部交換機(jī)205和允許額外的群組訪問每個(gè)節(jié)點(diǎn)的外部交換機(jī)207。每個(gè)交換機(jī)需要足夠的端口來(lái)操作群組中所有潛在的節(jié)點(diǎn)。以太網(wǎng)或GigE交換機(jī)可以被用于這個(gè)目的。使用TOU206為所有節(jié)點(diǎn)和交換機(jī)供電,并且使用UPS208保護(hù)所有節(jié)點(diǎn)和交換機(jī)。盡管不意為限制,但是典型的群組可以被連接到網(wǎng)絡(luò),諸如公共互聯(lián)網(wǎng)、企業(yè)內(nèi)部互聯(lián)網(wǎng)、或其他廣域或局域網(wǎng)。在示例性實(shí)施例中,在企業(yè)環(huán)境內(nèi)實(shí)現(xiàn)群組。例如,通過(guò)在站點(diǎn)的集體域名命名系統(tǒng)(DNS)命名服務(wù)器中導(dǎo)航可以實(shí)現(xiàn)。例如,群組域因此可以是現(xiàn)存域的新的子域。在代表性的實(shí)現(xiàn)中,在集體DNS服務(wù)器中將子域委托給在群組自身中的命名服務(wù)器。終端用戶使用任何傳統(tǒng)的接口或訪問工具訪問群組。例如,這樣可以在任何基于IP的協(xié)議(HTTP、FTP、NFS、AFS, SMB、網(wǎng)頁(yè)服務(wù)等)上經(jīng)由API,或通過(guò)任何其他已知或以后將研發(fā)的訪問方法、服務(wù)、程序或工具來(lái)實(shí)現(xiàn)對(duì)群組的訪問??蛻魬?yīng)用通過(guò)諸如標(biāo)準(zhǔn)UNIX文件協(xié)議,或HTTP API的一個(gè)或多個(gè)類型的外部網(wǎng)關(guān)訪問群組。優(yōu)選地通過(guò)虛擬文件系統(tǒng)來(lái)公開存檔,該虛擬文件系統(tǒng)能夠隨意符合任何標(biāo)準(zhǔn)的面向UNIX文件協(xié)議的設(shè)施。這些包括NFS、FTP、SMB/CIFS等。在一個(gè)實(shí)施例中,聯(lián)網(wǎng)在一起(例如,經(jīng)由以太網(wǎng))成為群組的獨(dú)立節(jié)點(diǎn)的冗余陣列(H-RAIN)上運(yùn)行存檔群組應(yīng)用。給定節(jié)點(diǎn)的硬件可以是異構(gòu)的。然而,為了得到最大可靠性,每個(gè)節(jié)點(diǎn)優(yōu)選地運(yùn)行分布式應(yīng)用的實(shí)例300 (可以是相同實(shí)例,或基本上相同的實(shí)例),其包括多個(gè)運(yùn)行時(shí)組件,如圖3中所示。這樣,在硬件可以是異構(gòu)的同時(shí),節(jié)點(diǎn)上的軟件棧(至少當(dāng)它涉及本發(fā)明時(shí))是相同的。這些軟件組件包括網(wǎng)關(guān)協(xié)議層302、訪問層304、文件處理和管理層306以及核心組件層308。為了說(shuō)明的目的而提出“層”的名稱,如同普通技術(shù)人員將領(lǐng)會(huì)的,可以用其他有意義的方法來(lái)體現(xiàn)功能的特征??梢约苫虿患梢粋€(gè)或多個(gè)層(或其中的組件)。一些組件可以在層之間共享。網(wǎng)關(guān)協(xié)議層302中的網(wǎng)關(guān)協(xié)議提供現(xiàn)存應(yīng)用的透明。具體來(lái)說(shuō),網(wǎng)關(guān)提供諸如NFS310和SMB/CIFS312的本地文件服務(wù),以及網(wǎng)頁(yè)服務(wù)API來(lái)建立客戶應(yīng)用。還提供了HTTP支持314。訪問層304提供對(duì)存檔的訪問。具體來(lái)說(shuō),根據(jù)本發(fā)明,固定內(nèi)容文件系統(tǒng)(FCFS) 316模擬本地文件系統(tǒng)來(lái)提供對(duì)存檔對(duì)象的完全訪問。FCFS給予了應(yīng)用對(duì)存檔內(nèi)容的直接訪問,如同他們是普通文件一樣。優(yōu)選地,存檔的內(nèi)容表現(xiàn)為其原始格式,同時(shí)將元數(shù)據(jù)公開為文件。FCFS316提供了傳統(tǒng)觀點(diǎn)的目錄和訪問權(quán)限和流程的文件級(jí)(file-level)調(diào)用,使得管理者能夠以他們所熟悉的方式來(lái)規(guī)定固定內(nèi)容數(shù)據(jù)。文件訪問調(diào)用優(yōu)選地被用戶空間后臺(tái)程序中斷,并被路由給適當(dāng)?shù)暮诵脑?在層308)中,其對(duì)調(diào)用應(yīng)用動(dòng)態(tài)地產(chǎn)生適當(dāng)?shù)囊晥D。FCFS調(diào)用優(yōu)選地被存檔策略約束,以輔助自主的存檔管理。因此,在一個(gè)實(shí)施例中,管理者或應(yīng)用不能刪除保存期限(給定策略)仍然有效的存檔對(duì)象。訪問層304優(yōu)選地還包括網(wǎng)頁(yè)用戶界面(UI)318和SNMP網(wǎng)關(guān)320。網(wǎng)頁(yè)用戶界面318優(yōu)選地實(shí)現(xiàn)為管理者控制臺(tái),提供對(duì)文件處理和管理層306中的管理引擎322的交互訪問。管理控制臺(tái)318優(yōu)選地是密碼保護(hù)的,提供存檔的動(dòng)態(tài)視圖的基于網(wǎng)頁(yè)的GUI,包括存檔對(duì)象和單獨(dú)節(jié)點(diǎn)。SNMP網(wǎng)關(guān)320向存儲(chǔ)管理應(yīng)用提供了對(duì)管理引擎322的輕易訪問,這使得他們安全地監(jiān)視和控制群組動(dòng)作。管理引擎監(jiān)視群組動(dòng)作,包括系統(tǒng)和策略事件。文件處理和管理層306還包括請(qǐng)求管理器處理324。請(qǐng)求管理器324協(xié)調(diào)來(lái)自外部世界(經(jīng)過(guò)訪問層304)的全部請(qǐng)求,以及來(lái)自核心組件層308中的策略管理器326的內(nèi)部請(qǐng)求。除策略管理器326以外,核心組件還包括元數(shù)據(jù)管理器328和一個(gè)或多個(gè)存儲(chǔ)管理器330的實(shí)例。元數(shù)據(jù)管理器328優(yōu)選地被安裝在每個(gè)節(jié)點(diǎn)上。共同地,元數(shù)據(jù)管理器在群組中作為分布式數(shù)據(jù)庫(kù),管理所有存檔對(duì)象。在給定的節(jié)點(diǎn)上,元數(shù)據(jù)管理器328管理存檔對(duì)象的子集,其中優(yōu)選地,每個(gè)對(duì)象在外部文件(“EF”,為了存儲(chǔ)而進(jìn)入存檔的數(shù)據(jù))和存檔數(shù)據(jù)物理所在的內(nèi)部文件(每個(gè)都是“IF”)組之間映射。相同的元數(shù)據(jù)管理器328還管理從其他節(jié)點(diǎn)上復(fù)制的存檔對(duì)象組。這樣,每個(gè)外部文件的當(dāng)前狀態(tài)對(duì)于數(shù)個(gè)節(jié)點(diǎn)上的多個(gè)元數(shù)據(jù)管理器一直都是可用的。如果發(fā)生節(jié)點(diǎn)故障,則其他節(jié)點(diǎn)上的元數(shù)據(jù)管理器繼續(xù)提供對(duì)先前由故障節(jié)點(diǎn)管理的數(shù)據(jù)的訪問。存儲(chǔ)管理器330提供了文件系統(tǒng)層,對(duì)于分布式應(yīng)用中的所有其他組件都可用。優(yōu)選地,它將數(shù)據(jù)對(duì)象存儲(chǔ)在節(jié)點(diǎn)本地文件系統(tǒng)中。在給定節(jié)點(diǎn)中的每個(gè)驅(qū)動(dòng)器優(yōu)選地具有其自己的存儲(chǔ)管理器。這使得節(jié)點(diǎn)可以移除單個(gè)驅(qū)動(dòng)器并且優(yōu)化吞吐量。存儲(chǔ)管理器330還提供系統(tǒng)信息、數(shù)據(jù)的完整性檢查,以及能夠直接遍歷本地結(jié)構(gòu)。如圖3中還顯示了,通過(guò)通信中間件層332和DNS管理器334,群組管理內(nèi)部和外部通信。設(shè)施332是高效和可靠的基于消息的中間件層,其使能存檔組件間的通信。在所示實(shí)施例中,層支持多點(diǎn)傳送和點(diǎn)對(duì)點(diǎn)通信。DNS管理器334運(yùn)行將所有節(jié)點(diǎn)連接至企業(yè)服務(wù)器的分布式命名服務(wù)。優(yōu)選地,DNS管理器(單獨(dú)或者與DNS服務(wù)相結(jié)合)在所有節(jié)點(diǎn)上加載平衡請(qǐng)求,以確保最大的群組吞吐量和可用性。在所示實(shí)施例中,ArC應(yīng)用實(shí)例在基本操作系統(tǒng)336上運(yùn)行,諸如Red HatLinux9.0、Fedora Core 6等。通信中間件是任何傳統(tǒng)的分布式通信機(jī)制。其他組件可以包括FUSE (USErspace中的文件系統(tǒng)),其可以被用于固定內(nèi)容文件系統(tǒng)(FCFS) 316。NFS網(wǎng)關(guān)310可以由標(biāo)準(zhǔn)nfsd Linux Kernel NFS驅(qū)動(dòng)來(lái)實(shí)現(xiàn)。每個(gè)節(jié)點(diǎn)中的數(shù)據(jù)庫(kù)可以被實(shí)現(xiàn),例如PostgreSQL(本文中也被稱為Postgres),其是對(duì)象關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(ORDBMS)。節(jié)點(diǎn)可以包括網(wǎng)頁(yè)服務(wù)器,諸如Jetty,其是Java HTTP服務(wù)器和小服務(wù)程序容器。當(dāng)然,以上機(jī)制僅僅是說(shuō)明性的。給定節(jié)點(diǎn)上的存儲(chǔ)管理器330負(fù)責(zé)管理物理存儲(chǔ)設(shè)備。優(yōu)選地,每個(gè)存儲(chǔ)管理器實(shí)例負(fù)責(zé)單個(gè)根目錄,在單個(gè)根目錄中所有文件根據(jù)其放置算法被放置??梢栽诠?jié)點(diǎn)上同時(shí)運(yùn)行多個(gè)存儲(chǔ)管理器實(shí)例,并且每個(gè)通常代表系統(tǒng)中不同的物理磁盤。存儲(chǔ)管理器提取在其余系統(tǒng)中使用的驅(qū)動(dòng)器和接口技術(shù)。當(dāng)存儲(chǔ)管理器實(shí)例被請(qǐng)求以寫入文件時(shí),它生成其負(fù)責(zé)的用以表達(dá)的完全路徑和文件名。在代表性的實(shí)施例中,存儲(chǔ)在存儲(chǔ)管理器上的每個(gè)對(duì)象被接收為原始數(shù)據(jù)而被存儲(chǔ),存儲(chǔ)管理器隨后在存儲(chǔ)數(shù)據(jù)時(shí)將其自己的元數(shù)據(jù)添加到文件,以尋跡不同類型信息。外部文件(EF)存儲(chǔ)隨后由查詢引擎(Query Engine)進(jìn)行查詢中將需要的信息。例如,元數(shù)據(jù)包括而不限于:EF長(zhǎng)度(外部文件長(zhǎng)度字節(jié))、IF段尺寸(該片內(nèi)部文件的尺寸)、EF保護(hù)表達(dá)(EF保護(hù)模式)、IF保護(hù)作用(該內(nèi)部文件的表達(dá))、EF創(chuàng)建時(shí)間戳(外部文件時(shí)間戳)、簽名(寫入(PUT)時(shí)內(nèi)部文件的簽名,其包括簽名類型)、以及EF文件名(外部文件文件名)。與內(nèi)部文件數(shù)據(jù)一起存儲(chǔ)該附加元數(shù)據(jù)提供了額外程度的保護(hù)。具體來(lái)說(shuō),清除(scavenging)能夠通過(guò)內(nèi)部文件存儲(chǔ)的元數(shù)據(jù)在數(shù)據(jù)庫(kù)中創(chuàng)建外部文件記錄。其他策略可以驗(yàn)證內(nèi)部文件哈希相對(duì)于內(nèi)部文件以確認(rèn)內(nèi)部文件保持完好。如上描述,優(yōu)選地,內(nèi)部文件可以是數(shù)據(jù)“組塊(chunk)”,代表在存檔對(duì)象中的原始“文件”的一部分,并且他們可以被放置在不同節(jié)點(diǎn)上以存檔條帶(stripe)并保護(hù)塊(block)。典型地,在元數(shù)據(jù)管理器中,對(duì)于每個(gè)存檔對(duì)象提供一個(gè)外部文件條目,同時(shí)對(duì)于每個(gè)外部文件條目可以存在許多內(nèi)部文件條目。典型地,內(nèi)部文件布局取決于系統(tǒng)。在給定實(shí)現(xiàn)中,磁盤上的該數(shù)據(jù)的真實(shí)物理格式被存儲(chǔ)為一系列可變長(zhǎng)度記錄。請(qǐng)求管理器324負(fù)責(zé)運(yùn)行通過(guò)與系統(tǒng)中的其他組件交互而執(zhí)行存檔動(dòng)作所需的操作組。請(qǐng)求管理器支持不同類型的許多同時(shí)動(dòng)作,能夠重新執(zhí)行任何失敗的處理,并支持可能花費(fèi)長(zhǎng)時(shí)間來(lái)運(yùn)行的處理。請(qǐng)求管理器還確保在存檔中的讀/寫操作被適當(dāng)操作并且確保所有請(qǐng)求在所有時(shí)間上處于已知狀態(tài)。其還提供處理控制,用以配合節(jié)點(diǎn)上的多個(gè)讀/寫操作以滿足給定的客戶請(qǐng)求。此外,請(qǐng)求管理器為最近使用過(guò)的文件高速緩存元數(shù)據(jù)管理器條目,并為會(huì)話和數(shù)據(jù)塊提供緩沖。群組的主要職責(zé)是在磁盤上可靠地存儲(chǔ)無(wú)限數(shù)量的文件??梢詫⒔o定節(jié)點(diǎn)想作是“不可靠的”,感覺像它是因?yàn)槿魏卧蚨豢傻竭_(dá)或者其他方式不可用的。收集這種潛在的不可用節(jié)點(diǎn)有助于創(chuàng)建可靠的和高度可用的存儲(chǔ)。通常,存在兩種類型的信息需要被存儲(chǔ):文件本身和關(guān)于文件的元數(shù)據(jù)。元數(shù)據(jù)管理如美國(guó)專利N0.7,657,581描述的,其公開內(nèi)容以引用的方式結(jié)合于此,元數(shù)據(jù)管理系統(tǒng)負(fù)責(zé)組織給定元數(shù)據(jù)(諸如系統(tǒng)元數(shù)據(jù))和提供對(duì)它的訪問。該系統(tǒng)元數(shù)據(jù)包括位于存檔中的文件的信息以及配置信息、在管理Π上顯示的信息、公制(metrics)、不可修復(fù)的策略違規(guī)信息等。盡管不詳細(xì)說(shuō)明,但是其他類型的元數(shù)據(jù)(例如,與存檔文件相關(guān)的用戶元數(shù)據(jù))也可以使用現(xiàn)在描述的元數(shù)據(jù)管理系統(tǒng)管理。在代表性實(shí)施例中,元數(shù)據(jù)管理系統(tǒng)為元數(shù)據(jù)對(duì)象組提供持續(xù)性,這可以包括一個(gè)或多個(gè)以下對(duì)象類型(僅僅是說(shuō)明性的):ExternalFile (外部文件):存檔用戶所意識(shí)到的文件;InternalFile (內(nèi)部文件):存儲(chǔ)管理器存儲(chǔ)的文件;典型地,在外部文件和內(nèi)部文件之間可以是一對(duì)多關(guān)系。ConfigObject (配置對(duì)象):用于配制群組的名稱/值對(duì);AdminLogEntry (管理日志條目):將在管理者UI上顯示的消息;MetricsObject (公制對(duì)象):時(shí)間戳密鑰/值對(duì),代表在時(shí)間點(diǎn)上一些存檔的量度(例如,文件數(shù)量);以及PolicyState (策略狀態(tài)):一些策略的違規(guī)。每個(gè)元數(shù)據(jù)對(duì)象可以具有唯一名稱,優(yōu)選地從不改變。根據(jù)上述專利中描述的技術(shù),元數(shù)據(jù)對(duì)象被組織為區(qū)域(region)。區(qū)域包括授權(quán)區(qū)域副本和元數(shù)據(jù)保護(hù)等級(jí)(MDPL)數(shù)量(零或多的組)的備份區(qū)域副本。具有零個(gè)副本,元數(shù)據(jù)管理系統(tǒng)是可變比的,但是可能不是高度可用的。通過(guò)哈希一個(gè)或多個(gè)對(duì)象屬性(例如,對(duì)象名稱,諸如完全合格的路徑名,或其部分)和提取給定數(shù)量比特的哈希值來(lái)選擇區(qū)域。這些比特包括區(qū)域數(shù)量。選擇的比特可以是低位比特、高位比特、中間位比特,或單個(gè)比特的任何組合。在代表性實(shí)施例中,給定的比特是哈希值的低位比特。對(duì)象的一個(gè)或多個(gè)屬性可以使用任何傳統(tǒng)的哈希函數(shù)而被哈希。這些包括而不限于,基于Java的哈希函數(shù),諸如java.lang.string.hashCode等。優(yōu)選地,包括區(qū)域數(shù)量比特?cái)?shù)由配置參數(shù)控制,本文中指代為regionMapLevel (區(qū)域映射層)。例如,如果該配置參數(shù)被設(shè)定為6,則這樣的結(jié)果是26=64個(gè)區(qū)域。當(dāng)然,區(qū)域數(shù)量大是允許的,并且可以使用命名空間分區(qū)方案自動(dòng)地調(diào)整區(qū)域數(shù)量。如美國(guó)專利N0.7,657,581描述的,每個(gè)區(qū)域可以被冗余存儲(chǔ)。如以上所說(shuō)明的,存在區(qū)域的一個(gè)授權(quán)副本,和零個(gè)或多個(gè)備份副本。備份副本的數(shù)量由元數(shù)據(jù)數(shù)據(jù)保護(hù)等級(jí)(或“MDPL”)配置參數(shù)控制,如同已經(jīng)描述過(guò)的。優(yōu)選地,區(qū)域副本被分布在群組的所有節(jié)點(diǎn)上,以便平衡每個(gè)節(jié)點(diǎn)授權(quán)區(qū)域副本的數(shù)量,并平衡每個(gè)節(jié)點(diǎn)全部區(qū)域副本的數(shù)量。元數(shù)據(jù)管理系統(tǒng)將元數(shù)據(jù)對(duì)象存儲(chǔ)在每個(gè)節(jié)點(diǎn)上運(yùn)行的數(shù)據(jù)庫(kù)中。該數(shù)據(jù)庫(kù)被用來(lái)支持區(qū)域映射。示例性數(shù)據(jù)庫(kù)使用PostgreSQL實(shí)現(xiàn),其可以作為開源使用。優(yōu)選地,對(duì)于每個(gè)區(qū)域副本存在概要(schema),并且在每個(gè)概要中,存在對(duì)于每種類型的元數(shù)據(jù)對(duì)象的表格。概要僅僅是命名空間,可以擁有表格、索引、過(guò)程和其他數(shù)據(jù)庫(kù)對(duì)象。每個(gè)區(qū)域優(yōu)選地具有其自己的概要。每個(gè)概要具有完整的表格組,每個(gè)元數(shù)據(jù)對(duì)象一個(gè)表格。這些表格中的一個(gè)表格的行對(duì)應(yīng)于單個(gè)元數(shù)據(jù)對(duì)象。同時(shí),Postgres是優(yōu)選的數(shù)據(jù)庫(kù),任何方便的關(guān)系型數(shù)據(jù)庫(kù)(例如,Oracle, IBM DB/2等)都可以被使用。如圖4中所示的,每個(gè)節(jié)點(diǎn)400具有一組過(guò)程或組件:一個(gè)或多個(gè)區(qū)域管理器(RGM) 402a-n、元數(shù)據(jù)管理器(麗)404、至少一個(gè)元數(shù)據(jù)管理客戶(MMC) 406、以及具有一個(gè)或多個(gè)概要410a-n的數(shù)據(jù)庫(kù)408。RGM、麗和MMC組件與虛擬機(jī)412 (諸如Java虛擬機(jī))一起運(yùn)行。對(duì)于每個(gè)區(qū)域副本存在一個(gè)RGM。這樣,對(duì)授權(quán)的區(qū)域副本具有RGM、對(duì)每個(gè)備份區(qū)域副本具有RGM、并且對(duì)于每個(gè)不完全的區(qū)域副本具有RGM。對(duì)于每個(gè)RGM402還具有由其管理該概要的數(shù)據(jù)庫(kù)概要410。數(shù)據(jù)庫(kù)還存儲(chǔ)區(qū)域映射405。根據(jù)如上所述的專利公開,每個(gè)節(jié)點(diǎn)優(yōu)選地具有區(qū)域映射的相同全局查看,以及由同步方案實(shí)施的要求。區(qū)域管理器RGM402負(fù)責(zé)在區(qū)域副本上操作(作為可能的情況,可能是授權(quán)的、備份的或不完全的),并且用以運(yùn)行由元數(shù)據(jù)管理器客戶406和其他區(qū)域管理器402提交的請(qǐng)求。通過(guò)任何方便的手段將請(qǐng)求提供給RGM,這種手段是諸如圖3中所示的通信中間件或其他消息層。區(qū)域管理器提供這些請(qǐng)求運(yùn)行的環(huán)境,例如通過(guò)提供對(duì)數(shù)據(jù)庫(kù)的連接,該環(huán)境被配置為在由該RGM管理的概要上操作。每個(gè)區(qū)域管理器將它的數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)408中。元數(shù)據(jù)管理器404是頂級(jí)組件,負(fù)責(zé)節(jié)點(diǎn)上的元數(shù)據(jù)管理。其負(fù)責(zé)生成和銷毀區(qū)域管理器(RGM)并組織RGM所需的資源,例如群組配置信息和數(shù)據(jù)庫(kù)連接池。(給定節(jié)點(diǎn)中的)給定元數(shù)據(jù)管理器用做領(lǐng)導(dǎo)者(MML)并且負(fù)責(zé)決定哪些元數(shù)據(jù)管理器(在節(jié)點(diǎn)集或子集上)負(fù)責(zé)哪些區(qū)域副本。領(lǐng)導(dǎo)者選擇算法,諸如欺負(fù)(bully)算法或其變形,可以被用來(lái)選擇元數(shù)據(jù)管理器領(lǐng)導(dǎo)者。優(yōu)選地,盡管可能每個(gè)節(jié)點(diǎn)運(yùn)行多個(gè)MM,但是每個(gè)節(jié)點(diǎn)具有單個(gè)元數(shù)據(jù)管理器。一旦區(qū)域擁有關(guān)系被命名空間分區(qū)方案建立(如以下將描述的),每個(gè)元數(shù)據(jù)管理器負(fù)責(zé)相應(yīng)地調(diào)整其一個(gè)或多個(gè)區(qū)域管理器集。系統(tǒng)組件(例如,管理引擎、策略管理器等)與元數(shù)據(jù)管理器MM通過(guò)元數(shù)據(jù)管理器客戶交互。MMC負(fù)責(zé)(使用區(qū)域映射)定位RGM來(lái)執(zhí)行給定請(qǐng)求,以此將請(qǐng)求發(fā)布給所選RGM,并且以此如果所選的RGM不可用(例如,因?yàn)楣?jié)點(diǎn)已經(jīng)故障)則重新嘗試請(qǐng)求。在后種情況中,當(dāng)在節(jié)點(diǎn)上接收了新的區(qū)域映射時(shí),重新嘗試請(qǐng)求將會(huì)成功。如以上所提到的,區(qū)域映射用于識(shí)別負(fù)責(zé)每個(gè)區(qū)域的每個(gè)副本的節(jié)點(diǎn)。虛擬機(jī)412(和其中的每個(gè)RGM、麗和MMC組件)具有對(duì)區(qū)域映射405的訪問通路;區(qū)域映射的副本420在已經(jīng)被復(fù)制到JVM之后,也顯示在圖4中。區(qū)域映射因此對(duì)于給定節(jié)點(diǎn)中的JVM和數(shù)據(jù)庫(kù)都可用。在這種示例的實(shí)施例中,每個(gè)元數(shù)據(jù)對(duì)象具有屬性(例如名稱),其被哈希為0x0和0x3fffffff之間所包括的整數(shù)字段,也就是30比特值。這些值能夠充分地表示帶符號(hào)的32比特整數(shù),而不會(huì)出現(xiàn)溢出問題(例如,當(dāng)向范圍的高端添加I時(shí))。30比特允許高達(dá)近10億個(gè)區(qū)域,甚至對(duì)于大型群組都是充足的。區(qū)域表示哈希值集,并且所有區(qū)域的集覆蓋所有可能的哈希值。對(duì)于每個(gè)區(qū)域,具有不同比特的位置,并且不同比特的位置優(yōu)選地是固定順序。這樣,每個(gè)區(qū)域以數(shù)字來(lái)識(shí)別,其優(yōu)選地通過(guò)提取哈希值的RegionLevelMap(區(qū)域?qū)佑成?比特而得到。其中,配置參數(shù)被設(shè)置為6,這允許64個(gè)區(qū)域,所得出的哈希值是數(shù)字0x0至0x3f。如以上說(shuō)明的,根據(jù)上述專利,區(qū)域副本具有三(3)種狀態(tài)之一:“授權(quán)的”(A) “備份的”(B)和“不完全的”(I)。如果區(qū)域副本是授權(quán)的,則對(duì)區(qū)域的所有請(qǐng)求都去向該副本,并且對(duì)每個(gè)區(qū)域具有一個(gè)授權(quán)的副本。如果區(qū)域副本是備份的,則副本(從授權(quán)的區(qū)域管理器過(guò)程)接收備份請(qǐng)求。如果加載了元數(shù)據(jù),但是副本還沒有同步(典型地,關(guān)于其他備份副本),則區(qū)域副本是不完全的。直到同步完成,在副本變?yōu)閭浞莞北镜臅r(shí)刻,不完全的區(qū)域副本還不適合升級(jí)到其他狀態(tài)。每個(gè)區(qū)域具有一個(gè)授權(quán)的副本和給定數(shù)量(如同由MDPL配置參數(shù)設(shè)定的)的備份的或不完全的副本。如美國(guó)專利N0.7,657,581中描述的,通過(guò)在授權(quán)區(qū)域副本和其MDPL備份副本之間實(shí)施協(xié)議(或“合同”),備份區(qū)域副本與授權(quán)區(qū)域副本被保持同步?,F(xiàn)在介紹該協(xié)議。如以上描述的,區(qū)域映射描述每個(gè)區(qū)域的每個(gè)副本的所有權(quán)。例如,圖5示出了具有metadataMDPL=2的4個(gè)節(jié)點(diǎn)群組的區(qū)域映射。在該例子中,如示出的,對(duì)于區(qū)域O,節(jié)點(diǎn)I是授權(quán)的,并且節(jié)點(diǎn)2和3被指定為備份的,對(duì)于區(qū)域1,節(jié)點(diǎn)2是授權(quán)的,并且節(jié)點(diǎn)3和4被指定為備份的等。隨著群組的擴(kuò)展,可以使用名稱空間分區(qū)方案來(lái)改變具體區(qū)域的控制(所有權(quán))。允許動(dòng)態(tài)擴(kuò)展的一種方式是遞增用于確定構(gòu)成哈希值數(shù)量的比特?cái)?shù)量的regionMapLevel配置參數(shù)。隨著群組的擴(kuò)展,區(qū)域映射的一個(gè)或多個(gè)分區(qū)執(zhí)行“分裂(split)”操作。據(jù)此,分裂操作涉及使用更多的哈希值和重新分配元數(shù)據(jù)。例如,在6層上的映射,具有哈希值0x1000002a和0x1000006a的兩個(gè)元數(shù)據(jù)對(duì)象。這些哈希值(十六進(jìn)制0x2a、“2”的二進(jìn)制為“0010”和“6”的二進(jìn)制為“0110”)的最后6位是相同的;從而,兩個(gè)對(duì)象落入?yún)^(qū)域0x2a中。如果之后映射層增加到7,則區(qū)域?yàn)镺至0x7f,因此兩個(gè)對(duì)象被迫進(jìn)入不同區(qū)域,即,0x2a和0x6a。當(dāng)使用該方法時(shí),要求在同一時(shí)間分裂每個(gè)區(qū)域。更好的技術(shù)是逐步分裂區(qū)域。為此,名稱空間分區(qū)方案按照順序分裂區(qū)域,從區(qū)域O開始到當(dāng)前層的最后一個(gè)區(qū)域結(jié)束。通過(guò)使用一個(gè)更多的比特的哈希值來(lái)分裂區(qū)域。圖6示出了該處理。在該例子中,假定映射層I有兩個(gè)區(qū)域602 (節(jié)點(diǎn)O)和604 (節(jié)點(diǎn)I)。節(jié)點(diǎn)號(hào)碼以二進(jìn)制顯示。當(dāng)映射需要增長(zhǎng)時(shí),分區(qū)方案通過(guò)使用一個(gè)更多比特的哈希值來(lái)分裂區(qū)域O。這產(chǎn)生了三個(gè)區(qū)域606、608和610。新的比特為零的對(duì)象留在它們?cè)趨^(qū)域606 (節(jié)點(diǎn)00)中的位置,并且剩余的節(jié)點(diǎn)進(jìn)入新的最后一個(gè)區(qū)域610 (節(jié)點(diǎn)10)。由于分裂導(dǎo)致增加的比特用斜體字表示,即:00和10。需要注意的是,第一個(gè)和最后一個(gè)區(qū)域606和610使用兩個(gè)比特,而中間(未分裂)區(qū)域僅使用一個(gè);但是,編號(hào)方案仍然正確工作,即,當(dāng)左到右看時(shí)為{0,1,2}。為了進(jìn)一步擴(kuò)展,分裂區(qū)域I以產(chǎn)生四個(gè)區(qū)域612 (節(jié)點(diǎn)00)、614 (節(jié)點(diǎn)01)、616 (節(jié)點(diǎn)10)和618 (節(jié)點(diǎn)11)。這完成了層2。當(dāng)區(qū)域映射需要再次擴(kuò)展時(shí),方案分裂區(qū)域00至000 (即,通過(guò)增加一個(gè)更多比特的哈希值)并在最后增加新的區(qū)域100 (也通過(guò)增加一個(gè)更多比特的哈希值)。之后區(qū)域映射就具有示出的五個(gè)區(qū)域620、622、624、626和628。區(qū)域號(hào)碼與節(jié)點(diǎn)號(hào)碼無(wú)需對(duì)應(yīng)。一般地,區(qū)域號(hào)碼與獨(dú)立節(jié)點(diǎn)的陣列中的節(jié)點(diǎn)號(hào)碼無(wú)關(guān)。因此,根據(jù)一個(gè)實(shí)施例,通過(guò)將元數(shù)據(jù)對(duì)象分配給區(qū)域以及之后逐步分裂區(qū)域來(lái)實(shí)現(xiàn)對(duì)區(qū)域的控制。將區(qū)域副本(不管是授權(quán)的、備份的或不完全的)存儲(chǔ)在每個(gè)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)中。如所描述的,由授權(quán)GRM來(lái)執(zhí)行元數(shù)據(jù)操作。然而,當(dāng)節(jié)點(diǎn)故障時(shí),一些區(qū)域副本會(huì)丟失。如所描述的,通過(guò)將區(qū)域的備份副本的一個(gè)升級(jí)為授權(quán)副本來(lái)恢復(fù)有效性,這通??梢栽趲酌雰?nèi)執(zhí)行。在短暫的升級(jí)備份的間隔期間,對(duì)區(qū)域的由MMC提交的請(qǐng)求將會(huì)失敗。該故障顯示為由MMC導(dǎo)致的例外,在一段延遲之后,會(huì)進(jìn)行重新嘗試。等到重新嘗試請(qǐng)求時(shí),更新的映射應(yīng)該已經(jīng)形成,從而可以對(duì)MMC用戶連續(xù)服務(wù)。如所描述的,該方法依賴保持同步的區(qū)域的(優(yōu)選地,所有)副本。以下提供元數(shù)據(jù)管理系統(tǒng)的附加的實(shí)現(xiàn)細(xì)節(jié)。如以上提及的,當(dāng)節(jié)點(diǎn)離開群組時(shí)、當(dāng)節(jié)點(diǎn)加入群組時(shí)或當(dāng)不完全區(qū)域副本分別完成加載時(shí),MM領(lǐng)導(dǎo)者創(chuàng)建區(qū)域映射。在第一種情況中,當(dāng)節(jié)點(diǎn)短暫地或永久地離開群組時(shí),重新分配由該節(jié)點(diǎn)上的MM管理的區(qū)域。第二種情況涉及節(jié)點(diǎn)返回服務(wù)的時(shí)間或者節(jié)點(diǎn)第一次加入群組的時(shí)間;在這種情況下,將區(qū)域分配給它以減輕群組中其他MM的負(fù)擔(dān)。創(chuàng)建在新節(jié)點(diǎn)上的所有區(qū)域都是不完全的。當(dāng)這些區(qū)域完成加載數(shù)據(jù)時(shí)他們會(huì)被升級(jí)至備份。第三種情況在不完全區(qū)域完成加載其數(shù)據(jù)時(shí)發(fā)生。此時(shí),區(qū)域變成備份。優(yōu)選地,映射創(chuàng)建算法確保給定節(jié)點(diǎn)絕不包含任意區(qū)域的一個(gè)以上的副本,確保授權(quán)區(qū)域在群組中是平衡的,并且確保所有區(qū)域在群組中都是平衡的。因?yàn)橛捎谒蠷GM處理每個(gè)元數(shù)據(jù)的升級(jí)因此應(yīng)該在群組間展開,所以后兩種限制是必要的。由于授權(quán)RGM還處理檢索請(qǐng)求,因此它們也應(yīng)該均勻分布。以下描述關(guān)于映射創(chuàng)建算法的其他細(xì)節(jié)。當(dāng)麗領(lǐng)導(dǎo)者需要?jiǎng)?chuàng)建新映射時(shí),其做的第一件事是區(qū)域調(diào)查。這可以通過(guò)將請(qǐng)求發(fā)送至當(dāng)前在群組中的每個(gè)節(jié)點(diǎn)上的MM的請(qǐng)求/響應(yīng)消息模式來(lái)完成。優(yōu)選地,請(qǐng)求/響應(yīng)模式包括聚集步驟,在該步驟中結(jié)合所有響應(yīng)以形成存檔中的區(qū)域所存在的完整圖片(picture)。優(yōu)選地,對(duì)于每個(gè)區(qū)域副本,由區(qū)域調(diào)查提供的信息包括如下:擁有區(qū)域副本的節(jié)點(diǎn)、由(如果有的話)區(qū)域管理者處理的最后的升級(jí)、以及存儲(chǔ)在區(qū)域數(shù)據(jù)庫(kù)概要中的區(qū)域時(shí)間戳。區(qū)域時(shí)間戳用于識(shí)別在調(diào)查中刪除的丟棄(obsolete)的區(qū)域。這保證了丟棄的區(qū)域不會(huì)出現(xiàn)在將要形成的映射中并且也保證了丟棄區(qū)域概要將會(huì)刪除。在大多數(shù)情況下,丟棄區(qū)域的副本具有的映射版本號(hào)碼低于當(dāng)前區(qū)域副本的映射號(hào)碼。但是,這也不是總是這種情況。例如,假定由于節(jié)點(diǎn)崩潰(crash)而創(chuàng)建的新映射。區(qū)域調(diào)查發(fā)現(xiàn)剩余的區(qū)域并形成新的映射。如果故障節(jié)點(diǎn)適時(shí)的重新啟動(dòng)以響應(yīng)區(qū)域調(diào)查,則節(jié)點(diǎn)將如同一切正常地通告它的區(qū)域。然而,這些區(qū)域可能都會(huì)被廢棄,這是由于在節(jié)點(diǎn)故障時(shí)錯(cuò)過(guò)升級(jí)。該問題的解決方案是檢查區(qū)域調(diào)查包括的區(qū)域時(shí)間戳。每個(gè)區(qū)域副本通告代表處理最后升級(jí)的時(shí)間戳的它的區(qū)域時(shí)間戳。由于區(qū)域副本是保持同步的,因此有效的時(shí)間戳必須考慮映射版本的變化和初始映射。這用于識(shí)別丟棄的區(qū)域,以及故障區(qū)域是否具有當(dāng)前或過(guò)期的映射版本號(hào)碼。節(jié)點(diǎn)故障并迅速恢復(fù)服務(wù),之后基于丟棄區(qū)域開始處理請(qǐng)求是不存在危險(xiǎn)的。這樣的原因是在重新啟動(dòng)時(shí),節(jié)點(diǎn)是不存在區(qū)域映射的,并且直到接收到映射時(shí)RGM才存在。在創(chuàng)建RGM之前無(wú)法處理來(lái)自MMC的請(qǐng)求。因此,迅速重新啟動(dòng)的故障節(jié)點(diǎn)在獲得新映射之前無(wú)法處理請(qǐng)求,并且新映射將會(huì)使節(jié)點(diǎn)丟棄它的舊區(qū)域。在區(qū)域調(diào)查之后,如下生成初始區(qū)域映射。如果區(qū)域調(diào)查發(fā)現(xiàn)根本沒有區(qū)域,則之后群組一定是第一次啟動(dòng)。此時(shí),首先分配授權(quán)區(qū)域所有者。對(duì)于每次分配,算法選擇最空閑的節(jié)點(diǎn)。該最空閑節(jié)點(diǎn)是具有最少區(qū)域副本的節(jié)點(diǎn)?;趽碛械氖跈?quán)副本的數(shù)量解決束縛。在分配授權(quán)區(qū)域所有者之后,分配備份區(qū)域所有者,努力保持授權(quán)和總的區(qū)域所有權(quán)的平衡。將新映射發(fā)送至所有的麗,之后麗創(chuàng)建由該映射描述的區(qū)域。優(yōu)選地,當(dāng)群組啟動(dòng)時(shí),通過(guò)順序執(zhí)行以下映射轉(zhuǎn)變來(lái)實(shí)現(xiàn)映射變化:(I)如果區(qū)域不具有授權(quán)副本(由于節(jié)點(diǎn)故障),則升級(jí)備份;(2)如果區(qū)域具有大于MDPL的備份,則刪除過(guò)量的備份;(3)如果區(qū)域具有小于MDPL的備份(由于節(jié)點(diǎn)故障或者由于升級(jí)到了授權(quán)),則創(chuàng)建新的不完全的區(qū)域副本;(4)重新平衡所有權(quán);以及(5)重新平衡授權(quán)的所有權(quán)。步驟(4)涉及查找最忙的節(jié)點(diǎn)和將它的其中一個(gè)區(qū)域重新分配給所有權(quán)計(jì)數(shù)至少低兩級(jí)的節(jié)點(diǎn)。(如果目標(biāo)節(jié)點(diǎn)的所有權(quán)計(jì)數(shù)是低一級(jí),則之后的重新分配不會(huì)對(duì)平衡工作量有利。)優(yōu)選地,這可以通過(guò)創(chuàng)建新的不完全區(qū)域來(lái)實(shí)現(xiàn)。只要保持減少任意節(jié)點(diǎn)所擁有的區(qū)域的最大數(shù)量就可以持續(xù)該操作。步驟(5)涉及找到擁有最大數(shù)量的授權(quán)區(qū)域的節(jié)點(diǎn)并找到授權(quán)所有權(quán)計(jì)算至少低兩級(jí)的備份。該步驟可以互換責(zé)任,例如,通過(guò)升級(jí)備份的和降級(jí)授權(quán)的來(lái)實(shí)現(xiàn)。只要保持減少任意節(jié)點(diǎn)所擁有的授權(quán)區(qū)域的最大數(shù)量就可以持續(xù)該操作。當(dāng)節(jié)點(diǎn)離開群組時(shí),步驟(I)和(3)將填充由于節(jié)點(diǎn)離開而留下的區(qū)域映射中的任意間隙。之后如果必要的話,步驟(4)和(5)用于平衡工作量。當(dāng)節(jié)點(diǎn)加入群組時(shí),步驟(I) - (3)不會(huì)改變?nèi)魏问?。相反?步驟(4)會(huì)將一組不完全區(qū)域分配給新的節(jié)點(diǎn)。當(dāng)不完全區(qū)域完成加載其數(shù)據(jù)時(shí),它會(huì)通知MM領(lǐng)導(dǎo)者。映射將不完全區(qū)域升級(jí)為備份。之后步驟(5)負(fù)責(zé)將授權(quán)區(qū)域分配給新的節(jié)點(diǎn)。當(dāng)不完全區(qū)域完成其同步時(shí),將該不完全區(qū)域轉(zhuǎn)換成備份區(qū)域并通知給MM領(lǐng)導(dǎo)者。之后MM領(lǐng)導(dǎo)者發(fā)布包括多于至少一個(gè)區(qū)域的TPOF備份的新映射。步驟(2)刪除超出的備份區(qū)域,這引起減少在最重負(fù)荷的MM上的負(fù)擔(dān)。當(dāng)麗接收到新映射時(shí),該麗需要將新映射與當(dāng)前映射進(jìn)行比較,并且對(duì)由麗管理的每個(gè)區(qū)域應(yīng)用任意改變??赡艿母淖儼ㄈ缦?刪除區(qū)域、創(chuàng)建區(qū)域、將備份區(qū)域升級(jí)至授權(quán)的、將不完全區(qū)域升級(jí)至備份、以及將授權(quán)區(qū)域降級(jí)至備份。關(guān)于第一種類型的改變,負(fù)載平衡可以將區(qū)域副本的控制從一個(gè)節(jié)點(diǎn)移到另一個(gè)節(jié)點(diǎn),這會(huì)導(dǎo)致副本的刪除。此時(shí),恢復(fù)網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)資源,這包括用于存儲(chǔ)區(qū)域數(shù)據(jù)中的概要的刪除。第二種類型的改變是創(chuàng)建區(qū)域,一般發(fā)生在創(chuàng)建了授權(quán)和備份區(qū)域的新群組中。隨后,僅創(chuàng)建不完全區(qū)域。區(qū)域創(chuàng)建涉及創(chuàng)建包括每個(gè)類型的元數(shù)據(jù)對(duì)象的表格的數(shù)據(jù)庫(kù)概要。每個(gè)區(qū)域概要包括識(shí)別區(qū)域的角色(授權(quán)的、備份的或不完全的)的信息。第三種類型的改變是將備份升級(jí)至授權(quán)的,這需要區(qū)域角色的改變。其他改變類型,如他們的名稱所暗示的,涉及區(qū)域角色從不完全的到備份或從授權(quán)的到備份的改變。節(jié)點(diǎn)的每個(gè)元數(shù)據(jù)管理者控制整個(gè)群組的元數(shù)據(jù)的給定部分。因此,存儲(chǔ)在給定節(jié)點(diǎn)的元數(shù)據(jù)包括(元數(shù)據(jù))的分布式數(shù)據(jù)庫(kù)的一部分,理論上數(shù)據(jù)庫(kù)均勻地分布在群組中的所有節(jié)點(diǎn)(或者給定子集)之中。如所描述的,元數(shù)據(jù)管理者之間協(xié)作完成該功能。當(dāng)新節(jié)點(diǎn)加入到群組中時(shí),各個(gè)節(jié)點(diǎn)的責(zé)任是適應(yīng)新的能力;這包括重新分配所有節(jié)點(diǎn)之間的元數(shù)據(jù)使得新成員承擔(dān)相同的份額。相反地,當(dāng)節(jié)點(diǎn)故障或者離開群組時(shí),其他節(jié)點(diǎn)元數(shù)據(jù)管理者通過(guò)承擔(dān)更大的份額來(lái)補(bǔ)償減少的能力。優(yōu)選地,為了防止數(shù)據(jù)丟失,元數(shù)據(jù)信息在多個(gè)節(jié)點(diǎn)之間復(fù)制,其中每個(gè)節(jié)點(diǎn)直接負(fù)責(zé)管理所有群組元數(shù)據(jù)的一定比例的元數(shù)據(jù),并且將該數(shù)據(jù)復(fù)制到一定數(shù)量的其他節(jié)點(diǎn)上。當(dāng)生成新映射時(shí),MM領(lǐng)導(dǎo)者開始將該映射分配到其他節(jié)點(diǎn)上并在所有節(jié)點(diǎn)都擁有它之前請(qǐng)求處理的暫停。當(dāng)系統(tǒng)確認(rèn)所有節(jié)點(diǎn)都擁有新映射時(shí)重新開始常規(guī)處理。增量式刷新在如上描述的系統(tǒng)中,將元數(shù)據(jù)分配到冗余地存儲(chǔ)在系統(tǒng)的節(jié)點(diǎn)之間的區(qū)域中。元數(shù)據(jù)管理者具有包括這些區(qū)域的位置的區(qū)域映射,這能夠使系統(tǒng)合適地路由請(qǐng)求。區(qū)域的數(shù)量確定粒度(granularity),在該粒度上在所有節(jié)點(diǎn)間劃分元數(shù)據(jù)負(fù)荷。映射包括如下狀態(tài)的區(qū)域副本:授權(quán)區(qū)域副本(A區(qū)域)、備份區(qū)域副本(B區(qū)域)以及處于從無(wú)或者從(A)或(B)區(qū)域(I區(qū)域)中恢復(fù)處理中的不完全區(qū)域副本。當(dāng)(A)或(B)區(qū)域離開群組時(shí),刷新映射。如果(B)區(qū)域已經(jīng)離開群組,則創(chuàng)建(I)區(qū)域并通過(guò)復(fù)制來(lái)自(A)區(qū)域的所有元數(shù)據(jù)來(lái)構(gòu)成(I)區(qū)域。當(dāng)(A)區(qū)域離開群組時(shí),升級(jí)相應(yīng)的(B)區(qū)域到(A)并且之后創(chuàng)建(I)區(qū)域。當(dāng)完成(I)區(qū)域副本時(shí),將其升級(jí)至(B)區(qū)域。當(dāng)所有區(qū)域都完成時(shí),映射再次位于MDPL。如果在這處理期間丟失的區(qū)域恢復(fù),則由于它的時(shí)間戳已經(jīng)過(guò)期,一般會(huì)丟棄它。根據(jù)上述公開,描述了基于將最后應(yīng)用的改變存儲(chǔ)到區(qū)域上的增強(qiáng)的恢復(fù)方案。其重要性是用于確定如何處理恢復(fù)的區(qū)域而不僅是當(dāng)前的時(shí)間戳。因而,當(dāng)(A)或B區(qū)域立刻恢復(fù)(例如,由于平常的節(jié)點(diǎn)重啟)時(shí),在多數(shù)情況下,由于恰好地一個(gè)更新使得區(qū)域僅是不同的。優(yōu)選地,根據(jù)本公開,為了檢查該情況,最后的更新維持在每個(gè)區(qū)域中的區(qū)域時(shí)間戳表格中。在第一種情況中,存在恰好錯(cuò)失最后的更新的區(qū)域。這是在(B)區(qū)域接收到來(lái)自(A)區(qū)域的更新之前它離開的情況。在這種情況下,系統(tǒng)應(yīng)用最后的更新使得最新的區(qū)域具有當(dāng)前映射。在應(yīng)用更新之后,其余的映射安裝繼續(xù)正常進(jìn)行。第二種情況是存在不向系統(tǒng)的任何地方傳送的應(yīng)用于區(qū)域的更新。這是在A區(qū)域的更新適用于其(B)區(qū)域之前A區(qū)域離開的情況。在該情況中,認(rèn)為該更新是無(wú)效的并且在區(qū)域恢復(fù)到映射之前從該區(qū)域?qū)⑵湟瞥?。在這種情況下,系統(tǒng)創(chuàng)建以下描述的稱為“在這區(qū)域同時(shí)進(jìn)行更新的移除。最后,存在恢復(fù)的區(qū)域副本根本不會(huì)與授權(quán)副本不同(例如,當(dāng)恢復(fù)的節(jié)點(diǎn)是不可用時(shí)假定未對(duì)區(qū)域進(jìn)行寫操作)的情況。此時(shí),通過(guò)比較上述提及的區(qū)域時(shí)間戳,元數(shù)據(jù)管理領(lǐng)導(dǎo)者可以確定恢復(fù)的區(qū)域是完全最新的并且從而可以立刻(作為備份(B)區(qū)域)恢復(fù)服務(wù)。區(qū)域時(shí)間戳比較是很靈活的從而可以解釋一個(gè)或多個(gè)丟失的映射,這允許MM領(lǐng)導(dǎo)者錯(cuò)誤地檢查已經(jīng)丟失一段時(shí)間的恢復(fù)的區(qū)域副本。如本文所稱的,應(yīng)用于到特定的區(qū)域時(shí)間戳為止是最新的任意區(qū)域的部分或“P”狀態(tài)不是具有當(dāng)前映射的最新的,但是通過(guò)應(yīng)用存儲(chǔ)在另一個(gè)區(qū)域副本上的待執(zhí)行的更新可以達(dá)到最新的。由于(如之前描述的)當(dāng)系統(tǒng)檢查到區(qū)域副本丟失時(shí)立即創(chuàng)建了(I)區(qū)域,并且由于這些(I)區(qū)域接收(A)區(qū)域接收到的每個(gè)更新(開始于丟失區(qū)域副本的映射的最后更新),因此(I)區(qū)域副本包括了使(P)區(qū)域副本達(dá)到最新的待執(zhí)行的更新。將這些待執(zhí)行的更新從(I)區(qū)域復(fù)制到(P)區(qū)域。因此,根據(jù)本公開,(P)區(qū)域表示從已存在的(A)或(B)區(qū)域恢復(fù)的區(qū)域。每個(gè)(P)區(qū)域從存儲(chǔ)在(I)區(qū)域(剛好包含使(P)區(qū)域副本達(dá)到最新的待執(zhí)行的更新)中的待執(zhí)行的改變中更新。如(B)或(I)區(qū)域一樣,一創(chuàng)建(P)區(qū)域,(A)區(qū)域就視其為所有更新的備份區(qū)域。(P)區(qū)域(它一創(chuàng)建)就接收到備份請(qǐng)求并將它們存儲(chǔ)在pending_update (待執(zhí)行更新)表格中(或者其他任意合適的存儲(chǔ)機(jī)制中)。當(dāng)執(zhí)行(P)區(qū)域更新時(shí),將其轉(zhuǎn)換為(B)區(qū)域。根據(jù)該轉(zhuǎn)換,移除(I)區(qū)域。在需要移除最后的更新時(shí),如果應(yīng)用的最后的更新未應(yīng)用于其他區(qū)域副本上,則P區(qū)域首先取消應(yīng)用的最后的更新。圖7示出了第一種示例情況。這里,(B)區(qū)域700已經(jīng)丟失并且再不會(huì)接收到來(lái)自(A)區(qū)域702的更新(100,4)。此時(shí),創(chuàng)建(I)區(qū)域704。通過(guò)復(fù)制來(lái)自(A)區(qū)域702的元數(shù)據(jù)來(lái)構(gòu)成(I)區(qū)域(如所示);(1)區(qū)域704也開始接收任意后續(xù)的對(duì)(A)區(qū)域702的更新。當(dāng)(B)區(qū)域700恢復(fù)時(shí),由于它((B)區(qū)域)當(dāng)前在包含它的上次的映射中,因此轉(zhuǎn)換
(B)區(qū)域?yàn)?P)區(qū)域706。(P)區(qū)域706從(I)區(qū)域704的待執(zhí)行的更新表格中構(gòu)成它錯(cuò)失的更新。如果該處理在(I)區(qū)域704為最新的之前執(zhí)行,則將(P)區(qū)域706升級(jí)至(B)區(qū)域并丟棄(I)區(qū)域。圖8示出了第二種示例。這里,在(A)區(qū)域800應(yīng)用更新(100,4)到(B)區(qū)域802之前故障。當(dāng)區(qū)域(A)離開群組時(shí),將(B)區(qū)域升級(jí)為新的(A)區(qū)域。創(chuàng)建新的(I)區(qū)域804以接收來(lái)自區(qū)域(A)的新的更新。當(dāng)之前的(A)區(qū)域恢復(fù)時(shí),轉(zhuǎn)換其為(P)區(qū)域806。如上描述的,(P)區(qū)域806從區(qū)域(I) 804的待執(zhí)行更新表格中構(gòu)成它錯(cuò)失的更新。(P)區(qū)域還取消無(wú)效的最后的更新。如果該處理在(I)區(qū)域?yàn)樽钚碌闹皥?zhí)行,則將區(qū)域(P)806升級(jí)至(B)區(qū)域并丟棄(I)區(qū)域。因此,圖7示出了如何在(B)區(qū)域丟失之后的恢復(fù)期間創(chuàng)建(P)區(qū)域副本(P區(qū)域)并且之后升級(jí)至(B)區(qū)域的示例。圖8示出了如何在(A)區(qū)域丟失之后的恢復(fù)期間創(chuàng)建(P)區(qū)域副本并且之后升級(jí)至(B)區(qū)域的示例。當(dāng)映射表示一個(gè)存在時(shí)創(chuàng)建(P)區(qū)域,并將已存在的區(qū)域轉(zhuǎn)換為(P)區(qū)域。那時(shí),區(qū)域也會(huì)在映射中顯示其是否需要恢復(fù)到最后的更新以及從哪個(gè)(I)區(qū)域復(fù)制。當(dāng)群組需要移動(dòng)區(qū)域或者根據(jù)已存的授權(quán)區(qū)域創(chuàng)建備份區(qū)域時(shí),開始刷新任務(wù)(稱為RefreshTask)。任務(wù)的重點(diǎn)是在源機(jī)器和目的機(jī)器之間的復(fù)制表格腳本的調(diào)用。腳本直接與基于SQL的數(shù)據(jù)庫(kù)交互。RefreshTask實(shí)現(xiàn)(P)區(qū)域的功能。在任何其他操作之前,如果應(yīng)用的最后的更新未在其他區(qū)域副本上應(yīng)用,則(P)區(qū)域必須首先取消該應(yīng)用的最后的更新。這是稱為Undo Last Update (取消最后更新)的子任務(wù)。為此,RefreshTask從(A)區(qū)域中刪除通過(guò)更新已經(jīng)影響的數(shù)據(jù)庫(kù)表格中任意行的本地副本及相等行的副本。在單個(gè)待執(zhí)行的更新中可能存在多個(gè)更新,因此對(duì)于待執(zhí)行更新中的所有的單獨(dú)更新會(huì)重復(fù)該處理。對(duì)于每個(gè)更新,Task (任務(wù))確定受影響的數(shù)據(jù)庫(kù)表格和用于受影響的行的SQL(結(jié)構(gòu)化查詢語(yǔ)言)的where clause。之后該where clause首先用于刪除用于該更新的受影響的表格中的任意本地行,并且之后(通過(guò)復(fù)制表格腳本)從(A)區(qū)域源復(fù)制所有的相似行。該語(yǔ)句將斷言應(yīng)用于元數(shù)據(jù)以選擇需要通過(guò)Undo Last Update更改的元數(shù)據(jù)的子集。之后,RefreshTask開始稱為Copy Pending Updates (復(fù)制待執(zhí)行的更新)的子任務(wù)。該任務(wù)從映射中指定的(I)區(qū)域中復(fù)制pending_update (待執(zhí)行更新)的表格。該復(fù)制的目標(biāo)是pending_update_copy (待執(zhí)行更新復(fù)制)表格而不是pending_update (待執(zhí)行更新)表格,以防止將發(fā)生的pending_update (待執(zhí)行更新)和正常的備份請(qǐng)求之間的沖突。當(dāng)完成復(fù)制時(shí),RefreshTask將兩個(gè)pending_update (待執(zhí)行更新)表格合并。這對(duì)pending_update (待執(zhí)行更新)進(jìn)行了分類并且消除了任意復(fù)制。之后,RefreshTask開始稱為Apply Pending Updates (應(yīng)用待執(zhí)行的更新)的子任務(wù)。具體地,一旦pending_update (待執(zhí)行更新)表格完全構(gòu)成,則優(yōu)選地,(P)區(qū)域以兩種途徑應(yīng)用pending_update (待執(zhí)行更新)。在該處理的最后,一般會(huì)更新區(qū)域的region_timestamp (區(qū)域時(shí)間戳)。一旦應(yīng)用待執(zhí)行更新,RefreshTask就執(zhí)行稱為Convert to Backup Region (轉(zhuǎn)換為備份區(qū)域)的子任務(wù)。這里,(P)區(qū)域?qū)⑵渥约恨D(zhuǎn)換為(B)區(qū)域。由于(P)區(qū)域減少了刷新(I)區(qū)域的消耗,因此在⑵一⑶轉(zhuǎn)換完成之前(I)區(qū)域會(huì)保持工作。為了完成這個(gè),映射包括表示可使用的I區(qū)域的標(biāo)記,當(dāng)發(fā)生轉(zhuǎn)換時(shí),該標(biāo)記將它們指定為丟棄。該轉(zhuǎn)換由A區(qū)域來(lái)協(xié)調(diào),因?yàn)锳區(qū)域需要獲知將備份更新停止發(fā)送至I區(qū)域。當(dāng)發(fā)生(P) — (B)轉(zhuǎn)換時(shí),(A)區(qū)域具有新的監(jiān)聽器,通過(guò)對(duì)于通告的區(qū)域從本地映射移除任意可使用的(I)區(qū)域、釋放時(shí)鐘以及對(duì)這些區(qū)域的每一個(gè)發(fā)送移除它們自己的新消息,從而對(duì)該消息作出反應(yīng)。如果(P)或(I)區(qū)域RefreshTask (更新任務(wù))的任意步驟失敗,則無(wú)法再次使用該區(qū)域。以上描述的增量式刷新提供了很多的優(yōu)點(diǎn)。最主要的優(yōu)點(diǎn)是防止(I)區(qū)域的時(shí)間長(zhǎng)和消耗多的刷新。具體地,當(dāng)區(qū)域調(diào)查(作為映射生成過(guò)程的一部分)識(shí)別具有少于MDPL個(gè)副本的區(qū)域時(shí),倉(cāng)Il建(I)區(qū)域作為新的副本。該(I)區(qū)域開始RefreshTask (更新任務(wù))以根據(jù)區(qū)域的(A)副本復(fù)制完整的概要。該RefreshTask (更新任務(wù))具有幾個(gè)開銷大的步驟,包括復(fù)制數(shù)據(jù)和創(chuàng)建索引。通過(guò)使用本文中描述的技術(shù),僅對(duì)在發(fā)生數(shù)據(jù)庫(kù)的部分丟失時(shí)應(yīng)用更新,因此該操作花費(fèi)的時(shí)間和消耗的系統(tǒng)資源遠(yuǎn)遠(yuǎn)小于通過(guò)冗余來(lái)重建該部分所花費(fèi)的時(shí)間和消耗的系統(tǒng)資源。減少修復(fù)的時(shí)間也減少了群組低于MDPL和最大性能的時(shí)間。如本文描述的存檔管理方案能夠?qū)崿F(xiàn)數(shù)字資產(chǎn)的獲取、維護(hù)、管理和檢索。該設(shè)計(jì)解決了很多需求:無(wú)限制量存儲(chǔ)、高可靠性、自我管理、法規(guī)遵從、硬件獨(dú)立性和易于與現(xiàn)有應(yīng)用集成。運(yùn)行(例如)Linux商用硬件的群組提供了一種魯棒的平臺(tái)和虛擬的無(wú)限量的存檔。該系統(tǒng)可以擴(kuò)展,例如,從一些存儲(chǔ)節(jié)點(diǎn)服務(wù)器擴(kuò)展到存儲(chǔ)成千上萬(wàn)個(gè)兆兆字節(jié)的數(shù)據(jù)的很多節(jié)點(diǎn)。該結(jié)構(gòu)確保了存儲(chǔ)性能可以始終與機(jī)構(gòu)增長(zhǎng)的存檔需求保持一致。該系統(tǒng)的設(shè)計(jì)是從不會(huì)丟失文件。通過(guò)跨群組復(fù)制數(shù)據(jù)可以使得存檔總是免受設(shè)備故障的損害。如果磁盤或者節(jié)點(diǎn)故障,則群組自動(dòng)將故障轉(zhuǎn)移到群組中的其他節(jié)點(diǎn)上以維持相同數(shù)據(jù)的副本。系統(tǒng)通過(guò)自動(dòng)處理減少了存檔存儲(chǔ)的消耗。例如,當(dāng)節(jié)點(diǎn)加入或離開群組存檔時(shí),通過(guò)跨成員節(jié)點(diǎn)重新分配文件使得系統(tǒng)自動(dòng)調(diào)節(jié)群組負(fù)荷平衡并且優(yōu)化性能。系統(tǒng)方便了遵守客戶定義的保留策略。系統(tǒng)通過(guò)在開放平臺(tái)上的配置消除了硬件的依賴性。隨著商業(yè)平臺(tái)和專屬存儲(chǔ)設(shè)備之間的價(jià)格差異的增長(zhǎng),IT購(gòu)買者不再想要與高成本設(shè)施供應(yīng)商的關(guān)系綁定。由于給定節(jié)點(diǎn)一般在商業(yè)硬件和優(yōu)選地開源(例如,Linux)操作系統(tǒng)軟件上運(yùn)行,購(gòu)買者優(yōu)選地可以在很多硬件選擇中購(gòu)買最好的解決方案。系統(tǒng)還提供工業(yè)標(biāo)準(zhǔn)接口,例如用于存儲(chǔ)和檢索文件的NFS、HTTP、FTP和CIFS。這確保了系統(tǒng)能夠簡(jiǎn)單地獲得到大多數(shù)標(biāo)準(zhǔn)內(nèi)容管理系統(tǒng)、搜索系統(tǒng)、存儲(chǔ)管理工具(如HSM和備份系統(tǒng))和定制的存檔應(yīng)用的接口。上述描述了由特定實(shí)施例執(zhí)行的操作的具體順序,需要理解的是,該指令是示范性的,替代實(shí)施例可以以不同順序執(zhí)行操作,組合特定操作、重疊特定操作等。說(shuō)明書中對(duì)于特定實(shí)施例的參考表明了描述的實(shí)施例可以包括具體特征、結(jié)構(gòu)或特性,然而每個(gè)實(shí)施例不必要都包括該具體特征、結(jié)構(gòu)或特性。在方法或處理的上下文中描述了公開的技術(shù),本文的主題也涉及執(zhí)行本文中的操作的裝置。該裝置可以為了需要具有特定結(jié)構(gòu),或者它可以包括通過(guò)存儲(chǔ)在計(jì)算機(jī)中的計(jì)算機(jī)程序選擇性的激活或重新配置的通用計(jì)算機(jī)。這種計(jì)算機(jī)程序可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,例如但是不限于,包括光盤、⑶-ROM和磁光盤、只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)、磁卡或光學(xué)卡的任意類型的磁盤、或者適用于存儲(chǔ)電子指令的任意類型的介質(zhì),其中每個(gè)都與計(jì)算機(jī)系統(tǒng)總線耦合。雖然分別描述了系統(tǒng)的給定元件,但是普通技術(shù)人員可以意識(shí)到一些功能可以與給定指令、程序序列、代碼部分等組合或共享。雖然在用于“固定內(nèi)容”的存檔的情景中描述了本發(fā)明,但是不限于此。本文描述的技術(shù)同樣可以應(yīng)用于允許對(duì)本文進(jìn)行添加和替換類型的修改的存儲(chǔ)系統(tǒng)。已經(jīng)描述了我們的發(fā)明,現(xiàn)在我們所要的權(quán)利要求如下。
權(quán)利要求
1.一種計(jì)算機(jī)可讀介質(zhì),在所述計(jì)算機(jī)可讀介質(zhì)上存儲(chǔ)有指令,當(dāng)由處理器執(zhí)行所述指令時(shí),執(zhí)行在聯(lián)網(wǎng)的獨(dú)立節(jié)點(diǎn)的冗余陣列中運(yùn)行的方法,其中元數(shù)據(jù)對(duì)象存儲(chǔ)在跨所述陣列分布的區(qū)域的集合中,所述方法包括: 提供區(qū)域映射,所述區(qū)域映射用于識(shí)別所述區(qū)域的集合的位置,其中所述區(qū)域映射包括處于多個(gè)狀態(tài)之一的所述區(qū)域的副本,所述狀態(tài)包括以下之一:授權(quán)的、備份的和不完全的,并且其中不完全的區(qū)域副本存儲(chǔ)對(duì)所述區(qū)域的待執(zhí)行更新;以及 在用于修復(fù)返回到 所述區(qū)域的集合的區(qū)域的恢復(fù)期間,使用所述待執(zhí)行更新。
2.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其中,所述狀態(tài)進(jìn)一步包括從所述待執(zhí)行更新構(gòu)成的部分狀態(tài)。
3.根據(jù)權(quán)利要求2所述的計(jì)算機(jī)可讀介質(zhì),其中,所述使用步驟包括: 創(chuàng)建所述區(qū)域的部分(P)副本,更新所述部分(P)副本,以及將所述區(qū)域的部分(P)副本轉(zhuǎn)換為所述區(qū)域的備份(B)副本,通過(guò)所述區(qū)域的(A)副本將所述區(qū)域的部分(P)副本作為所有更新的備份區(qū)域。
4.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)可讀介質(zhì),其中,從所述區(qū)域的不完全(I)副本中的所述待執(zhí)行更新對(duì)所述部分(P)副本進(jìn)行更新。
5.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)可讀介質(zhì),其中,從所述區(qū)域的授權(quán)(A)副本通過(guò)同步所述部分(P)副本中的一部分來(lái)更新所述部分(P)副本以取消最后一次更新。
6.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)可讀介質(zhì),其中,當(dāng)所述(P)副本完成更新時(shí),將所述區(qū)域的部分(P)副本轉(zhuǎn)換為所述區(qū)域的備份(B)副本。
7.根據(jù)權(quán)利要求4所述的計(jì)算機(jī)可讀介質(zhì),其中,當(dāng)將所述區(qū)域的部分(P)副本轉(zhuǎn)換為所述區(qū)域的備份(B)副本時(shí),移除所述不完全的(I)副本。
8.一種裝置,包括: 處理器; 計(jì)算機(jī)存儲(chǔ)器,用于保存計(jì)算機(jī)程序指令,當(dāng)由所述處理器執(zhí)行所述計(jì)算機(jī)程序指令時(shí),執(zhí)行在聯(lián)網(wǎng)的獨(dú)立節(jié)點(diǎn)的冗余陣列中運(yùn)行的方法,其中,元數(shù)據(jù)對(duì)象存儲(chǔ)在跨所述陣列分布的區(qū)域的集合中,所述方法包括: 提供區(qū)域映射,所述區(qū)域映射用于識(shí)別所述區(qū)域的集合的位置,其中所述區(qū)域映射包括處于多個(gè)狀態(tài)之一的所述區(qū)域的副本,所述狀態(tài)包括以下之一:授權(quán)的、備份的和不完全的,并且其中不完全的區(qū)域副本存儲(chǔ)對(duì)所述區(qū)域的待執(zhí)行更新;以及 在用于修復(fù)返回到所述區(qū)域的集合的區(qū)域的恢復(fù)期間,使用所述待執(zhí)行更新。
9.根據(jù)權(quán)利要求8所述的裝置,其中,所述狀態(tài)進(jìn)一步包括從所述待執(zhí)行更新構(gòu)成的部分狀態(tài)。
10.根據(jù)權(quán)利要求9所述的裝置,其中,所述執(zhí)行步驟包括: 創(chuàng)建所述區(qū)域的部分(P)副本,更新所述部分(P)副本,以及將所述區(qū)域的部分(P)副本轉(zhuǎn)換為所述區(qū)域的備份(B)副本,通過(guò)所述區(qū)域的(A)副本將所述區(qū)域的部分(P)副本作為所有更新的備份區(qū)域。
11.根據(jù)權(quán)利要求10所述的裝置,其中,從所述區(qū)域的不完全(I)副本中的所述待執(zhí)行更新對(duì)所述部分(P)副本進(jìn)行更新。
12.根據(jù)權(quán)利要求10所述的裝置,其中,從所述區(qū)域的授權(quán)(A)副本通過(guò)同步所述部分(P)副本中的一部分來(lái)更新所述部分(P)副本以取消最后一次更新。
13.根據(jù)權(quán)利要求10所述的裝置,其中,當(dāng)所述(P)副本完成更新時(shí),將所述區(qū)域的部分(P)副本轉(zhuǎn)換為所述區(qū)域的備份(B)副本。
14.根據(jù)權(quán)利要求11所述的裝置,其中,當(dāng)將所述區(qū)域的部分(P)副本轉(zhuǎn)換為所述區(qū)域的備份(B)副本時(shí),移除所述不完全的(I)副本。
15.一種在聯(lián)網(wǎng)的獨(dú)立節(jié)點(diǎn)的冗余陣列中運(yùn)行的方法,其中,元數(shù)據(jù)對(duì)象存儲(chǔ)在跨所述陣列分布的區(qū)域的集合中,所述方法包括: 提供區(qū)域映射,所述區(qū)域映射用于識(shí)別所述區(qū)域的集合的位置,其中所述區(qū)域映射包括處于多個(gè)狀態(tài)之一的所述區(qū)域的副本,所述狀態(tài)包括以下之一:授權(quán)的、備份的和不完全的,并且其中不完全的區(qū) 域副本存儲(chǔ)對(duì)所述區(qū)域的待執(zhí)行更新;以及 在用于修復(fù)返回到所述區(qū)域的集合的區(qū)域的恢復(fù)期間,使用所述待執(zhí)行更新。
16.根據(jù)權(quán)利要求15所述的方法,其中,所述狀態(tài)進(jìn)一步包括從所述待執(zhí)行更新構(gòu)成的部分狀態(tài)。
17.根據(jù)權(quán)利要求16所述的方法,其中,所述執(zhí)行步驟包括: 創(chuàng)建所述區(qū)域的部分(P)副本,更新所述部分(P)副本,以及將所述區(qū)域的部分(P)副本轉(zhuǎn)換為所述區(qū)域的備份(B)副本,通過(guò)所述區(qū)域的(A)副本將所述區(qū)域的部分(P)副本作為所有更新的備份區(qū)域。
18.根據(jù)權(quán)利要求17所述的方法,其中,當(dāng)所述(P)副本完成更新時(shí),將所述區(qū)域的部分(P)副本轉(zhuǎn)換為所述區(qū)域的備份(B)副本。
19.根據(jù)權(quán)利要求17所述的方法,其中,當(dāng)將所述區(qū)域的部分(P)副本轉(zhuǎn)換為所述區(qū)域的備份(B)副本時(shí),移除所述不完全的(I)副本。
全文摘要
通過(guò)本文描述的增量式刷新技術(shù)減少了群組恢復(fù)時(shí)間。本技術(shù)的目的在于挽救部分冗余分布式數(shù)據(jù)庫(kù)的損失(例如,在故障期間),這是在損失期間通過(guò)僅對(duì)發(fā)生在該部分?jǐn)?shù)據(jù)庫(kù)的更新執(zhí)行增量式刷新來(lái)實(shí)現(xiàn)。
文檔編號(hào)G06F12/16GK103119590SQ201180044819
公開日2013年5月22日 申請(qǐng)日期2011年9月13日 優(yōu)先權(quán)日2010年9月24日
發(fā)明者阿蘭·G·布賴恩特, 凱文·S·格里馬迪, 特雷克·帕默爾, 戴維·平克尼 申請(qǐng)人:日立數(shù)據(jù)系統(tǒng)有限公司