分布式存儲系統(tǒng)中對象的層級組塊的制作方法
【專利摘要】對象復(fù)制本在分布式存儲系統(tǒng)中的放置包括在第一實例處打開日志以存儲對象組塊。每個日志與單一放置策略相關(guān)聯(lián)。接收包括組塊的對象。該對象具有放置策略,并且該組塊包括多個存儲分塊。所述分塊被存儲在與放置策略相匹配的日志中。存儲該對象的全局元數(shù)據(jù),其包括該對象的組塊的列表。存儲該組塊的本地元數(shù)據(jù),其包括識別多個分塊中的每個分塊的分塊列表。該本地元數(shù)據(jù)與該日志相關(guān)聯(lián)。該日志隨后被關(guān)閉。該日志隨后根據(jù)放置策略而被復(fù)制至第二實例。該全局元數(shù)據(jù)被更新以反映該復(fù)制,而該本地元數(shù)據(jù)則并不被該復(fù)制所改變。
【專利說明】
分布式存儲系統(tǒng)中對象的層級組塊
技術(shù)領(lǐng)域
[0001]所公開的實施方式總體上涉及分布式存儲系統(tǒng),尤其涉及將對象劃分為組塊(Chunk)并且以層級方式對組塊進(jìn)行存儲。
【背景技術(shù)】
[0002]大規(guī)模數(shù)據(jù)儲存器已經(jīng)從集中服務(wù)架構(gòu)變迀為分布式存儲系統(tǒng)。由商品計算機(jī)所構(gòu)建的分布式存儲系統(tǒng)與整體磁盤整列相比能夠以部分成本而交付高性能、高可用性和高可擴(kuò)展性。數(shù)據(jù)跨位于不同地理位置的分布式存儲系統(tǒng)的多個實例進(jìn)行復(fù)制,從而提高了可用性并且降低了距客戶端的網(wǎng)絡(luò)距離。
[0003]在分布式存儲系統(tǒng)中,對象基于約束而在被動態(tài)放置在分布式存儲系統(tǒng)的各個實例中(即,在其中創(chuàng)建,從其中刪除和/或被移動至那里)。存在幾種用于將受到約束的對象有效放置在全球范圍的分布式存儲系統(tǒng)中的現(xiàn)有方法,上述分布式存儲系統(tǒng)存儲數(shù)以萬億計的對象以及千萬億的數(shù)據(jù),并且包括遍布全球的數(shù)十個數(shù)據(jù)中心。
[0004]新的視覺化、多媒體和其它數(shù)據(jù)密集型應(yīng)用使用非常大的對象,其可以是數(shù)百G字節(jié)或者更大。管理這樣的非常龐大的對象對于分布式存儲系統(tǒng)帶來了額外的復(fù)雜度。首先,將這樣的對象上傳到分布式存儲系統(tǒng)中通常是以流傳輸?shù)哪J竭M(jìn)行,將對象劃分為組塊并且單獨寫入每個組塊。這會對上傳施加以長的延遲,而延遲又會由于潛在的客戶端和服務(wù)器故障而被惡化。此外,組塊可以為了更好的操作效率而被匯總為更大的分片(shard)。術(shù)語“分片”和“日志”在這里可以互換使用。結(jié)果,大型對象的高效上傳對于被允許客戶端每次立連接至任意可用集群的大規(guī)模系統(tǒng)的需求所驅(qū)動的存儲行業(yè)而言變得越來越重要。此夕卜,單個對象的元數(shù)據(jù)的量(例如,對于10Gb的文件而言為25000個組塊,其中每個組塊為4Mb)使復(fù)制和壓縮不太有效。
【發(fā)明內(nèi)容】
[0005]所公開的實施方式將大型對象的上傳同時分布至多個存儲位置。如這里所使用的,存儲位置被稱作“分片”、“匯總分片”或“日志”。該方案通過將大型對象劃分為多個組塊來實施,每個組塊被上傳至不同的存儲集群(所述存儲集群可以處于不同的地理位置)。如果分片在上傳期間變?yōu)椴豢捎?例如,由于分片“變滿”或者分片所存儲的實例發(fā)生故障),則客戶端切換至處于不同集群之中的新的分片。該方案并不要求在開始之后保持在相同的分片。最終形成的對象由組塊引用的有序列表來表示。
[0006]在一些方案中,組塊是存儲的基本單位,并且每個組塊的位置被存儲在全局元數(shù)據(jù)中。針對非常大的對象而言,該方案導(dǎo)致對于單個對象以全局級別存儲了相當(dāng)數(shù)量的元數(shù)據(jù)。因此,一些實施方式使用層級組塊方案,這減少了針對每個對象所存儲的全局元數(shù)據(jù)的量。在層級實施方式中,術(shù)語“組塊”被用來識別最高級別的劃分,其具有以全局級別所存儲的相對應(yīng)元數(shù)據(jù)。在這些實施方式中,術(shù)語“分塊(block)”被用來識別實際存儲的基本單位(例如,2Mb或8Mb)。分塊針對每個分片在本地進(jìn)行管理。在非層級系統(tǒng)中,單個術(shù)語“組±夬”可以被用來識別這兩種概念,因為存儲的基本單位就是針對其存儲全局元數(shù)據(jù)的基本單位。
[0007]層級組塊能夠以多種方式來實施。在一些實施方式中,即使在僅存在一個分塊的情況下每個組塊也包括分塊列表。在這些實施方式中,始終存在附加的層級級別以用于查找與組塊相對應(yīng)的數(shù)據(jù)。其它實施方式使用混合方案,使得僅在大型組塊需要時才存在層級。在這樣的混合實施方式中,小的對象可以包括單個組塊,單個組塊與單個分塊相對應(yīng)。另一方面,對于更大的對象,每個組塊是分塊的列表。
[0008]所公開的層級方案減少了全局元數(shù)據(jù)的量,這降低了管理對象或者將對象從一個存儲集群移動至另一個的成本。反之對象組塊在全局級別進(jìn)行管理,組塊內(nèi)的分塊則在本地分片級別進(jìn)行管理,使得對象元數(shù)據(jù)通常僅包含每分片一個組塊引用。
[0009]在一些實施方式中,上傳處理遵循這些步驟:(I)找出用于上傳的可用分片;(2)將數(shù)據(jù)寫入當(dāng)前分片直至該分片不可用(例如,變滿)或者不存在更多數(shù)據(jù);(3)向組塊的有序列表添加當(dāng)前組塊引用;(4)如果對象上傳完成,則最終形成該對象;否則(5)針對剩余的該對象在步驟(I)開始進(jìn)行重復(fù)。
[0010]在一些實施方式中,從存儲讀取對象遵循這些步驟:(I)針對所期望的對象找出組塊引用的集合(始終至少存在一個);(2)基于該組塊引用找出分片的位置;(3)使用組塊標(biāo)識符和本地分片元數(shù)據(jù)從(一個或多個)分片位置讀取數(shù)據(jù);(4)針對每個組塊引用重復(fù)步驟2和3。
[0011]例如,假設(shè)通過將數(shù)據(jù)寫入到分片I而開始對象上傳,并且在分片I變滿時切換至分片2。(兩個分片一分片I和分片2—可以處于相同或不同的實例)。對象元數(shù)據(jù)(其是全局的)由兩個組塊引用所組成,而每個分片針對每個組塊管理分片的本地列表。例如,每個分片能夠針對該對象而存儲多個分塊。在這種情況下,存儲是完全分級的:對象被劃分為組塊,并且每個組塊被劃分為分塊。在其它實施方式中,組塊中的一個組塊可以被劃分為多個分塊(這樣的組塊有時被稱作“超級組塊”),而另一個組塊則可以由單個分塊所構(gòu)成。在后者的情況下,組塊標(biāo)識符可以是分塊標(biāo)識符。
[0012]由于分片I和分片2相互獨立,所以它們的復(fù)制本可以被存儲在不同實例處。例如,分片I可以被存儲在實例I和實例2,而分片2則可以被存儲在實例I和實例3。
[0013]該所公開的方法實質(zhì)性地改善了上傳服務(wù)的可用性和存儲效率。該方法支持可恢復(fù)上傳(例如,當(dāng)實例在大型對象的上傳期間發(fā)生故障時)以及在上傳中間切換至新的分片(例如,當(dāng)分片變滿時)。此外,該方法支持同時寫入多個分片,這可以針對大型對象顯著提高性能。在一些實施方式中,單個對象的數(shù)據(jù)可以被同時寫入處于不同實例處的兩個或更多不同的分片、同時被寫入處于相同實例處的兩個或更多分片、或者甚至在單個日志內(nèi),兩個或更多處理線程可以同時將數(shù)據(jù)的不同分塊寫入到單個日志。當(dāng)然,分布式上傳被可用資源所限制。該分布式存儲系統(tǒng)具有許多在相同時間上傳對象的不同客戶端,從而來自一個客戶端的單個非常大的對象并不允許消耗過多的可用資源。
[0014]根據(jù)一些實施方式,在分布式存儲系統(tǒng)的第一實例處執(zhí)行用于對對象復(fù)制本在該分布式存儲系統(tǒng)中的放置進(jìn)行管理的方法。該第一實例具有一個或多個服務(wù)器,每個服務(wù)器具有一個或多個處理器和存儲器。該存儲器存儲一個或多個程序以用于由該一個或多個處理器所執(zhí)行。該第一實例接收與第一放置策略相關(guān)聯(lián)的第一對象。該第一放置策略指定了第一對象的復(fù)制本在該分布式存儲系統(tǒng)中存儲于何處的準(zhǔn)則。在一些實施方式中,每個放置策略指定了對象復(fù)制本的目標(biāo)數(shù)量以及那些復(fù)制本的目標(biāo)位置。該第一實例將對象劃分為多個對象組塊并且將該多個對象組塊中的第一對象組塊劃分為多個分塊。該第一實例將該多個分塊存儲在第一日志中,所述第一日志的相關(guān)聯(lián)的放置策略與第一放置策略相匹配。該第一實例存儲該第一對象的全局元數(shù)據(jù),所述全局元數(shù)據(jù)包括多個對象組塊的列表。該列表包括每個對象組塊的相應(yīng)標(biāo)識符。該第一實例存儲該第一對象組塊的本地元數(shù)據(jù),所述本地元數(shù)據(jù)包括分塊列表,所述分塊列表識別該多個分塊中的每個分塊。該本地元數(shù)據(jù)與該第一日志相關(guān)聯(lián)。該第一日志隨后依據(jù)該第一放置策略而被復(fù)制到該分布式存儲系統(tǒng)的第二實例。該全局元數(shù)據(jù)被更新以反映該復(fù)制,而該本地元數(shù)據(jù)則并不由于該復(fù)制而發(fā)生變化。
[0015]根據(jù)一些實施方式,在分布式存儲系統(tǒng)的第一實例處執(zhí)行的用于對對象復(fù)制本在該分布式存儲系統(tǒng)中的放置進(jìn)行管理的方法。該第一實例具有一個或多個服務(wù)器,每個服務(wù)器具有一個或多個處理器和存儲器。該存儲器存儲一個或多個程序以便由該一個或多個處理器所執(zhí)行。一個或多個日志被打開以用于存儲對象組塊。每個日志與單個放置策略相關(guān)聯(lián)。在一些實施方式中,每個放置策略指定了對象復(fù)制本的目標(biāo)數(shù)目以及那些復(fù)制本的目標(biāo)位置。該第一實例接收至少包括第一對象組塊的第一對象。該第一對象與第一放置策略相關(guān)聯(lián)。該第一對象組塊包括第一多個分塊。該第一實例將該第一多個分塊存儲在第一日志中,所述第一日志的相關(guān)聯(lián)的放置策略與該第一放置策略相匹配。該第一日志僅存儲其放置策略與該第一放置策略相匹配的對象的分塊。該第一實例存儲該第一對象的全局元數(shù)據(jù),其包括與該第一對象相對應(yīng)的對象組塊的第一列表。該第一列表包括該第一對象組塊的標(biāo)識符。該第一實例還存儲該第一對象組塊的本地元數(shù)據(jù),后者包括分塊列表,該分塊列表識別該第一多個分塊中的每個分塊。該本地元數(shù)據(jù)與第一日志相關(guān)聯(lián)。針對該第一日志,對第一多個對象重復(fù)該接收和存儲操作,直至發(fā)生第一終止條件,所述第一多個對象的相關(guān)聯(lián)的放置策略與所述第一放置策略相匹配。在一些實施方式中,該第一終止條件在預(yù)定時間跨度之后發(fā)生或者在該第一日志已經(jīng)超過預(yù)定大小閾值之后發(fā)生。在發(fā)生第一終止條件之后,第一日志被關(guān)閉,從而防止任何附加分塊被存儲在該第一日志中。隨后,該第一日志依據(jù)該第一放置策略而被復(fù)制到該分布式存儲系統(tǒng)的第二實例。該全局元數(shù)據(jù)被更新以反映該復(fù)制,而該本地元數(shù)據(jù)則并不由于該復(fù)制而發(fā)生變化。
【附圖說明】
[0016]圖1是根據(jù)一些實施方式的分布式存儲系統(tǒng)的概念圖示。
[0017]圖2是圖示根據(jù)一些實施方式的分布式存儲系統(tǒng)的元件的框圖。
[0018]圖3是根據(jù)一些實施方式的服務(wù)器的框圖。
[0019]圖4是根據(jù)一些實施方式的實例服務(wù)器的框圖。
[0020]圖5圖示了依據(jù)一些實施方式的用于存儲對象組塊的日志的使用。
[0021 ]圖6圖示了一些實施方式如何對新對象的存儲進(jìn)行管理。
[0022]圖7圖示了依據(jù)一些實施方式的打開的日志的結(jié)構(gòu)。
[0023]圖8圖示了依據(jù)一些實施方式的在日志從一個實例復(fù)制至另一個實例時對象元數(shù)據(jù)和日志元數(shù)據(jù)發(fā)生了什么。
[0024]圖9A-9C圖示了根據(jù)一些實施方式的管理對象復(fù)制本在分布式存儲系統(tǒng)中的放置的方法。
[0025]圖1OA和1B圖示了依據(jù)一些實施方式的對象組塊可以如何進(jìn)一步被劃分為分塊。
[0026]圖11A-11D圖示了根據(jù)一些實施方式的管理對象復(fù)制本在分布式存儲系統(tǒng)中的放置的可替換方法。
[0027]圖12圖示了依據(jù)一些實施方式的組塊在部分層級分布式存儲系統(tǒng)中的存儲。
[0028]同樣的附圖標(biāo)記貫穿附圖指代相對應(yīng)的部分。
【具體實施方式】
[0029]在討論用于管理對象在分布式存儲系統(tǒng)中的放置的技術(shù)之前,呈現(xiàn)這些技術(shù)可以在其中使用的示例性系統(tǒng)是有益的。
[0030]分布式存儲系統(tǒng)概述
[0031]如圖1中所示,所公開的實施方式描述了分布式存儲系統(tǒng)。在地球100上的各個位置處存在多個實例102-1、102-2、...102-N,它們通過網(wǎng)絡(luò)通信鏈路104-1、104-2、...104-M進(jìn)行連接。注意到,“實例”在該說明書中也被稱作“存儲位置”。還注意到,一個或多個實例(存儲位置)可以位于特定的物理位置(例如,建筑物,彼此處于預(yù)定距離之內(nèi)的建筑物集合,等等)。在一些實施方式中,實例(諸如實例102-1)與數(shù)據(jù)中心相對應(yīng)。在一些實施方式中,多個實例物理上位于相同的數(shù)據(jù)中心。單一的實施方式可以具有不同地理位置處的個體實例以及實例的一個或多個集群二者,其中每個集群包括多個實例,并且每個集群內(nèi)的實例處于單一地理位置。
[0032]雖然圖1的概念圖圖示了特定數(shù)目的網(wǎng)絡(luò)通信鏈路104-1等,但是典型的實施方式可以具有更多或更少的網(wǎng)絡(luò)通信鏈路。在一些實施方式中,在相同實例配對之間存在兩個或更多網(wǎng)絡(luò)通信鏈路。例如,網(wǎng)絡(luò)通信鏈路104-5和104-6在實例102-2和102-6之間提供網(wǎng)絡(luò)連接。在一些實施方式中,網(wǎng)絡(luò)通信鏈路包括光纖線纜。在一些實施方式中,一些網(wǎng)絡(luò)通信鏈路使用諸如微波的無線技術(shù)。在一些實施方式中,每個網(wǎng)絡(luò)通信鏈路具有指定帶寬和/或使用該帶寬的指定成本。在一些實施方式中,保持關(guān)于跨網(wǎng)絡(luò)通信鏈路中的一個或多個網(wǎng)絡(luò)通信鏈路的數(shù)據(jù)傳輸?shù)慕y(tǒng)計,包括吞吐率、可用時間、鏈路可靠性等。每個實例通常具有數(shù)據(jù)儲存器和相關(guān)聯(lián)的數(shù)據(jù)庫,并且利用服務(wù)器計算機(jī)群(farm)(如圖4所示的“實例服務(wù)器”)來執(zhí)行所有任務(wù)。在一些實施方式中,分布式存儲系統(tǒng)的一個或多個實例具有受限功能。例如,受限功能可以包括充當(dāng)其它實例之間的數(shù)據(jù)傳輸?shù)闹欣^器。注意到,受限功能的實例可以包括或不包括任意的數(shù)據(jù)儲存器。
[0033]圖2是圖示根據(jù)一些實施方式的分布式存儲系統(tǒng)200的元件的框圖。分布式存儲系統(tǒng)200包括實例102-1、102-2、102-3、102-4、-402-1相應(yīng)的實例102-1包括在實例之間復(fù)制對象組塊238的復(fù)制模塊220。在一些實施方式中,對象組塊238被存儲在相應(yīng)實例102-1的數(shù)據(jù)儲存器224中。如圖6所示,每個對象組塊238包括對象226或?qū)ο?26的一部分。數(shù)據(jù)儲存器224可以包括分布式數(shù)據(jù)庫、文件系統(tǒng)、帶式備份,以及任意其它類型的能夠存儲對象的存儲系統(tǒng)或設(shè)備。在一些實施方式中,復(fù)制模塊220使用一個或多個復(fù)制隊列222-1、222-2、…、222-L來復(fù)制對象226或日志230。對所要復(fù)制的對象或日志的復(fù)制請求被置于復(fù)制隊列222中,并且對象或日志在資源(例如,帶寬)可用時被復(fù)制。在一些實施方式中,復(fù)制隊列222中的復(fù)制請求具有所指派的優(yōu)先級,并且最高優(yōu)先級的復(fù)制請求在帶寬變?yōu)榭捎脮r被復(fù)制。
[0034]在一些實施方式中,后臺復(fù)制處理基于統(tǒng)計服務(wù)器208所提供的放置策略212和訪問數(shù)據(jù)210和/或全局狀態(tài)211而創(chuàng)建并刪除對象或日志的復(fù)制本。放置策略212指定了需要對象的多少副本、副本應(yīng)當(dāng)位于何處、以及數(shù)據(jù)應(yīng)當(dāng)被保存在何種類型的數(shù)據(jù)儲存器之中。連同統(tǒng)計服務(wù)器208所提供的訪問數(shù)據(jù)210(例如,有關(guān)訪問對象復(fù)制本的存儲位置、在存儲位置訪問對象復(fù)制本的時間、在存儲位置訪問對象的頻率等的數(shù)據(jù))和/或全局狀態(tài)211 —起使用放置策略212,位置指派守護(hù)進(jìn)程(LAD)206確定在何處創(chuàng)建對象或日志的新副本以及刪除哪些副本。當(dāng)新的副本被創(chuàng)建時,復(fù)制請求被插入到復(fù)制隊列222中。在一些實施方式中,LAD 206為分布式存儲系統(tǒng)200全局管理對象或日志的復(fù)制本。換句話說,分布式系統(tǒng)200中僅有一個LAD 206。放置策略212的使用以及LAD 206的操作在下文中進(jìn)行詳細(xì)描述。
[0035]總體上注意到,相應(yīng)的放置策略212可以指定所要保存的對象復(fù)制本的數(shù)目、復(fù)制本應(yīng)當(dāng)保存在何種類型的數(shù)據(jù)儲存器中、副本應(yīng)當(dāng)保存在哪個存儲位置,等等。在一些實施方式中,對象的相應(yīng)放置策略212包括從由以下構(gòu)成的組中選擇的準(zhǔn)則:必須存在于分布式存儲系統(tǒng)中的最小數(shù)目的對象復(fù)制本、被允許存在于分布式存儲系統(tǒng)中的最大數(shù)目的對象復(fù)制本、要在其上存儲對象復(fù)制本的存儲設(shè)備類型、可以存儲對象復(fù)制本的位置、不可以存儲對象復(fù)制本的位置、和對象的放置策略在其期間被應(yīng)用的對象年齡范圍(range ofage)。例如,第一放置策略可以指定web郵件應(yīng)用中的每個對象必須具有最少2個復(fù)制本以及最多5個復(fù)制本,其中對象復(fù)制本能夠被存儲在中國以外的數(shù)據(jù)中心,并且其中每個對象的至少一個復(fù)制本必須被存儲在磁帶上。Web郵件應(yīng)用的第二放置策略還可以針對超過30天的對象指定最少I個復(fù)制本以及最多3個復(fù)制本被存儲在分布式存儲系統(tǒng)中,其中對象的復(fù)制本能夠存儲在中國以外的數(shù)據(jù)中心,并且其中每個對象的至少一個復(fù)制本必須被存儲在磁帶上。
[0036]在一些實施方式中,用戶240與用戶系統(tǒng)242進(jìn)行交互,用戶系統(tǒng)242可以是計算機(jī)系統(tǒng)或者能夠運(yùn)行web瀏覽器244的其它設(shè)備。用戶應(yīng)用246在web瀏覽器中運(yùn)行,并且使用數(shù)據(jù)庫客戶端248所提供的功能而使用網(wǎng)絡(luò)訪問存儲在分布式存儲系統(tǒng)200中的數(shù)據(jù)。該網(wǎng)絡(luò)可以是互聯(lián)網(wǎng)、局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、無線網(wǎng)絡(luò)(WiFi)、局部內(nèi)聯(lián)網(wǎng)、或者這些網(wǎng)絡(luò)的任意組合。在一些實施方式中,數(shù)據(jù)庫客戶端248使用全局配置存儲204中的信息來識別適當(dāng)實例以對請求作出響應(yīng)。在一些實施方式中,用戶應(yīng)用246在沒有web瀏覽器244的情況下在用戶系統(tǒng)242上運(yùn)行。示例性用戶應(yīng)用包括電子郵件應(yīng)用和在線視頻應(yīng)用。
[0037]在一些實施方式中,每個實例存儲分布式存儲系統(tǒng)中所存儲的每個對象的對象元數(shù)據(jù)228。一些實例僅存儲具有存儲在該實例處的復(fù)制本的對象的對象元數(shù)據(jù)228(稱作“本地實例”)。一些實例存儲在分布式存儲系統(tǒng)中的任何地方所存儲的所有對象的對象元數(shù)據(jù)228(稱作“全局實例”)。對象元數(shù)據(jù)228參考圖3、4和5進(jìn)行更為詳細(xì)的描述。
[0038]在一些實施方式中,每個實例存儲分布式存儲系統(tǒng)200中所存儲的每個日志的日志元數(shù)據(jù)236。一些實例僅存儲具有存儲在該實例處的復(fù)制本的日志的日志元數(shù)據(jù)236。一些實例則存儲分布式系統(tǒng)中的任何地方所存儲的所有日志的日志元數(shù)據(jù)。日志元數(shù)據(jù)參考圖3、4、5和8進(jìn)行更為詳細(xì)的描述。
[0039]數(shù)據(jù)儲存器224中存儲有多種類型的日志。大部分日志是關(guān)閉的日志230。關(guān)閉的日志230并不存儲任何附加的對象組塊,但是可以使得內(nèi)容被刪除和壓縮。在一些實施方式中,相同放置策略212的兩個或更多的小型關(guān)閉的日志230能夠被拼湊在一起從而形成單個放置關(guān)閉的日志230。由于關(guān)閉的日志230內(nèi)的數(shù)據(jù)能夠被刪除并壓縮,所以關(guān)閉的日志230能夠隨時間而變得更小,并且因此變?yōu)槠礈惖暮蜻x。
[0040]除了關(guān)閉的日志230之外,實例102能夠具有打開的日志232和234。如圖2所示,打開的日志被指定為主要日志232或輔助日志234。主要日志232和輔助日志234成對出現(xiàn)并且位于不同實例處。如以下更為詳細(xì)描述的,主要日志232接收組塊238以進(jìn)行存儲并且將組塊238的副本傳送至相對應(yīng)的輔助日志234所存儲的實例處。
[0041]圖3是根據(jù)一些實施方式的服務(wù)器300的框圖。服務(wù)器300通常包括一個或多個處理單元(CHJ)302,報告當(dāng)前日期和/或時間的時鐘303、一個或多個網(wǎng)絡(luò)或其它通信接口304、存儲器314、以及一個或多個用于將這些組件互連的通信總線312。通信總線312可以包括對系統(tǒng)組件進(jìn)行互連并且對它們之間的通信加以控制的電路(有時被稱作芯片組)。在一些實施方式中,時鐘303是定期與時鐘服務(wù)器(例如,網(wǎng)絡(luò)上的仲裁時鐘服務(wù)器或者任意其它時鐘服務(wù)器等)進(jìn)行同步的本地時鐘。服務(wù)器300可選地可以包括用戶接口 306,用戶接口306包括顯示設(shè)備308和輸入設(shè)備310(例如,鍵盤、鼠標(biāo)、觸摸屏、小鍵盤等)。存儲器314包括高速隨機(jī)存取存儲器,諸如DRAM、SRAM、DDR RAM或者其它隨機(jī)存取固態(tài)存儲器設(shè)備;并且可以包括非易失性存儲器,諸如一個或多個磁盤存儲設(shè)備、光盤存儲設(shè)備、閃存設(shè)備或者其它非易失性固態(tài)存儲設(shè)備。存儲器314可選地可以包括距(一個或多個)CPU 302遠(yuǎn)程定位的一個或多個存儲設(shè)備。存儲器314或替選地存儲器314內(nèi)的(一個或多個)非易失性存儲器設(shè)備包括計算機(jī)可讀存儲介質(zhì)。在一些實施方式中,存儲器314存儲以下程序、模塊和數(shù)據(jù)結(jié)構(gòu)或者它們的子集:
[0042].操作系統(tǒng)316,其包括用于處理各種基本系統(tǒng)服務(wù)以及用于執(zhí)行依賴于硬件的任務(wù)的過程;
[0043].通信模塊318,其用于將服務(wù)器300經(jīng)由一個或多個通信接口 304(有線或無線)和一個或多個通信網(wǎng)絡(luò)連接至其它計算機(jī),上述通信網(wǎng)絡(luò)諸如互聯(lián)網(wǎng)、其它廣域網(wǎng)、局域網(wǎng)、城域網(wǎng),等等;
[0044].可選用戶接口模塊320,其經(jīng)由輸入設(shè)備310接收來自用戶的命令并且在顯示設(shè)備308中生成用戶界面對象;
[0045].如這里所描述的配置204;
[0046]?如這里所描述的LAD206;
[0047]?如這里所描述的訪問數(shù)據(jù)210;
[0048].如這里所描述的全局狀態(tài)211;
[0049]?如這里所描述的放置策略212;
[0050].在分布式存儲系統(tǒng)中所存儲的對象的對象元數(shù)據(jù)228。對象元數(shù)據(jù)228可以包括對象ID 330,其唯一地識別分布式存儲系統(tǒng)內(nèi)的對象。元數(shù)據(jù)228可以包括對象的作者332,其可以是人或?qū)嶓w的姓名和/或標(biāo)識符(例如,電子郵件地址)ο在一些實施方式中,該標(biāo)識符是唯一的。該元數(shù)據(jù)可以包括該對象被創(chuàng)建(例如,被上傳至該分布式存儲系統(tǒng))時的日期戳或時間戳334。該元數(shù)據(jù)可以包括對象的大小336,其通常以字節(jié)或分配分塊進(jìn)行衡量。該元數(shù)據(jù)包括所指派的放置策略338,其可以被單獨指派或者基于其它準(zhǔn)則進(jìn)行指派(例如,所有從美國上傳的視頻都具有相同的指派放置策略338)。放置策略的使用在下文中關(guān)于圖5-6和9A-9C進(jìn)行更為詳細(xì)地描述。元數(shù)據(jù)228包括識別每個對象的內(nèi)容組塊的組塊ID集合346。在一些實施方式中,組塊ID被指定為對象內(nèi)的偏移。例如,第一組塊具有偏移O。在一些實施方式中,該偏移以Mb進(jìn)行指定。在一些實施方式中,組塊ID是唯一標(biāo)識符(諸如GUID)。在一些實施方式中,每個組塊ID通過將對象ID與組塊的偏移級聯(lián)而形成。在一些實施方式中,組塊ID使用內(nèi)容散列或內(nèi)容摘要所形成。與每個組塊ID相對應(yīng)的是所指派的日志ID 348,其指示相對應(yīng)的組塊存儲在哪個日志中;以及
[0051].在分布式存儲系統(tǒng)200中所存儲的每個日志的日志元數(shù)據(jù)236。日志元數(shù)據(jù)236包括每個日志的日志ID 370以及該日志所存儲的日志位置372的集合。日志位置372指定了日志被存儲在那里的每個實例102并且可以指定存儲該日志的實例102處的數(shù)據(jù)儲存器224。日志元數(shù)據(jù)236還包括與每個日志相關(guān)聯(lián)的放置策略ID 374。放置策略ID 374識別與日志相關(guān)聯(lián)的唯一放置策略212。
[0052]以上所識別出的要素中的每個要素可以存儲在一個或多個先前所提到的存儲器設(shè)備中,并且與用于執(zhí)行以上所描述的功能的指令集合相對應(yīng)。該指令集合能夠由一個或多個處理器(例如,CPU 302)所執(zhí)行。以上所識別的模塊或程序(S卩,指令集合)并不需要作為分立的軟件程序、過程或模塊來實施,并且因此這些模塊的各個子集在各種實施方式中可以被組合或者以其它方式重新布置。在一些實施方式中,存儲器314可以存儲以上所識別的模塊和數(shù)據(jù)結(jié)構(gòu)的子集。此外,存儲器314可以存儲并未在上文中進(jìn)行描述的另外的模塊和數(shù)據(jù)結(jié)構(gòu)。
[0053]雖然圖3示出了“服務(wù)器”,但是與作為這里所描述的實施方式的結(jié)構(gòu)性示意相比,圖3更多地是旨在作為可以呈現(xiàn)在服務(wù)器300的集合中的各種特征的功能描述。實際上并且如本領(lǐng)域技術(shù)人員內(nèi)所認(rèn)識到的,被分別示出的項能夠被組合并且一些項能夠被分立。例如,在圖3中被分立地示出的一些項能夠在單個服務(wù)器上實施,并且單個項能夠由一個或多個服務(wù)器來實施。服務(wù)器的實際數(shù)目以及特征如何在它們之間進(jìn)行分配將隨著實施方式的不同而有所變化,并且可以部分取決于系統(tǒng)在峰值使用時間段以及平均使用時間段期間所必需處理的數(shù)據(jù)業(yè)務(wù)的量。在一些實施方式中,LAD 206、訪問數(shù)據(jù)210、全局狀態(tài)211、和放置策略212的子集位于分立的服務(wù)器上。例如,LAD 206可以位于一個服務(wù)器(或服務(wù)器集合)上,訪問數(shù)據(jù)210和全局狀態(tài)211則可以位于統(tǒng)計服務(wù)器208(或統(tǒng)計服務(wù)器208的集合)上并且由其進(jìn)行維護(hù),而放置策略212則可以位于另一個服務(wù)器(或其它服務(wù)器的集合)上。
[0054]圖4是根據(jù)一些實施方式的用于實例102的實例服務(wù)器400的框圖。實例服務(wù)器400通常包括一個或多個用于執(zhí)行模塊的處理單元(CPU)402、報告當(dāng)前日期和/或時間的時鐘403、存儲在存儲器414中并且因此執(zhí)行處理操作的程序和/或指令、一個或多個網(wǎng)絡(luò)或其它通信接口404、存儲器414、以及用于對這些組件進(jìn)行互連的一個或多個通信總線412。在一些實施方式中,時鐘403是定期與時鐘服務(wù)器(例如,網(wǎng)絡(luò)上的仲裁時鐘服務(wù)器或者任意其它時鐘服務(wù)器等)進(jìn)行同步的本地時鐘。實例服務(wù)器400可以包括用戶接口406,用戶接口406包括顯示設(shè)備408以及一個或多個輸入設(shè)備410。在一些實施方式中,儲器414包括高速隨機(jī)存取存儲器,諸如DRAM、SRAM、DDR RAM或者其它隨機(jī)訪問固態(tài)存儲器設(shè)備。在一些實施方式中,存儲器414包括非易失性存儲器,諸如一個或多個磁盤存儲設(shè)備、光盤存儲設(shè)備、閃存設(shè)備或者其它非易失性固態(tài)存儲設(shè)備。在一些實施方式中,存儲器414可以包括距(一個或多個)CPU 402遠(yuǎn)程定位的一個或多個存儲設(shè)備。存儲器414或者可替選地存儲器414內(nèi)的(一個或多個)非易失性存儲器設(shè)備包括計算機(jī)可讀存儲介質(zhì)。在一些實施方式中,存儲器414或存儲器414的計算機(jī)可讀存儲介質(zhì)存儲以下程序、模塊和數(shù)據(jù)結(jié)構(gòu)或者它們的子集:
[0055].操作系統(tǒng)416,其包括用于處理各種基本系統(tǒng)服務(wù)以及用于執(zhí)
[0056]行依賴于硬件的任務(wù)的過程;
[0057].通信模塊418,其用于將實例服務(wù)器400經(jīng)由一個或多個通信
[0058]接口404(有線或無線)和一個或多個通信網(wǎng)絡(luò)連接至其他實例服
[0059]務(wù)器或計算機(jī),上述通信網(wǎng)絡(luò)諸如互聯(lián)網(wǎng)、其它廣域網(wǎng)、局域網(wǎng)、
[0060]城域網(wǎng),等等;
[0061].可選用戶接口模塊420,其經(jīng)由輸入設(shè)備410接收來自用戶的命令并且在顯示設(shè)備408中生成用戶界面對象;
[0062].如這里所描述的復(fù)制模塊220和復(fù)制隊列222;
[0063].數(shù)據(jù)儲存器224(例如,分布式數(shù)據(jù)庫、文件系統(tǒng)、磁帶存儲、Big Table等),其存儲如關(guān)于圖3所描述的日志230、232和234中的對象組塊238;
[0064].如圖3中關(guān)于服務(wù)器300所描述的對象元數(shù)據(jù)228以及相對應(yīng)的元數(shù)據(jù)要素330-338、346和348;
[0065].如圖3中關(guān)于服務(wù)器300所描述的日志元數(shù)據(jù)326以及相對應(yīng)的日志元數(shù)據(jù)要素370、372和374。
[0066]以上所識別出的要素中的每個要素可以存儲在一個或多個先前所提到的存儲器設(shè)備中,并且與用于執(zhí)行以上所描述的功能的指令集合相對應(yīng)。該指令集合能夠由一個或多個處理器(例如,CPU 402)所執(zhí)行。以上所識別的模塊或程序(S卩,指令集合)并不需要作為分立的軟件程序、過程或模塊來實施,并且因此這些模塊的各個子集在各種實施方式中可以被組合或者以其它方式重新布置。在一些實施方式中,存儲器414可以存儲以上所識別的模塊和數(shù)據(jù)結(jié)構(gòu)的子集。此外,存儲器414可以存儲并未在上文中進(jìn)行描述的另外的模塊和數(shù)據(jù)結(jié)構(gòu)。
[0067]雖然圖4示出了“實例服務(wù)器”,但是與作為這里所描述的實施方式的結(jié)構(gòu)性示意相比,圖4更多地是旨在作為可以呈現(xiàn)在實例服務(wù)器400的集合中的各種特征的功能描述。實際上并且如本領(lǐng)域技術(shù)人員內(nèi)所認(rèn)識到的,被分別示出的項能夠被組合并且一些項能夠被分立。例如,在圖4中被分立示出的一些項能夠在單個服務(wù)器上實施,并且單個項能夠由一個或多個服務(wù)器來實施。服務(wù)器的實際數(shù)目以及特征如何在它們之間進(jìn)行分配將隨著實施方式的不同而有所變化,并且可以部分取決于系統(tǒng)在峰值使用時間段以及平均使用時間段期間所必需處理的數(shù)據(jù)業(yè)務(wù)的量。例如,在單個實例102處可能存在一百個實例服務(wù)器400或者數(shù)千個實例服務(wù)器400。
[0068]在一些實施方式中,為了對客戶端提供更快的響應(yīng)并且提供容錯,在實例處所運(yùn)行的每個程序或處理在多個計算機(jī)之間進(jìn)行分布。被分配至程序中的每個程序或處理的實例服務(wù)器400的數(shù)目可以有所變化并且取決于工作負(fù)荷。
[0069]圖5圖示了依據(jù)一些實施方式的用于存儲對象組塊的日志的使用。圖5示出了數(shù)據(jù)儲存器224以及對象元數(shù)據(jù)228的一部分和日志元數(shù)據(jù)236的一部分,它們?nèi)慷继幱谑纠膶嵗?02處。數(shù)據(jù)儲存器224中存儲了許多日志230、232和234,從而在二維網(wǎng)格中對它們進(jìn)行視覺組織是有用的(當(dāng)然,視覺顯示與日志在數(shù)據(jù)儲存器中的實際物理存儲無關(guān)。)。在圖中,日志被劃分為多個日志的“行”,其中每一行與單一的放置策略212相對應(yīng)。例如,第一行502-P1與放置策略Pl (212)相對應(yīng),并且包括關(guān)閉的日志230、打開的日志232、和打開的輔助日志234。第一行502-P1中的所有這些日志都與放置策略Pl相關(guān)聯(lián)。第二行502-P2與放置策略P2 (212)相對應(yīng),并且最后一行502-PN與放置策略PN( 212)相對應(yīng)。通常,放置策略的數(shù)目很小,諸如10、20、50或者可能100。當(dāng)放置策略的數(shù)目增加時,對象復(fù)制本的管理就變得不太有效。
[0070]在圖5中,數(shù)據(jù)儲存器224中的日志還在視覺上被劃分為兩列。第一列識別出關(guān)閉的日志230,其是日志中的大多數(shù)。第二列包括打開的主要日志232和打開的輔助日志234。如每個日志中的各個矩形238所圖示,每個日志(無論是關(guān)閉的230、打開的主要日志232、還是打開的輔助日志234)都包含對象組塊238。對象組塊可以是各種大小,但是實施方式通常設(shè)置固定的最大大小(例如,2Mb、4Mb或8Mb)。日志內(nèi)的對象組塊238的圖示正確地傳達(dá)了日志存儲各種大小的許多對象組塊的事實,但是卻并非表示對象組塊的實際物理存儲(例如,在對象組塊之間通常并沒有未使用的空間,因為每個新的對象組塊238都附加于未分配空間的開頭)。
[0071]圖5圖示了打開的日志232和234的各種組合對于每種放置策略都是可能的。為了在附圖和這里的描述中識別出不同的日志復(fù)制本,有時使用了三個部分的標(biāo)簽,諸如“232.P4.7”。第一部分(例如,“232” )識別日志的類型(230 =關(guān)閉,232 =打開主要,234 =打開輔助);第二部分(例如,“P4”)指定日志的放置策略;并且第三部分(例如,“7”)則僅指定日志的順序編號(例如,“232.P4.7”中的“7”指定了放置策略P4的第七個打開的日志)。
[0072]如圖5所示,對于放置策略Pl而言,存在單個打開的主要日志232.Pl.1而不存在打開的輔助日志。對于放置策略P2而言,存在兩個打開的主要日志232.P2.1和232.P2.2。對于放置策略PN而言,存在一個打開的主要日志232.PN.1以及一個打開的輔助日志234.PN.10如這些示例所圖示的,打開的主要日志232和打開的輔助日志234的數(shù)目可以在放置策略之間有所變化,并且通?;诿糠N放置策略212的預(yù)期數(shù)目的新對象226以及那些對象226的所期望位置而針對每種策略212進(jìn)行配置。
[0073]如先前關(guān)于圖3所描述的,每個實例102還存儲對象元數(shù)據(jù)228和日志元數(shù)據(jù)236二者。對于每個對象226,對象元數(shù)據(jù)228包括對象ID 330 (其唯一地識別對象)、從對象中識別對象組塊238的一個或多個組塊ID 346的集合、以及與每個組塊ID 236相關(guān)聯(lián)的所指定日志ID 348。當(dāng)對象具有多個組塊238時,組塊238并非必然全部被存儲在相同日志中(例如,為了負(fù)載平衡),從而對象元數(shù)據(jù)228必須對為每個組塊ID 346所指定的日志ID 348進(jìn)行追足示O
[0074]每個實例102還針對在該實例102處所存儲的每個日志存儲日志元數(shù)據(jù)236。元數(shù)據(jù)236包括每個日志的日志ID 370、以及位置372的集合。在一些實施方式中,位置ID識別日志在那里進(jìn)行存儲的實例。在一些實施方式中,位置ID還識別所指定實例處的數(shù)據(jù)儲存器。在一些實施方式中,實例標(biāo)識符和數(shù)據(jù)儲存器標(biāo)識符針對每個日志作為分立屬性進(jìn)行存儲。在一些實施方式中,日志可以被存儲在單個實例處的兩個或更多數(shù)據(jù)儲存器中(例如,文件系統(tǒng)數(shù)據(jù)儲存器和磁帶備份數(shù)據(jù)儲存器)。日志元數(shù)據(jù)236還包括放置策略ID 374,放置策略ID 374指定與每個日志相對應(yīng)的唯一放置策略212。每個日志僅存儲其放置策略338與該日志的放置策略相匹配的對象組塊238。
[0075]圖6圖示了一些實施方式如何對新對象226的存儲進(jìn)行管理。如圖6所示,每個新對象都具有對象內(nèi)容(即,對象226自身)以及對象ID 330(例如,58440912)和所指定的放置策略330(例如,P3)。新對象226能夠來自于許多不同的應(yīng)用246,諸如在線電子郵件應(yīng)用、視頻分享網(wǎng)站等。分布式存儲系統(tǒng)200接收新對象226并且將新對象226指向(602)適當(dāng)實例,諸如實例102-1。在一些實施方式中,應(yīng)用246將新對象226指向具體實例102-1。當(dāng)應(yīng)用246所選擇的實例102-1并不適當(dāng)時,一些實施方式將對象226轉(zhuǎn)發(fā)至適當(dāng)?shù)膶嵗?例如,如果放置策略212指定在歐洲沒有存儲,并且對象226在歐洲的實例處被接收,則該實例能夠?qū)ο?26轉(zhuǎn)發(fā)至另一個實例)。
[0076]雖然大多數(shù)對象具有適度的大小(例如,小于300Kb ),但是存在一些大型的對象。一些實施方式將大型對象分割(604)為多個組塊238??傮w上,每種實施方式設(shè)置組塊大小或者具有用于設(shè)置組塊大小的可配置參數(shù),上述組塊大小通常被指定為為數(shù)個Mb(例如,2、
4、8、16或32Mb)。每個大于組塊大小的對象都被分割為多個組塊,并且每個大小等于或小于組塊大小的對象則由單個組塊所構(gòu)成。在圖6的圖示中,存在三個組塊C1、C2和C3。在該圖示中,組塊中的每個組塊具有7個字符的字母數(shù)字組塊ID 346,但是可能有許多唯一地識別每個對象內(nèi)的組塊的可替選組塊ID格式。在一些實施方式中,組塊ID 346使用內(nèi)容散列或內(nèi)容摘要來生成。
[0077]在一些實施方式中,能夠存在許多對象復(fù)制品(例如,被發(fā)送至人群,隨后被轉(zhuǎn)發(fā)至許多另外的人的電子郵件附件),如此解除復(fù)制對于有效存儲而言會是有用的。因此,在一些實施方式中,將每個新組塊238的內(nèi)容與現(xiàn)有對象組塊238進(jìn)行比較(606)(例如,使用內(nèi)容散列或內(nèi)容摘要)以僅在打開的主要日志中存儲(606)“新”組塊238。如圖5所示,組塊C2是新的并且與放置策略P3相對應(yīng),如此組塊C2被存儲在與放置策略P3相對應(yīng)的打開的主要日志232.P3.1中。當(dāng)然,解除復(fù)制僅是在放置策略的場境內(nèi)進(jìn)行。如果兩個組塊是相同的但是被指定至不同的放置策略,則這兩個組塊將被保存在不同的日志中。換句話說,當(dāng)接收到新的組塊時,其僅與相同放置策略的組塊進(jìn)行比較。僅在針對相同放置策略已經(jīng)保存了相同組塊的時候,組塊才是“復(fù)制品”。
[0078]無論對象組塊C2是否是新的,實例102-1都存儲(608)組塊238的元數(shù)據(jù)228。如先前關(guān)于圖3-5所描述的,元數(shù)據(jù)228包括對象ID 330、組塊ID 346、以及每個組塊所存儲于的日志的日志ID 348。在一些實施方式中,對象組塊238的組塊ID 346僅是對對象內(nèi)的組塊238的起始的偏移。圖6中所示的對象元數(shù)據(jù)228還圖示了單個對象的組塊并不需要在相同日志中進(jìn)行存儲。組塊Cl和C3(組塊ID C190056和C098663)處于具有日志ID J77298045的日志232.P3.2中,而組塊C2(組塊ID C250116)則處于具有日志ID J82117094的日志232.P3.1 中。
[0079]組塊C2被傳送(610)至實例102-2以用于在輔助日志234.P3.1中進(jìn)行存儲,而組塊Cl和C3則被傳送(612)至實例102-2以用于在輔助日志234.P3.2中進(jìn)行存儲。
[0080]圖6還圖示了主要日志232無需在物理上與其相對應(yīng)的輔助日志相同。首先,我們看到組塊Cl和C3在主要日志232.P3.2中以該順序進(jìn)行存儲,而這些組塊在輔助日志232.P3.2中則以逆序進(jìn)行存儲。在日志被打開時,個體組塊238可以被獨立復(fù)制、經(jīng)過不同的網(wǎng)絡(luò)路徑、或者被不同的處理器402所處理,從而并不保證它們以相同的順序被加載到輔助日志232.P3.2中。可能存在不同順序的事實被如以下關(guān)于圖7所描述的每個日志內(nèi)的組塊索引所處理。此外,主要日志232.P3.1指示存在有在圖中被標(biāo)記為“G”的垃圾“組塊”620。在上傳期間,有時可能出現(xiàn)消耗空間的故障或失靈。例如,在上傳期間,可能針對對象分配空間,但是組塊并未被實際附加。軟件重新嘗試上傳,這為該組塊分配新的空間。這會在日志232內(nèi)留下空洞或垃圾。在這種情況下,垃圾620并不被傳送至輔助日志,如此主要日志在物理上不同于輔助日志。
[0081]圖7圖示了依據(jù)一些實施方式的打開的日志的結(jié)構(gòu)。雖然圖7描述了打開的主要日志232,但是打開的輔助日志234的結(jié)構(gòu)將會是相同或相似的。日志232具有頭部702以及存儲空間714的分塊。存儲空間714包括已經(jīng)存儲有對象組塊238的填充部分710以及當(dāng)前還未使用的未填充部分712。這些描述符由于一些原因并不是完全準(zhǔn)確的。首先,“填充”空間710可能包括沒有有用內(nèi)容的垃圾部分620。第二,未使用空間并非必然全部在相同時間分配。一些實施方式并不對日志一次分配整個空間,并且在其被填充時關(guān)閉日志(潛在地在尾部留下少量未使用空間)。但是在其它實施方式中,按照需要分配額外空間的分塊,直至日志達(dá)到某個大小極限或者已經(jīng)過去了某個時間量(例如,一天)。
[0082]日志的頭部702包含有關(guān)日志232的重要內(nèi)部信息。頭部702包括指定未使用空間712在日志中何處開始的字段704。每次將新的組塊238附加至填充空間710的尾部,偏移704就被增加以該組塊238的大小而使得日志232準(zhǔn)備存儲下一個組塊。
[0083]頭部702還包括組塊索引706。日志232的組塊索引706指定了每個組塊238在日志232中位于何處以及其大小,這使得能夠快速讀取組塊數(shù)據(jù)(無論是從非易失性存儲還是從高速緩存)。組塊索引706的關(guān)鍵所在是組塊ID 346,其唯一識別組塊。注意到,多個不同對象ID 330可以指代相同的組塊。為了避免具有指向相同對象組塊238的許多條目的龐大的組塊索引704,實施方式通常采用帶個組塊ID來指代相同的物理內(nèi)容。例如,組塊ID 346可以是內(nèi)容散列或內(nèi)容摘要(或者這些的組合)。針對每個組塊ID 346,組塊索引720指定了組塊238在存儲空間714內(nèi)的偏移720和大小722。偏移720可以被指定為距日志232開頭的偏移或者距填充空間710開頭的偏移。在一些實施方式中,組塊索引具有附加信息,諸如隨后在刪除組塊以及壓縮填充空間710時鎖使用的刪除標(biāo)記。
[0084]頭部702還可以包含其它日志數(shù)據(jù)708以解決實施方式的細(xì)節(jié)問題。例如,其它日志數(shù)據(jù)708可以指定從日志開頭到存儲空間714開頭的偏移(S卩,頭部的大小)。在一些實施方式中,其它日志數(shù)據(jù)包括被指定為具短壽命的日志的“存活時間”參數(shù)。
[0085]雖然圖7中的日志結(jié)構(gòu)是針對打開的主要日志232,但是相同的基本結(jié)構(gòu)也應(yīng)用于打開的輔助日志234和關(guān)閉的日志230。
[0086]圖8圖示了依據(jù)一些實施方式的在日志從一個實例復(fù)制至另一個實例時對象元數(shù)據(jù)228和日志元數(shù)據(jù)236發(fā)生了什么。在該圖示中,具有日志ID J82117094的關(guān)閉的日志230從實例102-1(具有實例ID = 723)被復(fù)制(820)到實例102-4(具有實例ID 428)。由于日志230自身作為一個單位被復(fù)制,所以整個內(nèi)容都完全被復(fù)制。例如,組塊C8(具有組塊IDC408335)在日志內(nèi)處于完全相同的位置。當(dāng)然,在復(fù)制之后,實例102-1和102-4獨立地處理刪除和壓縮,如此它們的物理結(jié)構(gòu)在復(fù)制之后并不保證保持相同。
[0087]圖8還示出了復(fù)制820之前和之后的對象元數(shù)據(jù)228和日志元數(shù)據(jù)236的一部分。如所指示的,對象元數(shù)據(jù)228中的記錄802-814并不被復(fù)制820所改變。每個對象226具有相同的組塊238,并且組塊238被存儲在相同的日志230中。例如,具有組塊ID C408335(在行804中)的組塊并未被改變。另一方面,具有日志ID J82117094(370-1)的日志230的日志元數(shù)據(jù)236發(fā)生了變化。日志位置372的集合從372-1 (A)變?yōu)?72-1 (B),372-1 (B)包括新的位置428(針對實例102-4)。
[0088]圖9A-9C圖示了根據(jù)一些實施方式的管理(902)對象復(fù)制本在分布式存儲系統(tǒng)200中的放置的方法900。該方法在分布式存儲系統(tǒng)中具有一個或多個處理器和存儲器的第一實例102處執(zhí)行(904)。存儲器對多個對象進(jìn)行存儲(906)。該存儲器還存儲(908)一個或多個程序以用于由一個或多個處理器所執(zhí)行。在一些實施方式中,方法900的全部或部分由位置指派守護(hù)進(jìn)程206所執(zhí)行。在一些實施方式中,分布式存儲系統(tǒng)具有(910)多個實例。在這些實施方式中的一些實施方式中,至少一個實例子集處于(910)不同的地理位置。在一些實施方式中,每個實例與一個數(shù)據(jù)中心相對應(yīng)。在一些實施方式中,每個數(shù)據(jù)中心包括一個或多個實例。
[0089]在第一實例處,一個或多個日志232被打開(912)以用于存儲對象組塊。每個日志與單個相應(yīng)的放置策略212相關(guān)聯(lián)(914)。在一些實施方式中,每個放置策略指定(926)目標(biāo)數(shù)目的對象復(fù)制本以及目標(biāo)復(fù)制本的目標(biāo)位置集合。在一些實施方式中,放置策略212可以指定在一些實例處使用何種類型的數(shù)據(jù)儲存器224(例如,在磁盤上或者在磁帶上)。在一些實施方式中,分布式存儲系統(tǒng)200包括(918)對象元數(shù)據(jù)228,對象元數(shù)據(jù)228指定每個對象組塊238存儲在哪個日志中。這在先前關(guān)于圖3-5進(jìn)行了描述。在一些實施方式中,每個相應(yīng)日志包括(920)指定每個對象在相應(yīng)日志中所存儲的位置的組塊索引706。這在圖7中進(jìn)行了更詳細(xì)的描述。特別地,日志內(nèi)的每個組塊的位置被相對于日志本身來識別,并且因此組塊索引706是準(zhǔn)確的而不管該日志在哪里存儲。例如,通過將日志內(nèi)的組塊的位置指定為偏移,組塊能夠通過相對尋址來訪問。
[0090]所公開的實施方式通常包括(922)指定每個日志所存儲于的位置372的日志元數(shù)據(jù)236。這在先前在圖3-5和8中進(jìn)行了描述。
[0091]打開的主要日志232和打開的輔助日志234的分布取決于許多因素,包括可用實例102、放置策略212、利用放置策略212的新對象226的預(yù)期分布、新對象從何處加載(例如,歐洲、北美、亞洲)、每個可用實例102處的處理資源,以及各個實例間的網(wǎng)絡(luò)帶寬。例如,如果許多對象將利用具體實例處的具體放置策略進(jìn)行上傳,則多個日志針對該實例處的相同放置策略而被打開(924)。在一些情況下,當(dāng)負(fù)載平衡所需要時,在單個實例102處針對相同的放置策略212可能有5、10或者更多的打開的日志。
[0092]如先前關(guān)于圖5和6所描述的,一些實施方式向分布式存儲系統(tǒng)200的第三實例傳送(916)消息以打開與在第一實例處所打開的日志相對應(yīng)的日志。在這種情況下,在第一實例處打開的日志232被稱作主要日志而在第三實例處打開的日志234則被稱作輔助日志。(當(dāng)然,第一實例也可以具有輔助日志且第三實例則可以具有主要日志。)
[0093]在第一實例102處,接收(928)第一對象226,其包括(928)至少一個第一對象組塊。這在以上關(guān)于圖6進(jìn)行了描述。第一對象226與第一放置策略212相關(guān)聯(lián),并且因此包括對象226的所有對象組塊238都與第一放置策略212相關(guān)聯(lián)。第一對象組塊238被存儲(930)在第一日志232中,第一日志232的相關(guān)聯(lián)的放置策略與第一放置策略212相匹配。第一日志232僅存儲(932)其放置策略與該第一放置策略相匹配的對象的對象分塊。在一些實施方式中,第一日志232中所存儲的每個對象組塊238被傳送(934)至第三實例以在第一日志234中進(jìn)行存儲。
[0094]當(dāng)所接收到的對象大于組塊大小時,該對象被劃分為多個組塊238。在這種情況下,第一對象226包括(936)兩個或更多對象組塊。通常,第二對象組塊不同于(936)第一對象組塊。(在單個對象內(nèi)具有兩個相同組塊是少見的,但是可能發(fā)生,例如在對象具有非常大部分的空閑空間的情況下)。在一些情形中,第二對象組塊被存儲(938)在不同于第一日志的第二日志232中,第二日志232的相關(guān)聯(lián)的放置策略與第一放置策略相匹配。第二日志僅存儲(938)其放置策略與第一放置策略相匹配的對象的對象組塊。以這種方式,包括許多組塊的對象能夠具有跨許多不同日志分布的組塊。
[0095]接收對象226以及在第一日志232中存儲組塊238的處理針對其相關(guān)聯(lián)的放置策略338與第一放置策略212相匹配的多個對象226進(jìn)行重復(fù),直至發(fā)生第一終止條件。在一些實施方式中,該第一終止條件在第一日志的大小超過預(yù)定閾值時(942)發(fā)生。在一些實施方式中,該第一終止條件在第一日志已經(jīng)被打開達(dá)預(yù)定時間范圍時(944)發(fā)生。一些實施方式以各種方式對大小和時間進(jìn)行組合。例如,一些實施方式指定了時間跨度和大小限制二者,并且終止條件是其中首先發(fā)生的任何一個。
[0096]在發(fā)生第一終止條件之后,第一日志被關(guān)閉(946),從而防止任何另外的對象組塊被存儲在第一日志232中。通常,實施方式在關(guān)閉第一日志之前確認(rèn)相同放置策略的其它日志232仍然打開(或者新的日志被打開)。由于新的對象會在任意時刻到達(dá),所以使打開的日志可用于存儲是重要的。當(dāng)在另一個實例處存在相對應(yīng)的輔助日志234時,第一實例在發(fā)生第一終止條件時向其它實例傳送(948)消息以關(guān)閉相對應(yīng)的輔助日志。
[0097]在第一日志232被關(guān)閉之后,該日志受到其放置策略的影響。滿足放置策略212可以要求移動日志復(fù)制本、形成日志復(fù)制本的新的副本、或者刪除日志復(fù)制本。在一些情形中,第一日志232依據(jù)放置策略212而被復(fù)制(950)至分布式存儲系統(tǒng)200的第二實例102。(在其它情形中,第一日志的復(fù)制本被刪除。)在具有主要和輔助的打開的日志232和234的實施方式中,一旦它們被關(guān)閉將存在兩個等同的關(guān)閉的日志230。因此,任一個復(fù)制本都能夠被用作復(fù)制950的源。當(dāng)復(fù)制950發(fā)生時(S卩,作為事務(wù)的一部分),第一日志的日志元數(shù)據(jù)236就被更新(952)以指示第二實例處存在該日志的副本。這在以上關(guān)于圖8進(jìn)行了描述。
[0098]在日志230被關(guān)閉之后,對象組塊238可以被刪除。例如,對象可以與電子郵件的附件相對應(yīng)。如果電子郵件的接收方刪除了該電子郵件,則附件的存儲能夠被刪除。在一段時間之后,每個日志內(nèi)由于刪除而出現(xiàn)空洞,并且因此將日志進(jìn)行壓縮以移除浪費(fèi)空間是有用的。這類似于易失性存儲器的碎片化以及用于將未使用的空間整合為更大的連續(xù)分塊的碎片整理的處理。
[0099]由于所存儲的對象組塊可以與許多不同的對象(例如,數(shù)百個、數(shù)千個或者數(shù)百個)相對應(yīng),所以日志中的對象組塊能夠僅在不存在針對其的引用的情況下被刪除。因此,一旦第一關(guān)閉的日志230被選擇(954),則處理900就識別(956)存儲在第一關(guān)閉的日志230中的對象元數(shù)據(jù)228中沒有針對其的引用的一個或多個對象組塊。針對這些所識別的組塊238,組塊索引706被更新(958)以移除相對應(yīng)的記錄。在一些實施方式中,先前被分配給所識別的對象組塊的空間被覆寫(例如,每個字節(jié)被設(shè)置為ASCII O),但是在其它實施方式中,該空間僅是不再被引用。在一些實施方式中,被解除分配的存儲空間作為其它日志數(shù)據(jù)708的一部分而被追蹤。例如,一些實施方式保存被解除分配的存儲空間的列表(例如,偏移和大小),或者將被解除分配的空間作為鏈表進(jìn)行追蹤。
[0100]在一些實施方式中,垃圾收集算法定期運(yùn)行以壓縮(960)所關(guān)閉的日志中的每個。壓縮處理將所存儲的對象組塊整合(960)為連續(xù)分塊,因此減小了日志230的大小。隨著時間,日志230會由于更多對象組塊被刪除而變小。管理許多小的日志具有類似于管理個體對象的開銷,并且因此弱化了日志存儲的好處。為了解決該問題,一些實施方式將兩個或更多關(guān)閉的日志拼湊(962)在一起以形成單個替換日志,并且更新(962)對象元數(shù)據(jù)228以指示先前存儲在兩個或更多日志中的對象組塊現(xiàn)在存儲在該替換日志中。由于拼湊操作需要形成完全新的日志并且針對所涉及的全部對象更新元數(shù)據(jù),所以拼湊通常被局限于日志已經(jīng)變得相對小的情形。
[0101]圖1OA和1B圖示了用于在分布式存儲系統(tǒng)中存儲對象和相關(guān)聯(lián)的元數(shù)據(jù)的兩種實施方式。圖1OA所圖示的實施方式是完全分層的:每個對象被分割為一個或多個組塊,并且每個組塊被分割為一個或多個分塊。注意到,該結(jié)構(gòu)即使在僅存在一個組塊或者僅存在一個分塊時也是分層的。在另一方面,圖1OB所圖示的實施方式是部分分層的。在該實施方式中,一些組塊是“超級組塊”,其指的是分塊的列表。例如,超級組塊可以具有100個分塊、1000個分塊或者甚至更多分塊的分塊列表。并非超級組塊的組塊僅是一個分塊。也就是說,該組塊標(biāo)識符是指對象數(shù)據(jù)的實際存儲而不是分塊的列表。這種混合方式在包括小型對象(其中不需要層級)和非常大的對象的分布式存儲系統(tǒng)中會是有用的,其中存儲層級更為有效。
[0102]如圖2-4所圖示,全局元數(shù)據(jù)1002包括對象元數(shù)據(jù)228和日志元數(shù)據(jù)236。在一些實施方式中,每個組塊ID 346被指派以解密密鑰1040,其被用來對組塊的數(shù)據(jù)進(jìn)行解密。在這些實施方式中,相同的解密密鑰將針對被分割為多個分塊的那些組塊而被應(yīng)用于那些組塊中的所有分塊。每個組塊具有其自己的解密密鑰1040,其有效唯一的。一些實施方式在生成新的密鑰時保證唯一性,但是一些實施方式則隨機(jī)生成新的密鑰,而密鑰的重復(fù)是非常不可能出現(xiàn)的。解密密鑰1040與被用來在新對象被存儲時用于對其進(jìn)行加密的加密密鑰相對應(yīng)。由于需要解密密鑰1040來訪問每個對象組塊,所以刪除解密密鑰能夠被用作對象組塊的“軟”刪除。當(dāng)解密密鑰消失時,被加密的存儲就變?yōu)椤袄?,并且實際數(shù)據(jù)無法被訪問。這能夠在壓縮之間允許更多次垃圾收集算法,并且垃圾收集處理能夠在其運(yùn)行時恢復(fù)更多的存儲空間。
[0103]圖1OA中還圖示了日志232(其被示為是打開的)以及相對應(yīng)的本地元數(shù)據(jù)1004。在一些實施方式中,日志232的本地元數(shù)據(jù)1004作為頭部702的一部分而被存儲在日志自身之中。在其它實施方式中,日志的本地元數(shù)據(jù)1004被存儲為單獨的文件(或者存儲在數(shù)據(jù)庫等之中)并且與日志相關(guān)聯(lián)。用于非層級存儲的日志232的結(jié)構(gòu)在以上關(guān)于圖7進(jìn)行了圖示。在該實施方式中,不同于存儲組塊,存儲的基本單位是分塊1016,諸如分塊1016-1、1016-
2、-"、10164。每種實施方式通常指定最大的分塊大小,諸如21&、41&、81&或者161&。
[0104]如以上所提到的,本地元數(shù)據(jù)1004可以被存儲在日志232的頭部702中,或者可以被分立地存儲。針對每個組塊標(biāo)識符346,存在相對應(yīng)的分塊列表1006 (通常是唯一的分塊列表),其包括一個或多個分塊標(biāo)識符1008。針對小型組塊,分塊列表1006可以包含單個分塊標(biāo)識符1008。本地元數(shù)據(jù)1004還包括分塊索引11,其指定每個分塊位于日志232內(nèi)的何處。在一些實施方式中,分塊的位置由偏移和大小進(jìn)行指定。分塊偏移1012在一些實施方式中是距存儲空間714的開頭的偏移或者是針對日志文件232的開頭的偏移。通常,分塊大小1014以字節(jié)進(jìn)行指定,但是其它實施方式使用替選大小的基本單位(例如,2字節(jié)、4字節(jié)或8字節(jié))。本地元數(shù)據(jù)的一個方面在于其在日志被移動或者復(fù)制至另一個實例時并不發(fā)生變化:組塊的分塊列表1006保持相同、分塊ID 1008保持相同、日志內(nèi)的分塊偏移1012保持相同、并且分塊大小保持相同。
[0105]圖1OB類似于圖1OA,但是圖示了部分層級的結(jié)構(gòu)。在圖1OB的部分層級結(jié)構(gòu)中,全局元數(shù)據(jù)1002包括“超級組塊”字段1020,其指示每個組塊是常規(guī)分塊還是指分塊列表(SP,是超級組塊)。在一些實施方式中,大多數(shù)對象是小的,由單個組塊所構(gòu)成。在這種情況下,組塊ID 346直接識別組塊/分塊索引1024中的分塊。也就是說,組塊ID 346是組塊/分塊ID1026。因此,對于并非超級組塊的組塊而言,組塊ID 346能夠被用來查找組塊/分塊索引1024中的適當(dāng)記錄以找出日志232中的相對應(yīng)分塊1016的偏移1028和大小1030。
[0106]針對超級組塊而言,組塊ID 346是(超級)組塊ID 1022,其能夠在本地元數(shù)據(jù)1004中進(jìn)行查找。與超級組塊ID 1002相對應(yīng)的是分塊列表1006,其包括分塊ID 1008的集合。在這種情況下,每個分塊ID能夠在組塊/分塊索引1024中進(jìn)行查找以針對超級組塊ID 1022識別出組塊列表1006中的每個組塊ID 1026的偏移1028和大小1030。如前所述,偏移1028和大小1030識別出實際分塊存儲在日志232的存儲空間714中的位置。超級組塊因此具有額外的層級級別,但是減少了在全局元數(shù)據(jù)1002中所存儲的組塊元數(shù)據(jù)的量。這使得將分片從一個實例移動至另一個實例更為容易且更加有效。
[0107]圖11A-11D圖示了根據(jù)一些實施方式的管理(1102)對象復(fù)制本在分布式存儲系統(tǒng)200中的放置的方法1100。該方法在分布式存儲系統(tǒng)中具有一個或多個處理器和存儲器的第一實例102處執(zhí)行(1104)。該存儲器存儲(1106)—個或多個程序以用于由一個或多個處理器執(zhí)行。在一些實施方式中,方法1100的全部或部分由位置指派守護(hù)進(jìn)程206所執(zhí)行。在一些實施方式中,分布式存儲系統(tǒng)具有(1108)多個實例。在這些實施方式中的一些中,至少一個實例子集處于(1108)不同的地理位置。在一些實施方式中,每個實例對應(yīng)于一個數(shù)據(jù)中心。在一些實施方式中,每個數(shù)據(jù)中心包括一個或多個實例。
[0108]在第一實例處,一個或多個日志232被打開(1110)以用于存儲對象組塊。每個日志與單個相應(yīng)的放置策略212相關(guān)聯(lián)(1112)。在一些實施方式中,每個放置策略指定(1122)目標(biāo)數(shù)目的對象復(fù)制本以及對象復(fù)制本的目標(biāo)位置集合。在一些實施方式中,放置策略212可以指定在一些實例處使用何種類型的數(shù)據(jù)儲存器224(例如,在盤上或者在帶上)。在一些實施方式中,分布式存儲系統(tǒng)200包括(1114)對象元數(shù)據(jù)228(全局元數(shù)據(jù)1002的一部分),對象元數(shù)據(jù)228指定每個對象組塊238存儲在哪個日志中。這在先前關(guān)于圖3-5、10A和1B進(jìn)行了描述。在一些實施方式中,每個相應(yīng)日志包括(1116)指定每個分塊在相應(yīng)日志中所存儲的位置的分塊索引1010或1026。這在圖7(非層級)、10A和1B中進(jìn)行了更為詳細(xì)的描述。特別地,每個分塊1016在日志232中的位置相對于日志自身被識別,并且因此分塊索引1010或1026無論日志232存儲在何處都是準(zhǔn)確的。例如,通過將分塊1016在日志232內(nèi)的位置指定為偏移,分塊1016能夠通過相對尋址而被訪問。
[0109]所公開的實施方式通常包括(1118)日志元數(shù)據(jù)236(全局元數(shù)據(jù)1002的一部分),其指定了每個日志所存儲的位置372。這先前在圖3-5和8中進(jìn)行了描述。
[0110]打開的主要日志232和打開的輔助日志234的分布取決于許多因素,包括可用實例102、放置策略212、利用放置策略212的新對象226的預(yù)期分布,新對象從何處加載(例如,歐洲、北美、亞洲)、每個可用實例102處的處理資源、以及各個實例間的網(wǎng)絡(luò)帶寬。例如,如果許多對象將利用特定實例處的特定放置策略進(jìn)行更新,則多個日志針對該實例處的相同放置策略而被打開(1020)。在一些情況下,當(dāng)負(fù)載平衡所需要時,在單個實例102處針對相同的放置策略212可以存在5、10或者更多個打開的日志。
[0111]在第一實例102處,接收(1124)第一對象226,其包括(1124)至少第一對象組塊。這在以上關(guān)于圖6進(jìn)行了描述。第一對象226與第一放置策略212相關(guān)聯(lián)(1124),并且因此包括對象226的所有對象組塊238都與第一放置策略212相關(guān)聯(lián)。如以上關(guān)于圖1OA和1B所描述的,第一對象組塊包括(1126)第一多個分塊。在一些實施方式中,處理1100接收(1124)已經(jīng)被劃分為組塊和分塊的對象238。例如,分割可以由上傳該對象的客戶端設(shè)備執(zhí)行。在其它實施方式中,處理1100接收(1124)作為流的對象并且根據(jù)所存儲的準(zhǔn)則(例如,目標(biāo)分塊和組塊大小、可用的打開的日志、可用實例、可用帶寬等)將該對象分割為組塊和分塊。在一些實施方式中,在仍然接收對象的數(shù)據(jù)的同時執(zhí)行組塊的動態(tài)分配,而其它實施方式則僅在接收到整個對象會后才將對象分割為分塊和組塊。
[0112]組塊和分塊的層級能夠以各種方式并且基于諸如對象大小之類的各種因素來形成。在一些實施方式中,該層級在上傳處理期間動態(tài)構(gòu)建。例如,第一對象組塊被創(chuàng)建、并且數(shù)據(jù)流被分割為分塊,所述分塊則被分配至第一對象組塊直至閾值數(shù)目的分塊被分配至該組塊。此時,第二組塊被創(chuàng)建、并且新的分塊被添加至該第二組塊。在另一種實施方式中,數(shù)據(jù)的流作為初始存儲的分塊被存儲,并且當(dāng)不存在更多分塊時,分塊被分組為組塊。
[0113]在一些實施方式中,每個對象組塊238包括(1128)—個或多個分塊。這在以上關(guān)于圖1OA進(jìn)行了圖示。在一些實施方式中,全局元數(shù)據(jù)1002包括(1130)指定每個對象組塊238是分塊還是分塊列表的字段。這在以上的圖1OB中有所圖示。在一些實例中,第一對象組塊是(1132)分塊列表(S卩,超級組塊),而第二組塊則是(1132)常規(guī)分塊(并非超級組塊)。
[0114]第一多個分塊1016被存儲(1134)在第一日志232中,第一日志232的相關(guān)聯(lián)的放置策略與第一放置策略212相匹配。第一日志232僅存儲(1136)其放置策略與第一放置策略相匹配的對象的分塊。
[0115]當(dāng)所接收到的對象大于指定大小(例如,組塊大小或分塊大小)時,該對象被分割為多個組塊238和/或多個分塊1016。在一些實例中,第一對象226包括(1138)兩個或更多對象組塊。通常,第二對象組塊不同于(1138)第一對象組塊。(在單個對象內(nèi)具有兩個相同組塊是少見的,但是可能發(fā)生,例如在對象具有非常大部分的空閑空間的情況下)。在一些實施方式中,第二對象組塊被存儲(1140)在不同于第一日志的第二日志232中,第二日志232的相關(guān)聯(lián)的放置策略與第一放置策略相匹配。第二日志僅存儲(1140)其放置策略與第一放置策略相匹配的對象的對象組塊。以這種方式,包括許多組塊的對象能夠具有跨許多不同日志分布的組塊。
[0116]在一些實施方式中,該處理對每個對象組塊的數(shù)據(jù)進(jìn)行加密(1142),并且將每個對象組塊的解密密鑰存儲(1142)在全局元數(shù)據(jù)中,這在以上的圖1OA和1B中有所圖示。在一些實施方式中,當(dāng)組塊被劃分為多個分塊時,該組塊內(nèi)的每個分塊被利用相同的加密密鑰進(jìn)行加密,并且因此能夠被利用相同的解密密鑰進(jìn)行解密。在其它實施方式中,每個分塊具有其自己的解密密鑰,其作為塊索引1010或1026的一部分被存儲。在將解密密鑰1040存儲在全局元數(shù)據(jù)1002的實施方式中,分塊實際上能夠通過刪除(1144)解密密鑰而簡單地被刪除。該組塊由于無法獲取到原始組塊的數(shù)據(jù)而不能被訪問。這提供了一些優(yōu)勢。首先,刪除組塊是快速且有效的。第二,由于不存在訪問被刪除數(shù)據(jù)的實際風(fēng)險,所以能夠?qū)嵤└鼮橛行У睦占幚?。特別地,垃圾收集能夠以適當(dāng)?shù)拈g隔進(jìn)行調(diào)度,并且能夠?qū)谋P對存儲的物理刪除進(jìn)行批處理。由于壓縮是資源密集型處理,所以能夠?qū)⒃S多刪除分批在一起顯著提高了效率。第三,一些實施方式并不需要物理擦除存儲空間,因為被加密的“無用數(shù)據(jù)”無法被轉(zhuǎn)換回有意義的內(nèi)容。
[0117]處理1100存儲(1146)第一對象的全局元數(shù)據(jù)。這在以上的圖3-5、10A和1B中進(jìn)行了圖示。全局元數(shù)據(jù)1002包括(1148)與第一對象相對應(yīng)的對象組塊第一列表。特別地,該第一列表包括(1150)第一對象組塊238的對象標(biāo)識符330。全局元數(shù)據(jù)1002還識別每個組塊所存儲于的日志以及每個日志的位置。
[0118]除了全局元數(shù)據(jù)1002之外,還針對每個日志232存儲本地元數(shù)據(jù)1004。在一些實施方式中,每個日志的本地元數(shù)據(jù)1004被存儲在日志232自身的頭部702中。在其它實施方式中,本地元數(shù)據(jù)1004與日志分立地存儲。當(dāng)被分立地存儲時,每個日志的本地元數(shù)據(jù)1004可以被分立地存儲(例如,與每個日志相對應(yīng)的不同的元數(shù)據(jù)文件),或者本地元數(shù)據(jù)可以被分組在一起(例如,在數(shù)據(jù)庫中)。
[0119]第一實例存儲(1152)第一對象組塊238的本地元數(shù)據(jù)1004。本地元數(shù)據(jù)1004包括(1154)識別第一多個分塊中的每個分塊的分塊列表。注意到,該分塊列表被存儲在本地元數(shù)據(jù)1004中而不是全局元數(shù)據(jù)1002中。存儲在本地元數(shù)據(jù)1004中的分塊列表1006追蹤分塊如何在每個日志內(nèi)進(jìn)行分配。第一日志232的本地兀數(shù)據(jù)與第一日志232相關(guān)聯(lián)(1156)。在一些實施方式中,本地元數(shù)據(jù)與日志的關(guān)聯(lián)通過將本地元數(shù)據(jù)存儲在日志中來執(zhí)行,這使得日志更為自足。在一些實施方式中,日志232的本地元數(shù)據(jù)被分立地存儲(例如,在分立的文件中)并且與日志相關(guān)聯(lián)(例如,通過將日志ID 370包括在日志的名稱以及相關(guān)聯(lián)的元數(shù)據(jù)文件的名稱中)。在將本地元數(shù)據(jù)存儲在數(shù)據(jù)庫的實施式中,日志ID 370通常是元數(shù)據(jù)表格的主鍵的一部分。
[0120]接收對象226以及在第一日志232中存儲組塊238的處理針對多個對象226進(jìn)行重復(fù)(1158),直至發(fā)生第一終止條件,多個對象226的相關(guān)聯(lián)的放置策略338與第一放置策略212相匹配。在一些實施方式中,該第一終止條件在第一日志的大小超過預(yù)定閾值時(1160)發(fā)生。在一些實施方式中,該第一終止條件在第一日志已經(jīng)被打開達(dá)預(yù)定時間跨度時(1162)發(fā)生。一些實施方式以各種方式對大小和時間進(jìn)行組合。例如,一些實施方式指定了時間跨度和大小限制,并且終止條件是其中先行發(fā)生的任何一個。
[0121 ]在發(fā)生終止條件之后,第一日志被關(guān)閉(I 164),從而防止任何另外的對象組塊被存儲在第一日志232中。通常,實施方式在關(guān)閉第一日志之前確認(rèn)相同放置策略的其它日志232仍然打開(或者新的日志被打開)。由于新的對象會在任意時刻到達(dá),所以使打開的日志可用于存儲是重要的。
[0122]在第一日志232被關(guān)閉之后,該日志受到其放置策略的影響。滿足放置策略212可以要求移動日志復(fù)制本、形成日志復(fù)制本的新的副本、或者刪除日志復(fù)制本。在一些情形中,第一日志232依據(jù)放置策略212而被復(fù)制(1166)至分布式存儲系統(tǒng)200的第二實例102。(在其它情形中,第一日志的復(fù)制本被刪除。)在具有主要和輔助的打開的日志232和234的實施方式中,一旦它們被關(guān)閉將存在兩個等同的關(guān)閉的日志230。因此,任一個復(fù)制本都能夠被用作復(fù)制950的來源。當(dāng)復(fù)制1166發(fā)生時(S卩,作為事務(wù)的一部分),第一日志的全局元數(shù)據(jù)1002就被更新(1168)以指示第二實例處存在該日志的副本。另一方面,通過該復(fù)制,本地元數(shù)據(jù)1104是未變化的(1168)。這在以上關(guān)于圖8、10A和1B進(jìn)行了描述。
[0123]在日志230被關(guān)閉之后,對象組塊238可以被刪除。例如,對象可以與電子郵件的附件相對應(yīng)。如果電子郵件的接收方刪除了該電子郵件,則附件的存儲能夠被刪除。在一段時間之后,每個日志內(nèi)由于刪除而出現(xiàn)空洞,并且因此將日志進(jìn)行壓縮以移除浪費(fèi)空間是有用的。這類似于易失性存儲器的碎片化以及用于將未使用的空間整合為更大的連續(xù)存儲的碎片整理的處理。
[0124]由于所存儲的對象組塊可以與許多不同的對象(例如,數(shù)百個、數(shù)千個或者數(shù)百個)相對應(yīng),所以日志中的對象組塊能夠僅在不存在針對其的引用的情況下被刪除。因此,一旦第一關(guān)閉的日志230被選擇(1170),則處理1100就識別(1172)存儲在第一關(guān)閉的日志230中的對象元數(shù)據(jù)228中沒有針對其的引用的一個或多個對象組塊。在一些實施方式中,垃圾收集算法定期運(yùn)行以壓縮(1174)每個所關(guān)閉的日志。壓縮處理將所存儲的對象組塊整合(1174)為連續(xù)分塊,因此減小了日志230的大小。
[0125]隨著時間,日志230會由于更多對象組塊被刪除而變小。管理許多小的日志具有類似于管理個體對象的開銷,并且因此弱化了日志存儲的好處。為了解決該問題,一些實施方式將兩個或更多關(guān)閉的日志拼湊(1176)在一起以形成單個替換日志,并且更新(1176)對象元數(shù)據(jù)228以指示先前存儲在兩個或更多日志中的對象組塊現(xiàn)在存儲在該替換日志中。由于拼湊操作需要形成完全新的日志并且針對所涉及的全部對象更新元數(shù)據(jù),所以拼湊通常被局限于日志已經(jīng)變得相對小的情形。
[0126]圖12圖示了依據(jù)如先前關(guān)于圖1OB所圖示的一些實施方式的在分布式存儲系統(tǒng)中存儲組塊的示例。在該示例中,示出了兩個組塊238-1和238-2。組塊238-1是常規(guī)組塊(SP,并非超級組塊),其具有組塊ID 346-1。由于組塊238-1是常規(guī)組塊,所以其能夠直接在組塊/分塊索引1024中進(jìn)行查找。在該圖示中,組塊/分塊索引1024被存儲在該數(shù)據(jù)所存儲的日志232的頭部702中。針對該組塊/分塊,偏移1028是y(1028-y)。使用該偏移,能夠在存儲空間714中找到相對應(yīng)的分塊B 1016-B。
[0127]然而,組塊238-2是具有(超級)組塊ID 346_2的超級組塊。如這里所圖示的,超級組塊238-2指向分塊列表表格1006中的條目。針對每個超級組塊ID 1022,存在多個相對應(yīng)的分塊ID 1008。圖12圖示了兩個相對應(yīng)的分塊1008-1和1008-2,但是對于非常大的對象而言,對于單個組塊可以存在非常大量的分塊。分塊ID 1008-1和1008-2隨后在組塊/分塊索引1024中被查找以找出分塊的偏移1028-x和1028-z。最后,使用偏移1028-x和1028-z,在存儲空間714中定位相對應(yīng)的分塊1016-A和1016-C。在該示例中,這兩個分塊并不是連續(xù)的,并且實際上組塊238-1的分塊1016-B隔開了組塊238-2的兩個分塊。當(dāng)然,每個分塊的大小也被使用從而針對每個分塊僅讀取適當(dāng)數(shù)據(jù)。這在以上關(guān)于圖1OB進(jìn)行了描述。
[0128]并不允許常規(guī)組塊(諸如組塊238-1)的實施方式是完全分層的。還注意到,組塊和分塊之間的分配基于實施方式或者其它動態(tài)因素而有所變化。例如,相同對象能夠被存儲為具有100個分塊的單個組塊,或者均具有25個分塊的四個組塊。一些實施方式基于來自實際使用的經(jīng)驗反饋而改變組塊的數(shù)目。
[0129]已經(jīng)出于解釋的目的而參考【具體實施方式】進(jìn)行了以上描述。然而,以上的說明性討論并非旨在是窮舉的或者將本發(fā)明限制為所公開的確切形式??紤]到以上教導(dǎo)可能進(jìn)行許多修改和變化。實施方式被選擇并描述以便對本發(fā)明的原則及其實際應(yīng)用進(jìn)行最佳地解釋,以因此如適用于所預(yù)期的特定使用的而使得本領(lǐng)域技術(shù)人員能夠?qū)Ρ景l(fā)明以及具有各種修改的各種實施方式最佳地加以利用。
【主權(quán)項】
1.一種用于管理對象復(fù)制本在分布式存儲系統(tǒng)中的放置的方法,包括: 在具有一個或多個處理器和存儲器的所述分布式存儲系統(tǒng)的第一實例處,其中所述存儲器存儲一個或多個程序以用于由所述一個或多個處理器執(zhí)行: 接收與第一放置策略相關(guān)聯(lián)的第一對象,其中,所述第一放置策略指定了所述第一對象的復(fù)制本在所述分布式存儲系統(tǒng)中存儲于何處的準(zhǔn)則; 將所述對象分割為多個對象組塊并且將所述多個對象組塊中的第一對象組塊分割為多個分塊; 將所述多個分塊存儲在第一日志中,所述第一日志的相關(guān)聯(lián)放置策略與所述第一放置策略相匹配; 存儲所述第一對象的全局元數(shù)據(jù),其中,所述全局元數(shù)據(jù)包括所述多個對象組塊的列表,并且其中,所述列表包括每個所述對象組塊的相應(yīng)標(biāo)識符;存儲所述第一對象組塊的本地元數(shù)據(jù),其中,所述本地元數(shù)據(jù)包括分塊列表,所述分塊列表識別所述多個分塊中的每個分塊,并且其中,所述本地元數(shù)據(jù)與所述第一日志相關(guān)聯(lián);依據(jù)所述第一放置策略,將所述第一日志復(fù)制到所述分布式存儲系統(tǒng)的第二實例,其中,所述全局元數(shù)據(jù)被更新以反映所述復(fù)制,而通過所述復(fù)制,所述本地元數(shù)據(jù)是未變化的。2.根據(jù)權(quán)利要求1所述的方法,其中,所述全局元數(shù)據(jù)包括指定每個對象組塊是分塊還是分塊列表的字段,并且其中,第二對象組塊是分塊且第一對象組塊是分塊列表。3.根據(jù)權(quán)利要求1所述的方法,其中,所述全局元數(shù)據(jù)指定每個對象組塊存儲在哪個日志中,并且每個相應(yīng)日志復(fù)制本包括分塊索引,所述分塊索引指定所述相應(yīng)日志復(fù)制本中所存儲的每個分塊的位置。4.根據(jù)權(quán)利要求1-3中任一項所述的方法,進(jìn)一步包括,在所述第一實例處: 選擇第一關(guān)閉的日志的復(fù)制本; 識別所述復(fù)制本中所存儲的一個或多個對象組塊,在所述全局元數(shù)據(jù)中不存在針對所述一個或多個對象組塊的引用;以及 對所述復(fù)制本進(jìn)行壓縮,從而將所述復(fù)制本中所存儲的分塊整合為連續(xù)存儲。5.根據(jù)權(quán)利要求1-3中任一項所述的方法,其中,所述分布式存儲系統(tǒng)具有處于不同地理位置的多個實例。6.根據(jù)權(quán)利要求1-3中任一項所述的方法,其中,每個對象組塊的數(shù)據(jù)被加密,并且每個對象組塊的解密密鑰被存儲在所述全局元數(shù)據(jù)中,所述方法進(jìn)一步包括:通過從所述全局元數(shù)據(jù)刪除對應(yīng)的解密密鑰而實際上刪除對象組塊,從而使所述對象的數(shù)據(jù)成為不可訪問的。7.—種用于管理對象復(fù)制本在分布式存儲系統(tǒng)中的放置的方法,包括: 在具有一個或多個處理器和存儲器的所述分布式存儲系統(tǒng)的第一實例處,其中所述存儲器存儲一個或多個程序以用于由所述一個或多個處理器執(zhí)行: 打開一個或多個日志以用于存儲對象組塊,其中,每個相應(yīng)日志與單個相應(yīng)放置策略相關(guān)聯(lián); 接收第一對象,所述第一對象至少包括第一對象組塊,其中,所述第一對象與第一放置策略相關(guān)聯(lián),并且其中,所述第一對象組塊包括第一多個分塊; 將所述第一多個分塊存儲在第一日志中,所述第一日志的相關(guān)聯(lián)放置策略與所述第一放置策略相匹配,其中,所述第一日志僅存儲放置策略與所述第一放置策略相匹配的對象的分塊; 存儲所述第一對象的全局元數(shù)據(jù),其中,所述全局元數(shù)據(jù)包括與所述第一對象相對應(yīng)的對象組塊的第一列表,并且其中,所述第一列表包括所述第一對象組塊的標(biāo)識符; 存儲所述第一對象組塊的本地元數(shù)據(jù),其中,所述本地元數(shù)據(jù)包括分塊列表,所述分塊列表識別所述第一多個分塊中的每個分塊,并且其中,所述本地元數(shù)據(jù)與所述第一日志相關(guān)聯(lián); 針對所述第一日志,對第一多個對象重復(fù)所述接收和存儲操作,直至發(fā)生第一終止條件,所述第一多個對象的相關(guān)聯(lián)放置策略與所述第一放置策略相匹配; 在發(fā)生所述第一終止條件之后,關(guān)閉所述第一日志,從而防止任何另外的分塊被存儲在所述第一日志中;以及 依據(jù)所述第一放置策略,將所述第一日志復(fù)制到所述分布式存儲系統(tǒng)的第二實例,其中,所述全局元數(shù)據(jù)被更新以反映所述復(fù)制,而通過所述復(fù)制,所述本地元數(shù)據(jù)是未變化的。8.根據(jù)權(quán)利要求7所述的方法,其中,每個對象組塊包括一個或多個分塊。9.根據(jù)權(quán)利要求7所述的方法,其中,所述全局元數(shù)據(jù)包括指定每個對象組塊是分塊還是分塊列表的字段。10.根據(jù)權(quán)利要求9述的方法,其中,第二對象組塊是分塊,并且所述第一組塊是分塊列表。11.根據(jù)權(quán)利要求7-10中任一項所述的方法,其中,所述第一對象包括兩個或更多對象組塊,包括不同于所述第一對象組塊的第二對象組塊,并且其中,所述第二對象組塊被存儲在不同于所述第一日志的第二日志中,其相關(guān)聯(lián)放置策略與所述第一放置策略相匹配。12.根據(jù)權(quán)利要求7-10中任一項所述的方法,其中,所述全局元數(shù)據(jù)指定每個對象組塊被存儲在哪個日志中,并且每個相應(yīng)日志復(fù)制本包括分塊索引,所述分塊索引指定所述相應(yīng)日志復(fù)制本中所存儲的每個分塊的位置。13.根據(jù)權(quán)利要求7-10中任一項所述的方法,進(jìn)一步包括,在所述第一實例處: 選擇第一關(guān)閉的日志的復(fù)制本; 識別所述復(fù)制本中所存儲的一個或多個對象組塊,在所述全局元數(shù)據(jù)中不存在針對所述一個或多個對象組塊的引用;以及 對所述復(fù)制本進(jìn)行壓縮,從而將所述復(fù)制本中所存儲的分塊整合為連續(xù)存儲。14.根據(jù)權(quán)利要求7-10中任一項所述的方法,其中,每個放置策略指定對象復(fù)制本的目標(biāo)數(shù)目以及對象復(fù)制本的目標(biāo)位置集合。15.根據(jù)權(quán)利要求7-10中任一項所述的方法,其中,所述分布式存儲系統(tǒng)具有處于不同地理位置的多個實例。16.根據(jù)權(quán)利要求7-10中任一項所述的方法,每個對象組塊的數(shù)據(jù)被加密,并且每個對象組塊的解密密鑰被存儲在所述全局元數(shù)據(jù)中。17.根據(jù)權(quán)利要求16所述的方法,進(jìn)一步包括:通過從所述全局元數(shù)據(jù)刪除對應(yīng)的解密密鑰而實際上刪除對象組塊,從而使所述對象的數(shù)據(jù)成為不可訪問的。18.—種用于管理對象復(fù)制本在分布式存儲系統(tǒng)中的放置的計算機(jī)系統(tǒng),所述分布式存儲系統(tǒng)具有多個實例,每個相應(yīng)實例包括: 一個或多個處理器; 存儲器;以及 存儲在所述存儲器中的一個或多個程序,所述一個或多個程序包括指令,所述指令能夠由所述一個或多個處理器執(zhí)行以執(zhí)行根據(jù)權(quán)利要求1-6中任一項所述的方法。19.一種用于管理對象復(fù)制本在分布式存儲系統(tǒng)中的放置的計算機(jī)系統(tǒng),所述分布式存儲系統(tǒng)具有多個實例,每個相應(yīng)實例包括: 一個或多個處理器; 存儲器;以及 存儲在所述存儲器中的一個或多個程序,所述一個或多個程序包括指令,所述指令能夠由所述一個或多個處理器執(zhí)行以執(zhí)行根據(jù)權(quán)利要求7-17中任一項所述的方法。20.—種其中存儲有程序的非暫時性計算機(jī)可讀存儲介質(zhì),所述程序用于管理對象復(fù)制本在分布式存儲系統(tǒng)中的放置,所述分布式存儲系統(tǒng)具有多個實例,每個相應(yīng)實例包括:一個或多個處理器以及存儲器;所述一個或多個程序包括指令,所述指令能夠由所述一個或多個處理器執(zhí)行以執(zhí)行根據(jù)權(quán)利要求1-6中任一項所述的方法。21.—種其中存儲有程序的非暫時性計算機(jī)可讀存儲介質(zhì),所述程序用于管理對象復(fù)制本在分布式存儲系統(tǒng)中的放置,所述分布式存儲系統(tǒng)具有多個實例,每個相應(yīng)實例包括:一個或多個處理器以及存儲器;所述一個或多個程序包括指令,所述指令能夠由所述一個或多個處理器執(zhí)行以執(zhí)行根據(jù)權(quán)利要求7-17中任一項所述的方法。
【文檔編號】G06F17/30GK105940396SQ201480074231
【公開日】2016年9月14日
【申請日】2014年12月24日
【發(fā)明人】亞歷山大·克塞爾曼, 邁克爾·奧賴?yán)? 喬治·達(dá)圖阿什維利, 亞歷山大·德羅貝切夫
【申請人】谷歌公司