基于擦除編碼機制的分布式存儲系統(tǒng)及其存儲方法
【專利摘要】提供一種基于擦除編碼機制的分布式存儲系統(tǒng)及其存儲方法。所述分布式存儲系統(tǒng),包括:管理層系統(tǒng),包括多個節(jié)點裝置,用于對寫入的數(shù)據(jù)執(zhí)行擦除編碼,并將擦除編碼后的數(shù)據(jù)提供給存儲底層系統(tǒng);存儲底層系統(tǒng),包括多個存儲服務(wù)器,用于分布地存儲擦除編碼后的數(shù)據(jù);其中,數(shù)據(jù)在存儲底層系統(tǒng)中的索引信息以副本的形式被分別存儲在所述多個節(jié)點裝置中的N個節(jié)點裝置中,其中,N為大于1的整數(shù)。通過上述方式,可降低分布式存儲所需的空間,并確??煽啃?。
【專利說明】基于擦除編碼機制的分布式存儲系統(tǒng)及其存儲方法
【技術(shù)領(lǐng)域】
[0001]本申請涉及存儲技術(shù),更具體地說,涉及一種基于擦除編碼機制來分布式地存儲數(shù)據(jù)的存儲系統(tǒng)及其存儲方法。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,實現(xiàn)可靠的海量數(shù)據(jù)存儲變?yōu)橐粋€巨大的挑戰(zhàn)。目前,互聯(lián)網(wǎng)中的后端存儲系統(tǒng)多采用三副本機制(例如,鍵值對(key-value)分布式存儲系統(tǒng)),從而在三個不同位置分別對數(shù)據(jù)進行存儲以提高數(shù)據(jù)存儲的可靠性。例如,針對權(quán)限管理、命名空間、文件對象的數(shù)據(jù)和元數(shù)據(jù)均可被存放在云端的存儲系統(tǒng),其中,每份云存儲的數(shù)據(jù)或元數(shù)據(jù)被分別存儲在三臺不同的存儲服務(wù)器上。
[0003]然而,基于三副本機制的分布式存儲系統(tǒng)具有以下缺點:
[0004]1、存儲成本過高。由于數(shù)據(jù)被存儲在三個不同的位置,所以冗余數(shù)據(jù)占用了大約66.7%的存儲空間。隨著存儲數(shù)據(jù)量的增加,將會造成嚴重的存儲空間冗余。以互聯(lián)網(wǎng)的云端存儲為例,假設(shè)當前的用戶數(shù)據(jù)已經(jīng)接近4PB之多,那么,由于冗余數(shù)據(jù)的存在,當前實際的存儲容量將超過10PB。而隨著云存儲的用戶數(shù)不斷增加,預(yù)計在2014年底,用戶數(shù)據(jù)將超過200PB,如果繼續(xù)采用三副本機制,冗余數(shù)據(jù)所耗費的成本將達到無法容忍的地步。
[0005]2、數(shù)據(jù)的一致性較弱。由于后端存儲系統(tǒng)采用三副本機制,所以在存儲系統(tǒng)中剛寫入的數(shù)據(jù)內(nèi)容可能需要過段時間才能被客戶端讀到。這會增加用戶在使用基于上述存儲方式的應(yīng)用時的復(fù)雜度。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的在于提供一種基于擦除編碼機制來分布式地存儲數(shù)據(jù)的存儲系統(tǒng)及其存儲方法。
[0007]根據(jù)本發(fā)明的一方面,提供一種基于擦除編碼機制的分布式存儲系統(tǒng),包括:管理層系統(tǒng),包括多個節(jié)點裝置,用于對寫入的數(shù)據(jù)執(zhí)行擦除編碼,并將擦除編碼后的數(shù)據(jù)提供給存儲底層系統(tǒng);存儲底層系統(tǒng),包括多個存儲服務(wù)器,用于分布地存儲擦除編碼后的數(shù)據(jù);其中,數(shù)據(jù)在存儲底層系統(tǒng)中的索引信息以副本的形式被分別存儲在所述多個節(jié)點裝置中的N個節(jié)點裝置中,其中,N為大于I的整數(shù)。
[0008]在所述分布式存儲系統(tǒng)中,N可以為3。
[0009]在所述分布式存儲系統(tǒng)中,寫入的數(shù)據(jù)可以指基于鍵值對的數(shù)據(jù)條目。
[0010]在所述分布式存儲系統(tǒng)中,管理層系統(tǒng)還可包括:節(jié)點管理裝置,用于根據(jù)數(shù)據(jù)的寫入請求來指定執(zhí)行數(shù)據(jù)寫入的節(jié)點裝置,并根據(jù)數(shù)據(jù)的讀取請求來搜索執(zhí)行了所述數(shù)據(jù)的寫入操作的節(jié)點裝置。
[0011]在所述分布式存儲系統(tǒng)中,存儲底層系統(tǒng)還可包括:元數(shù)據(jù)服務(wù)器,用于存儲元數(shù)據(jù),其中,所述元數(shù)據(jù)指示擦除編碼后的數(shù)據(jù)如何分布地存儲于多個存儲服務(wù)器。
[0012]在所述分布式存儲系統(tǒng)中,節(jié)點管理裝置可根據(jù)數(shù)據(jù)的寫入請求來指定執(zhí)行數(shù)據(jù)寫入的主節(jié)點裝置及其副節(jié)點裝置。
[0013]在所述分布式存儲系統(tǒng)中,節(jié)點裝置可包括:日志單元,用于臨時存儲寫入的數(shù)據(jù),直到寫入的數(shù)據(jù)達到預(yù)定的塊大??;內(nèi)存單元,用于與日志單元鏡像地存儲寫入的數(shù)據(jù),接口單元,用于當節(jié)點裝置作為主節(jié)點裝置時,如果內(nèi)存單元中寫入的數(shù)據(jù)達到塊大小,則對所述塊大小的數(shù)據(jù)執(zhí)行擦除編碼,并將擦除編碼后的數(shù)據(jù)提供給存儲底層系統(tǒng);索引存儲單元,用于持久地存儲數(shù)據(jù)在存儲底層系統(tǒng)的索引信息,其中,所述索引信息指示數(shù)據(jù)條目中的值數(shù)據(jù)在存儲底層系統(tǒng)中所對應(yīng)的塊。
[0014]在所述分布式存儲系統(tǒng)中,節(jié)點管理裝置可進行控制以將數(shù)據(jù)寫入主節(jié)點裝置和副節(jié)點裝置的日志單元和內(nèi)存單元,當寫入主節(jié)點裝置的內(nèi)存單元的數(shù)據(jù)達到塊大小時,主節(jié)點裝置的接口單元從它的內(nèi)存單元中取出寫入的塊大小的數(shù)據(jù),將所述塊大小的數(shù)據(jù)劃分為k個部分數(shù)據(jù),對k個部分數(shù)據(jù)執(zhí)行擦除編碼,以得到由k+m個部分數(shù)據(jù)組成的擦除編碼后的塊,并將擦除編碼后的塊所包括的k+m個部分數(shù)據(jù)分別寫入存儲底層系統(tǒng)中的k+m個存儲服務(wù)器,其中,k和m為整數(shù),兩者的關(guān)系符合擦除編碼機制,其中,元數(shù)據(jù)指示分布地存儲所述k+m個部分數(shù)據(jù)的k+m個存儲服務(wù)器。
[0015]在所述分布式存儲系統(tǒng)中,當主節(jié)點裝置的接口單元從它的內(nèi)存單元中取出寫入的塊大小的數(shù)據(jù)時,主節(jié)點裝置和副節(jié)點裝置的日志單元和內(nèi)存單元可清空并重新開始寫入數(shù)據(jù)。
[0016]在所述分布式存儲系統(tǒng)中,節(jié)點管理裝置可根據(jù)數(shù)據(jù)的讀取請求來搜索執(zhí)行了所述數(shù)據(jù)的寫入操作的主節(jié)點裝置,所述主節(jié)點裝置從存儲的所述數(shù)據(jù)的索引信息確定數(shù)據(jù)條目中的值數(shù)據(jù)在存儲底層系統(tǒng)中所對應(yīng)的塊,并將所述塊告知元數(shù)據(jù)服務(wù)器,元數(shù)據(jù)服務(wù)器根據(jù)存儲的所述塊的元數(shù)據(jù)來確定分布地存儲與所述塊對應(yīng)的k+m個部分數(shù)據(jù)的k+m個存儲服務(wù)器,主節(jié)點裝置分別從所述k+m個存儲服務(wù)器中的至少一個存儲服務(wù)器讀取與數(shù)據(jù)條目對應(yīng)的部分數(shù)據(jù)。
[0017]在所述分布式存儲系統(tǒng)中,當主節(jié)點裝置無法讀取所有與數(shù)據(jù)條目對應(yīng)的部分數(shù)據(jù)時,主節(jié)點裝置可僅讀取所述塊中的k個部分數(shù)據(jù),并基于擦除編碼機制來恢復(fù)其余m個部分數(shù)據(jù)。
[0018]所述分布式存儲系統(tǒng)可應(yīng)用于云端存儲。
[0019]根據(jù)本發(fā)明的另一方面,提供一種基于擦除編碼機制的分布式存儲方法,包括:在管理層系統(tǒng)對寫入的數(shù)據(jù)執(zhí)行擦除編碼;將擦除編碼后的數(shù)據(jù)分布地存儲于存儲底層系統(tǒng)中的多個存儲服務(wù)器;將數(shù)據(jù)在存儲底層系統(tǒng)中的索引信息以副本的形式分別存儲在管理層系統(tǒng)所包括的多個節(jié)點裝置中的N個節(jié)點裝置中,其中,N為大于I的整數(shù)。
[0020]根據(jù)本發(fā)明的示例性實施例,可使得分布式數(shù)據(jù)存儲的冗余度符合擦除編碼機制,從而節(jié)省存儲空間,并且,通過以副本的形式存儲索引信息來確保數(shù)據(jù)存儲的可靠性。
【專利附圖】
【附圖說明】
[0021]通過下面結(jié)合附圖對本發(fā)明示例性實施例的描述,本發(fā)明的上述和其它目的和特點將會變得更加清楚,其中:
[0022]圖1示出根據(jù)本發(fā)明示例性實施例的基于擦除編碼機制的分布式存儲系統(tǒng)的框圖;[0023]圖2示出根據(jù)本發(fā)明示例性實施例的基于擦除編碼機制的分布式存儲方法的流程圖;
[0024]圖3示出根據(jù)本發(fā)明示例性實施例的節(jié)點裝置的框圖;
[0025]圖4示出根據(jù)本發(fā)明示例性實施例的元數(shù)據(jù)的示例;
[0026]圖5示出根據(jù)本發(fā)明示例性實施例的基于擦除編碼機制來寫入數(shù)據(jù)的方法的流程圖;
[0027]圖6示出根據(jù)本發(fā)明示例性實施例的基于擦除編碼機制來讀取數(shù)據(jù)的方法的流程圖。
【具體實施方式】
[0028]現(xiàn)將詳細參照本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中,相同的標號始終指的是相同的部件。以下將通過參照附圖來說明所述實施例,以便解釋本發(fā)明。
[0029]圖1示出根據(jù)本發(fā)明示例性實施例的基于擦除編碼機制的分布式存儲系統(tǒng)的框圖。參照圖1,根據(jù)本發(fā)明示例性實施例的分布式存儲系統(tǒng)包括:管理層系統(tǒng)10和存儲底層系統(tǒng)20,其中,管理層系統(tǒng)10包括多個節(jié)點裝置,用于對寫入的數(shù)據(jù)執(zhí)行擦除編碼,并將擦除編碼后的數(shù)據(jù)提供給存儲底層系統(tǒng)20 ;存儲底層系統(tǒng)20包括多個存儲服務(wù)器,用于分布此存儲擦除編碼后的數(shù)據(jù)。這里,數(shù)據(jù)在存儲底層系統(tǒng)中的索引信息以副本的形式被分別存儲在所述多個節(jié)點裝置中的N個節(jié)點裝置中,其中,N為大于I的整數(shù)。這里,作為優(yōu)選示例,N可以是3。作為優(yōu)選示例,圖1所示的分布式存儲系統(tǒng)可應(yīng)用于云端存儲,但本發(fā)明并不受限于云端存儲。
[0030]以下將參照圖2來描述根據(jù)本發(fā)明示例性實施例的基于擦除編碼機制的分布式存儲方法。參照圖2,在步驟S10,在管理層系統(tǒng)對寫入的數(shù)據(jù)執(zhí)行擦除編碼。這里,擦除編碼是本領(lǐng)域技術(shù)人員已知的通過加入冗余來進行編碼的算法,例如,當對k個有效數(shù)據(jù)部分執(zhí)行擦除編碼時,可獲得(k+m)個編碼后的數(shù)據(jù)部分,其中,m個校驗部分被添加到k個有效數(shù)據(jù)部分,這里,k和m為整數(shù),兩者之間的關(guān)系符合所采用的擦除編碼機制。
[0031]作為優(yōu)選示例,寫入的數(shù)據(jù)可指的是基于鍵值對(key-value)的數(shù)據(jù)條目。在基于鍵值對的數(shù)據(jù)條目中,包括值(value)數(shù)據(jù)(對應(yīng)于待寫入的有效數(shù)據(jù))和相應(yīng)的鍵(key)數(shù)據(jù)(用于檢索值數(shù)據(jù))兩者。在這種情況下,可通過以基于鍵值對的數(shù)據(jù)條目為單位來劃分將被存儲的數(shù)據(jù)內(nèi)容,從而獲得將要寫入分布式存儲系統(tǒng)的各個數(shù)據(jù)條目。
[0032]然而,本領(lǐng)域技術(shù)人員應(yīng)知曉,根據(jù)本發(fā)明示例性實施例的分布式存儲系統(tǒng)及其方法并不受限于鍵值對數(shù)據(jù),而是可根據(jù)所應(yīng)用的環(huán)境來讀寫各種格式的數(shù)據(jù)。
[0033]接下來,在步驟S20,將擦除編碼后的數(shù)據(jù)分布地存儲于存儲底層系統(tǒng)中的多個存儲服務(wù)器。例如,可將擦除編碼后的(k+m)個數(shù)據(jù)部分分別存儲在(k+m)個存儲服務(wù)器中。由于數(shù)據(jù)采用分布式存儲,且冗余度遵循擦除編碼機制,因此,與傳統(tǒng)的三副本存儲機制相比,可有效地節(jié)省數(shù)據(jù)的存儲空間。
[0034]然后,在步驟S30,將數(shù)據(jù)在存儲底層系統(tǒng)中的索引信息以副本的形式分別存儲在管理層系統(tǒng)所包括的多個節(jié)點裝置中的N個節(jié)點裝置中。由此可見,在根據(jù)本發(fā)明示例性實施例的分布式存儲系統(tǒng)中,索引信息以副本的形式分布地存儲在管理層系統(tǒng)中的N個節(jié)點裝置中,使得在降低數(shù)據(jù)冗余度的情況下保證數(shù)據(jù)的可靠性。[0035]從圖1和圖2可以看出,在根據(jù)本發(fā)明示例性實施例的分布式存儲系統(tǒng)及其方法中,分布地存儲于存儲底層系統(tǒng)中的多個存儲服務(wù)器的是擦除編碼后的數(shù)據(jù),而非數(shù)據(jù)的多個副本,這樣,可降低數(shù)據(jù)存儲的冗余度,特別是對于諸如存儲海量數(shù)據(jù)的云端存儲而言,將明顯地節(jié)省存儲空間。此外,由于采取了不同于數(shù)據(jù)本身的副本存儲機制來存儲索引信息,使得能夠確保數(shù)據(jù)存儲的可靠性。
[0036]參照回圖1,作為附加部分,在圖1所示的分布式存儲系統(tǒng)中,管理層系統(tǒng)10還包括節(jié)點管理裝置100,用于根據(jù)數(shù)據(jù)的寫入請求來指定執(zhí)行數(shù)據(jù)寫入的節(jié)點裝置,并根據(jù)數(shù)據(jù)的讀取請求來搜索執(zhí)行了所述數(shù)據(jù)的寫入操作的節(jié)點裝置。作為優(yōu)選示例,節(jié)點管理裝置100可根據(jù)數(shù)據(jù)的寫入請求來指定執(zhí)行數(shù)據(jù)寫入的主節(jié)點裝置及其副節(jié)點裝置,這里,在寫入完成之后,主節(jié)點裝置和副節(jié)點裝置均持久地存儲有數(shù)據(jù)在存儲底層系統(tǒng)中的索引信息。
[0037]作為優(yōu)選示例,節(jié)點管理裝置100可具有兩個從節(jié)點管理裝置(未示出),作為節(jié)點管理裝置100的備份裝置。這里,可在管理層系統(tǒng)中設(shè)置仲裁裝置,以在節(jié)點管理裝置100宕機時切換至作為備份裝置的從節(jié)點管理裝置。
[0038]此外,作為附加部分,在圖1所示的分布式存儲系統(tǒng)中,存儲底層系統(tǒng)20還包括元數(shù)據(jù)服務(wù)器200,用于存儲元數(shù)據(jù),其中,所述元數(shù)據(jù)指示擦除編碼后的數(shù)據(jù)如何分布地存儲于多個存儲服務(wù)器。類似地,元數(shù)據(jù)服務(wù)器200也可以具有其備份服務(wù)器(未示出),以用于在元數(shù)據(jù)服務(wù)器200宕機時,切換到備份服務(wù)器來繼續(xù)提供數(shù)據(jù)存儲服務(wù)。
[0039]作為優(yōu)選示例,為了進一步提高數(shù)據(jù)讀取的速度,可在節(jié)點裝置與元數(shù)據(jù)服務(wù)器200之間設(shè)置多個元數(shù)據(jù)代理服務(wù)器(未示出),作為元數(shù)據(jù)的前端緩存代理,以減少元數(shù)據(jù)服務(wù)器200的操作壓力。這里,可將各個數(shù)據(jù)塊均勻地映射到所述多個元數(shù)據(jù)代理服務(wù)器,從而主節(jié)點裝置可根據(jù)上述映射關(guān)系將數(shù)據(jù)塊ID提供給對應(yīng)的元數(shù)據(jù)代理服務(wù)器。
[0040]以下參照圖3來描述根據(jù)本發(fā)明示例性實施例的節(jié)點裝置。參照圖3,根據(jù)本發(fā)明示例性實施例的節(jié)點裝置包括:日志單元300、內(nèi)存單元310、接口單元320和索引存儲單元330。
[0041]具體說來,日志單元300用于臨時存儲寫入的數(shù)據(jù),直到寫入的數(shù)據(jù)達到預(yù)定的塊大小。這里,可基于“塊”這一單位來向存儲底層系統(tǒng)寫入數(shù)據(jù),也就是說,每當待寫入的數(shù)據(jù)在管理層系統(tǒng)中累積到一個數(shù)據(jù)塊時,可對所述數(shù)據(jù)塊執(zhí)行擦除編碼,并將擦除編碼后的數(shù)據(jù)塊提供給存儲底層系統(tǒng)。
[0042]內(nèi)存單元310用于與日志單元300鏡像地存儲寫入的數(shù)據(jù)。通過這種方式,當節(jié)點裝置宕機時,可通過從日志單元300中恢復(fù)數(shù)據(jù)來避免由于內(nèi)存單元310中的數(shù)據(jù)丟失所造成的損失。
[0043]這里,作為優(yōu)選示例,當寫入的數(shù)據(jù)為基于鍵值對的數(shù)據(jù)條目時,鍵數(shù)據(jù)與值數(shù)據(jù)兩者均被寫入日志單元300和內(nèi)存單元310,從而當接收到讀取數(shù)據(jù)的請求時,如果該數(shù)據(jù)仍舊保存在內(nèi)存單元310中,則可優(yōu)先基于鍵數(shù)據(jù)在內(nèi)存單元310中找到相應(yīng)的值數(shù)據(jù),提高數(shù)據(jù)讀取速度。
[0044]接口單元320用于當節(jié)點裝置作為主節(jié)點裝置時,如果內(nèi)存單元310中寫入的數(shù)據(jù)達到塊大小,則對所述塊大小的數(shù)據(jù)執(zhí)行擦除編碼,并將擦除編碼后的數(shù)據(jù)提供給存儲底層系統(tǒng)。[0045]這里,作為示例,在節(jié)點管理裝置100根據(jù)數(shù)據(jù)的寫入請求指定了執(zhí)行數(shù)據(jù)寫入的主節(jié)點裝置(例如,節(jié)點裝置I ),并指定了主節(jié)點裝置的副節(jié)點裝置(例如,節(jié)點裝置2和節(jié)點裝置3)之后,節(jié)點管理裝置100可進行控制以將數(shù)據(jù)寫入主節(jié)點裝置以及各個副節(jié)點裝置的日志單元300和內(nèi)存單元310,當寫入主節(jié)點裝置的內(nèi)存單元310的數(shù)據(jù)達到塊大小時,主節(jié)點裝置的接口單元320可從內(nèi)存單元310中取出寫入的塊大小的數(shù)據(jù),將所述塊大小的數(shù)據(jù)劃分為k個部分數(shù)據(jù),對k個部分數(shù)據(jù)執(zhí)行擦除編碼,以得到由k+m個部分數(shù)據(jù)組成的擦除編碼后的塊,并將擦除編碼后的塊所包括的k+m個部分數(shù)據(jù)分別提供給存儲底層系統(tǒng)20中的k+m個存儲服務(wù)器,其中,k和m為整數(shù),兩者的關(guān)系符合擦除編碼機制。
[0046]在這種情況下,在數(shù)據(jù)塊的各個部分數(shù)據(jù)均被成功存儲到各個存儲服務(wù)器之后,主節(jié)點裝置將相應(yīng)的元數(shù)據(jù)存儲在元數(shù)據(jù)服務(wù)器200中,從而該數(shù)據(jù)塊變?yōu)榭勺x狀態(tài)。這里,所述元數(shù)據(jù)指示數(shù)據(jù)塊中的k+m個部分數(shù)據(jù)被分別存儲到的k+m個存儲服務(wù)器。
[0047]例如,參照圖4,根據(jù)本發(fā)明的示例性實施例,對于存儲在存儲底層系統(tǒng)中的某個數(shù)據(jù)塊(由數(shù)據(jù)塊的標識符(ID)來標識),它的元數(shù)據(jù)被用于指示分別存儲了所述數(shù)據(jù)塊中的(k+m)個部分數(shù)據(jù)的(k+m)個存儲服務(wù)器。通過存儲該元數(shù)據(jù),對于特定數(shù)據(jù)塊,元數(shù)據(jù)服務(wù)器200可確定分布地存儲與所述數(shù)據(jù)塊對應(yīng)的k+m個部分數(shù)據(jù)的k+m個存儲服務(wù)器,以便在后續(xù)完成數(shù)據(jù)塊的讀取。
[0048]索引存儲單元330用于持久地存儲數(shù)據(jù)在存儲底層系統(tǒng)的索引信息,這里,對于基于鍵值對的數(shù)據(jù)條目而言,所述索引信息指示數(shù)據(jù)條目中的值數(shù)據(jù)在存儲底層系統(tǒng)中所對應(yīng)的塊。作為示例,所述索引信息可包括以下項:數(shù)據(jù)條目的值數(shù)據(jù)所對應(yīng)的數(shù)據(jù)塊的標識符(ID)、數(shù)據(jù)條目的值數(shù)據(jù)在所述數(shù)據(jù)塊中的偏移位置、數(shù)據(jù)條目的值數(shù)據(jù)的長度。根據(jù)本發(fā)明的示例性實施例,當接收到讀取數(shù)據(jù)的請求時,節(jié)點管理裝置100根據(jù)所述請求來搜索存儲了所述數(shù)據(jù)的索引信息的主節(jié)點裝置,所述主節(jié)點裝置從索引信息確定數(shù)據(jù)條目中的值數(shù)據(jù)在存儲底層系統(tǒng)中所對應(yīng)的數(shù)據(jù)塊,并將所述數(shù)據(jù)塊告知元數(shù)據(jù)服務(wù)器200,從而元數(shù)據(jù)服務(wù)器200可確定分布地存儲與所述數(shù)據(jù)塊對應(yīng)的k+m個部分數(shù)據(jù)的k+m個存儲服務(wù)器,以便主節(jié)點裝置從k+m個存儲服務(wù)器中的至少一個存儲服務(wù)器讀取與期望讀取的數(shù)據(jù)(例如,數(shù)據(jù)條目)對應(yīng)的各個部分數(shù)據(jù)。
[0049]圖5示出根據(jù)本發(fā)明示例性實施例的基于擦除編碼機制來寫入數(shù)據(jù)的方法的流程圖。
[0050]參照圖5,在步驟S100,主節(jié)點裝置通過接口單元320接收用于寫入數(shù)據(jù)的請求。這里,所述主節(jié)點裝置是由節(jié)點管理裝置100根據(jù)所述用于寫入數(shù)據(jù)的請求在管理層系統(tǒng)10中的多個節(jié)點裝置中所指定的。并且,節(jié)點管理裝置100還相應(yīng)地指定了主節(jié)點裝置的副節(jié)點裝置。
[0051]作為優(yōu)選示例,待寫入的數(shù)據(jù)可以是劃分好的基于鍵值對的數(shù)據(jù)條目,其中,每個數(shù)據(jù)條目的大小可被設(shè)置為小于數(shù)據(jù)塊的大小,這里,僅作為示例,數(shù)據(jù)塊的大小可以是64M。
[0052]接下來,在步驟S200,主節(jié)點裝置的接口單元320將key-value數(shù)據(jù)條目的鍵數(shù)據(jù)和值數(shù)據(jù)寫入主節(jié)點裝置和副節(jié)點裝置的日志單元300,并鏡像地將所述鍵數(shù)據(jù)和值數(shù)據(jù)寫入主節(jié)點裝置和副節(jié)點裝置的內(nèi)存單元310。
[0053]當寫入內(nèi)存單元310的數(shù)據(jù)達到預(yù)定的塊大小時,在步驟S300,主節(jié)點裝置的接口單元320從主節(jié)點裝置的內(nèi)存單元310中取出寫入的數(shù)據(jù)塊,相應(yīng)地,日志單元300和內(nèi)存單元310被清空并重新開始寫入后續(xù)的數(shù)據(jù)。
[0054]接下來,在步驟S400,主節(jié)點裝置的接口單元320將所述數(shù)據(jù)塊劃分為k個部分數(shù)據(jù),對k個部分數(shù)據(jù)執(zhí)行擦除編碼,以得到由k+m個部分數(shù)據(jù)組成的擦除編碼后的塊,這里,k和m為整數(shù),可根據(jù)應(yīng)用的需要來設(shè)置,兩者的關(guān)系符合擦除編碼機制。此外,僅作為示例,可采用柯西里德所羅門編碼(Cauchy Reed-Solomon)作為擦除編碼的具體算法。
[0055]然后,在步驟S500,主節(jié)點裝置的接口單元320將擦除編碼后的塊所包括的k+m個部分數(shù)據(jù)分別寫入存儲底層系統(tǒng)中的k+m個存儲服務(wù)器。這里,主節(jié)點裝置的接口單元320可首先將擦除編碼后的塊提供給存儲底層系統(tǒng)中的元數(shù)據(jù)服務(wù)器200,以請求元數(shù)據(jù)服務(wù)器200為所述擦除編碼后的塊分配k+m個存儲服務(wù)器。在獲知分配的k+m個存儲服務(wù)器之后,主節(jié)點裝置的接口單元320并行地向所述k+m個存儲服務(wù)器發(fā)起寫請求,如果針對某個存儲服務(wù)器的寫入失敗,則再次向該存儲服務(wù)器發(fā)起寫請求或請求元數(shù)據(jù)服務(wù)器200重新作出分配,直到所有k+m個部分數(shù)據(jù)被分別寫入各自的存儲服務(wù)器。
[0056]在步驟S600,主節(jié)點裝置的接口單元320將指示實際上分布地存儲所述k+m個部分數(shù)據(jù)的k+m個存儲服務(wù)器的元數(shù)據(jù)提供給元數(shù)據(jù)服務(wù)器200。在這種情況下,相應(yīng)的數(shù)據(jù)塊變?yōu)榭勺x狀態(tài)。
[0057]然后,在步驟S700,主節(jié)點裝置的接口單元320將指示數(shù)據(jù)條目中的值數(shù)據(jù)在存儲底層系統(tǒng)20中所對應(yīng)的數(shù)據(jù)塊的索引信息轉(zhuǎn)發(fā)給它的副節(jié)點裝置,以便主節(jié)點裝置和副節(jié)點裝置均將所述索引信息保存在各自的索引存儲單元330中。
[0058]圖6示出根據(jù)本發(fā)明示例性實施例的基于擦除編碼機制來讀取數(shù)據(jù)的方法的流程圖。
[0059]參照圖6,在步驟S1000,主節(jié)點裝置通過接口單元320接收用于讀取數(shù)據(jù)的請求。這里,所述主節(jié)點裝置是由節(jié)點管理裝置100根據(jù)所述用于讀取數(shù)據(jù)的請求在管理層系統(tǒng)10中的多個節(jié)點裝置中搜索到的執(zhí)行了所述數(shù)據(jù)的寫入操作的節(jié)點裝置。并且,節(jié)點管理裝置100可相應(yīng)地確定所述主節(jié)點裝置的副節(jié)點裝置。
[0060]接下來,作為可選方式,在步驟S2000,主節(jié)點裝置可首先通過接口單元210在它的內(nèi)存單元310中搜索期望讀取的數(shù)據(jù)。如果主節(jié)點裝置的接口單元210在步驟S3000確定期望讀取的數(shù)據(jù)被找到,則主節(jié)點裝置的接口單元210在步驟S4000從內(nèi)存單元310中讀取數(shù)據(jù)。具體說來,如之前所述,由于當寫入的數(shù)據(jù)為基于鍵值對的數(shù)據(jù)條目時,鍵數(shù)據(jù)與值數(shù)據(jù)兩者均被寫入日志單元300和內(nèi)存單元310,所以當接收到讀取數(shù)據(jù)的請求時,如果該數(shù)據(jù)仍舊保存在內(nèi)存單元310中,則可優(yōu)先基于鍵數(shù)據(jù)在內(nèi)存單元310中找到相應(yīng)的值數(shù)據(jù),提高數(shù)據(jù)讀取速度。
[0061]如果主節(jié)點裝置的接口單元210在步驟S3000確定沒有找到期望讀取的數(shù)據(jù),則在步驟S5000,主節(jié)點裝置的接口單元210根據(jù)存儲在索引存儲單元330中的索引信息確定數(shù)據(jù)條目中的值數(shù)據(jù)在存儲底層系統(tǒng)20中所對應(yīng)的數(shù)據(jù)塊,并向元數(shù)據(jù)服務(wù)器200通知所述數(shù)據(jù)塊。相應(yīng)地,在步驟S6000,元數(shù)據(jù)服務(wù)器200根據(jù)存儲的所述數(shù)據(jù)塊的元數(shù)據(jù)來確定分布地存儲與所述數(shù)據(jù)塊對應(yīng)的k+m個部分數(shù)據(jù)的k+m個存儲服務(wù)器。這里,作為可選示例,在主節(jié)點裝置的接口單元210確定所述數(shù)據(jù)塊之后,其可以向?qū)?yīng)的元數(shù)據(jù)代理服務(wù)器通知所述數(shù)據(jù)塊,以便由所述對應(yīng)的元數(shù)據(jù)代理服務(wù)器來確定分布地存儲與所述數(shù)據(jù)塊對應(yīng)的k+m個部分數(shù)據(jù)的k+m個存儲服務(wù)器。如果對應(yīng)的元數(shù)據(jù)代理服務(wù)器未能直接將相應(yīng)的元數(shù)據(jù)提供給主節(jié)點裝置,則元數(shù)據(jù)代理服務(wù)器可向元數(shù)據(jù)服務(wù)器200請求相應(yīng)的元數(shù)據(jù),再將獲得的元數(shù)據(jù)提供給主節(jié)點裝置。然而,如果元數(shù)據(jù)代理服務(wù)器未能請求到相應(yīng)的元數(shù)據(jù),則主節(jié)點裝置的接口單元320可直接向元數(shù)據(jù)服務(wù)器200請求刷新元數(shù)據(jù)代理服務(wù)器的分布,并向重新映射的元數(shù)據(jù)代理服務(wù)器請求相應(yīng)的元數(shù)據(jù)。
[0062]由于索引信息包括了待讀取數(shù)據(jù)(例如,數(shù)據(jù)條目)在數(shù)據(jù)塊中的偏移位置和長度,并且,元數(shù)據(jù)指示了所述數(shù)據(jù)塊中的各個部分數(shù)據(jù)分布于多個存儲服務(wù)器的信息,因此,在步驟S7000,主節(jié)點裝置的接口單元320分別從所述k+m個存儲服務(wù)器中的至少一個存儲服務(wù)器(其中,所述至少一個存儲服務(wù)器中寫入了與數(shù)據(jù)條目相關(guān)的部分數(shù)據(jù))讀取與數(shù)據(jù)條目對應(yīng)的部分數(shù)據(jù),并整合讀取的數(shù)據(jù)。
[0063]作為優(yōu)選方式,由于本發(fā)明的示例性實施例采用了基于擦除編碼機制來生成各個部分數(shù)據(jù)的方式(其中,除了有效數(shù)據(jù)部分之外,還增加了相應(yīng)的校驗部分),因此,在讀取數(shù)據(jù)時,可進一步采取降級讀取的方式,即,當主節(jié)點裝置無法讀取所有與數(shù)據(jù)條目對應(yīng)的部分數(shù)據(jù)時,主節(jié)點裝置僅讀取所述數(shù)據(jù)塊中的k個部分數(shù)據(jù),并基于擦除編碼機制來恢復(fù)其余m個部分數(shù)據(jù)。
[0064]應(yīng)注意,以上盡管以基于鍵值對的數(shù)據(jù)條目作為示例進行了描述,但本發(fā)明并不受限于基于鍵值對的分布式存儲,任何適當格式的數(shù)據(jù)均可應(yīng)用于本發(fā)明。
[0065]此外,在根據(jù)本發(fā)明示例性實施例的分布式存儲系統(tǒng)及其方法中,可使得分布式數(shù)據(jù)存儲的冗余度符合擦除編碼機制,從而節(jié)省存儲空間,并且,通過以副本的形式存儲索引信息來確保數(shù)據(jù)存儲的可靠性。
[0066]本發(fā)明的以上各個實施例僅僅是示例性的,而本發(fā)明并不受限于此。本領(lǐng)域技術(shù)人員應(yīng)該理解:在不脫離本發(fā)明的原理和精神的情況下,可對這些實施例進行改變,其中,本發(fā)明的范圍在權(quán)利要求及其等同物中限定。
【權(quán)利要求】
1.一種基于擦除編碼機制的分布式存儲系統(tǒng),包括: 管理層系統(tǒng),包括多個節(jié)點裝置,用于對寫入的數(shù)據(jù)執(zhí)行擦除編碼,并將擦除編碼后的數(shù)據(jù)提供給存儲底層系統(tǒng); 存儲底層系統(tǒng),包括多個存儲服務(wù)器,用于分布地存儲擦除編碼后的數(shù)據(jù); 其中,數(shù)據(jù)在存儲底層系統(tǒng)中的索引信息以副本的形式被分別存儲在所述多個節(jié)點裝置中的N個節(jié)點裝置中,其中,N為大于I的整數(shù)。
2.如權(quán)利要求1所述的分布式存儲系統(tǒng),其中,N為3。
3.如權(quán)利要求1所述的分布式存儲系統(tǒng),其中,寫入的數(shù)據(jù)是指基于鍵值對的數(shù)據(jù)條目。
4.如權(quán)利要求1到3之一中的任何一個所述的分布式存儲系統(tǒng),其中,管理層系統(tǒng)還包括:節(jié)點管理裝置,用于根據(jù)數(shù)據(jù)的寫入請求來指定執(zhí)行數(shù)據(jù)寫入的節(jié)點裝置,并根據(jù)數(shù)據(jù)的讀取請求來搜索執(zhí)行了所述數(shù)據(jù)的寫入操作的節(jié)點裝置。
5.如權(quán)利要求4所述的分布式存儲系統(tǒng),其中,存儲底層系統(tǒng)還包括:元數(shù)據(jù)服務(wù)器,用于存儲元數(shù)據(jù),其中,所述元數(shù)據(jù)指示擦除編碼后的數(shù)據(jù)如何分布地存儲于多個存儲服務(wù)器。
6.如權(quán)利 要求5所述的分布式存儲系統(tǒng),其中,節(jié)點管理裝置根據(jù)數(shù)據(jù)的寫入請求來指定執(zhí)行數(shù)據(jù)寫入的主節(jié)點裝置及其副節(jié)點裝置。
7.如權(quán)利要求6所述的分布式存儲系統(tǒng),其中,節(jié)點裝置包括: 日志單元,用于臨時存儲寫入的數(shù)據(jù),直到寫入的數(shù)據(jù)達到預(yù)定的塊大小; 內(nèi)存單元,用于與日志單元鏡像地存儲寫入的數(shù)據(jù), 接口單元,用于當節(jié)點裝置作為主節(jié)點裝置時,如果內(nèi)存單元中寫入的數(shù)據(jù)達到塊大小,則對所述塊大小的數(shù)據(jù)執(zhí)行擦除編碼,并將擦除編碼后的數(shù)據(jù)提供給存儲底層系統(tǒng); 索引存儲單元,用于持久地存儲數(shù)據(jù)在存儲底層系統(tǒng)的索引信息,其中,所述索引信息指示數(shù)據(jù)條目中的值數(shù)據(jù)在存儲底層系統(tǒng)中所對應(yīng)的塊。
8.如權(quán)利要求7所述的分布式存儲系統(tǒng),其中,節(jié)點管理裝置進行控制以將數(shù)據(jù)寫入主節(jié)點裝置和副節(jié)點裝置的日志單元和內(nèi)存單元,當寫入主節(jié)點裝置的內(nèi)存單元的數(shù)據(jù)達到塊大小時,主節(jié)點裝置的接口單元從它的內(nèi)存單元中取出寫入的塊大小的數(shù)據(jù),將所述塊大小的數(shù)據(jù)劃分為k個部分數(shù)據(jù),對k個部分數(shù)據(jù)執(zhí)行擦除編碼,以得到由k+m個部分數(shù)據(jù)組成的擦除編碼后的塊,并將擦除編碼后的塊所包括的k+m個部分數(shù)據(jù)分別寫入存儲底層系統(tǒng)中的k+m個存儲服務(wù)器,其中,k和m為整數(shù),兩者的關(guān)系符合擦除編碼機制, 其中,元數(shù)據(jù)指示分布地存儲所述k+m個部分數(shù)據(jù)的k+m個存儲服務(wù)器。
9.如權(quán)利要求8所述的分布式存儲系統(tǒng),其中,當主節(jié)點裝置的接口單元從它的內(nèi)存單元中取出寫入的塊大小的數(shù)據(jù)時,主節(jié)點裝置和副節(jié)點裝置的日志單元和內(nèi)存單元清空并重新開始寫入數(shù)據(jù)。
10.如權(quán)利要求9所述的分布式存儲系統(tǒng),其中,節(jié)點管理裝置根據(jù)數(shù)據(jù)的讀取請求來搜索執(zhí)行了所述數(shù)據(jù)的寫入操作的主節(jié)點裝置,所述主節(jié)點裝置從存儲的所述數(shù)據(jù)的索引信息確定數(shù)據(jù)條目中的值數(shù)據(jù)在存儲底層系統(tǒng)中所對應(yīng)的塊,并將所述塊告知元數(shù)據(jù)服務(wù)器,元數(shù)據(jù)服務(wù)器根據(jù)存儲的所述塊的元數(shù)據(jù)來確定分布地存儲與所述塊對應(yīng)的k+m個部分數(shù)據(jù)的k+m個存儲服務(wù)器,主節(jié)點裝置分別從所述k+m個存儲服務(wù)器中的至少一個存儲服務(wù)器讀取與數(shù)據(jù)條目對應(yīng)的部分數(shù)據(jù)。
11.如權(quán)利要求10所述的分布式存儲系統(tǒng),其中,當主節(jié)點裝置無法讀取所有與數(shù)據(jù)條目對應(yīng)的部分數(shù)據(jù)時,主節(jié)點裝置僅讀取所述塊中的k個部分數(shù)據(jù),并基于擦除編碼機制來恢復(fù)其余m個部分數(shù)據(jù)。
12.如權(quán)利要求1所述的分布式存儲系統(tǒng),其中,所述分布式存儲系統(tǒng)應(yīng)用于云端存儲。
13.一種基于擦除編碼機制的分布式存儲方法,包括: 在管理層系統(tǒng)對寫入的數(shù)據(jù)執(zhí)行擦除編碼; 將擦除編碼后的數(shù)據(jù)分布地存儲于存儲底層系統(tǒng)中的多個存儲服務(wù)器; 將數(shù)據(jù)在存儲底層系統(tǒng)中的索引信息以副本的形式分別存儲在管理層系統(tǒng)所包括的多個節(jié)點裝置中的N個節(jié)點裝置中,其中`,N為大于I的整數(shù)。
【文檔編號】G06F3/06GK103631539SQ201310683621
【公開日】2014年3月12日 申請日期:2013年12月13日 優(yōu)先權(quán)日:2013年12月13日
【發(fā)明者】黃浩 申請人:百度在線網(wǎng)絡(luò)技術(shù)(北京)有限公司