儲存叢集化系統(tǒng)與提供對叢集式儲存的存取的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及儲存叢集化,特別涉及叢集式儲存中的效能考量與數(shù)據(jù)去重復(fù)(de-duplicat1n)。
【背景技術(shù)】
[0002]傳統(tǒng)儲存架構(gòu)一般只能垂直延伸(scale up)而無法水平延伸(scale out)。換句話說,架構(gòu)中主機數(shù)量與規(guī)格不變,需要更多儲存空間時只有安裝或替換更多硬盤一途,因此垂直延伸不能無限制地擴張,也對效能無益。垂直延伸時將數(shù)據(jù)由早先較小的硬盤遷移到新購置較大的硬盤非常耗時,遑論硬盤的容量與要價并不成正比。
[0003]將儲存叢集化、以節(jié)點為單位管理可局部解決上述問題。然而在小型電腦系統(tǒng)介面(Small Computer System Interface,簡稱SCSI)儲存叢集的一例中,叢集化與存取權(quán)的賦予發(fā)生在SCSI目標(biāo)(target)之后的邏輯卷管理層(logical volume management,簡稱LVM),用戶端本身需具備識別目標(biāo)的能力,每一目標(biāo)只能控制八到十六個SCSI裝置,而若對諸目標(biāo)也用上分散式存取權(quán)管理(distributed lock management,簡稱DLM)則效能的低落不堪設(shè)想。
【發(fā)明內(nèi)容】
[0004]鑒于上述,本發(fā)明旨在揭露用戶端指示讀取和寫入時儲存叢集化系統(tǒng)分別的樣態(tài),以及提供對叢集式儲存的存取的方法。
[0005]本發(fā)明揭露一種儲存叢集化系統(tǒng),其包含多個儲存前端和多個叢集化模塊。叢集化模塊其中至少一用以自用戶端接收指示讀取數(shù)據(jù)項的存取指令。叢集化模塊其中之一用以檢閱元數(shù)據(jù)(metadata),以選擇儲存前端其中之一。叢集化模塊其中之一用以透過被選擇的儲存前端讀取數(shù)據(jù)項。當(dāng)被選擇的儲存前端回傳數(shù)據(jù)項時,用以讀取數(shù)據(jù)項的叢集化模塊回傳數(shù)據(jù)項予用戶端;當(dāng)被選擇的儲存前端回傳數(shù)據(jù)項的第一衍生值時,用以讀取數(shù)據(jù)項的叢集化模塊依據(jù)第一衍生值檢閱一份索引,以合成數(shù)據(jù)項予用戶端。上述用以檢閱元數(shù)據(jù)的叢集化模塊可為用以接收存取指令者,用以讀取數(shù)據(jù)項的叢集化模塊也可為用以檢閱元數(shù)據(jù)者。
[0006]本發(fā)明揭露一種提供對叢集式儲存的存取的方法,其包含:自用戶端接收指示讀取數(shù)據(jù)項的存取指令;檢閱元數(shù)據(jù),以選擇對應(yīng)數(shù)據(jù)項的一個儲存前端;以及透過該儲存前端讀取數(shù)據(jù)項。讀取數(shù)據(jù)項包含:當(dāng)儲存前端回傳數(shù)據(jù)項的第一衍生值時,依據(jù)第一衍生值檢閱索引,以合成數(shù)據(jù)項予用戶端;以及當(dāng)儲存前端回傳數(shù)據(jù)項時,回傳數(shù)據(jù)項予用戶端。
[0007]本發(fā)明揭露另一種儲存叢集化系統(tǒng),其包含多個儲存前端、多個叢集化模塊以及多個運算模塊。叢集化模塊其中至少一用以自用戶端接收指示寫入數(shù)據(jù)項的存取指令。叢集化模塊其中之一用以調(diào)用(invoke)至少一個運算模塊運算數(shù)據(jù)項的至少一衍生值。叢集化模塊其中至少一用以透過儲存前端其中之一寫入數(shù)據(jù)項,并對應(yīng)更新元數(shù)據(jù)。當(dāng)衍生值不存在于某索引時,用以寫入數(shù)據(jù)項的叢集化模塊寫入至少部分的數(shù)據(jù)項;當(dāng)衍生值存在于該索引時,用以寫入數(shù)據(jù)項的叢集化模塊寫入衍生值。上述用以調(diào)用運算模塊的叢集化模塊可為用以接收存取指令者,用以寫入數(shù)據(jù)項的叢集化模塊也可為用以調(diào)用運算模塊者。
[0008]本發(fā)明揭露另一種提供對叢集式儲存的存取的方法,其包含:接收指示寫入數(shù)據(jù)項的存取指令;運算數(shù)據(jù)項的至少一衍生值;以及透過一儲存前端寫入數(shù)據(jù)項,并對應(yīng)更新元數(shù)據(jù)。寫入數(shù)據(jù)項包含:當(dāng)衍生值存在于某索引時,寫入衍生值;以及當(dāng)衍生值不存在于該索引時,寫入至少部分的數(shù)據(jù)項。
[0009]以上關(guān)于本
【發(fā)明內(nèi)容】
及以下關(guān)于實施方式的說明是用以示范與闡明本發(fā)明的精神與原理,并提供對本發(fā)明的權(quán)利要求更進(jìn)一步的解釋。
【附圖說明】
[0010]圖1是依據(jù)本發(fā)明一實施例儲存叢集化系統(tǒng)的方框圖。
[0011]圖2是依據(jù)本發(fā)明一實施例提供對叢集式儲存的存取的方法的流程圖。
[0012]圖3是依據(jù)本發(fā)明另一實施例提供對叢集式儲存的存取的方法的流程圖。
[0013]其中,附圖標(biāo)記說明書如下:
[0014]I儲存叢集化系統(tǒng)
[0015]112、114、116 叢集化模塊
[0016]132、134、136 儲存前端
[0017]152、154、156 運算模塊
【具體實施方式】
[0018]以下在實施方式中敘述本發(fā)明的詳細(xì)特征,其內(nèi)容足以使本領(lǐng)域的技術(shù)人員了解本發(fā)明的技術(shù)內(nèi)容并據(jù)以實施,且依據(jù)本說明書所揭露的內(nèi)容、權(quán)利要求及附圖,任何本領(lǐng)域的技術(shù)人員可輕易地理解本發(fā)明相關(guān)的目的及優(yōu)點。以下實施例是進(jìn)一步說明本發(fā)明的諸面向,但非以任何面向限制本發(fā)明的范疇。
[0019]請參見圖1。圖1是依據(jù)本發(fā)明一實施例儲存叢集化系統(tǒng)的方框圖。如圖1所示,儲存叢集化系統(tǒng)I包含叢集化模塊112、114和116、分別對應(yīng)的儲存前端132、134和136以及分別對應(yīng)的運算模塊152、154和156。一般而言,儲存叢集必須有足夠的節(jié)點(quorate)才能運作,而此處三個叢集化模塊112、114和116代表著儲存叢集化系統(tǒng)I分布于三臺主機(實體或虛擬)上,而叢集化模塊112所在的主機包含儲存前端132和運算模塊152,以此類推。在其他實施例中,叢集化模塊112不一定只對應(yīng)儲存前端132和運算模塊152 ;也就是說,叢集化模塊112所在的主機上可以有更多的儲存前端或運算模塊。叢集化模塊112、114和116彼此耦接(未繪示)。實務(wù)上,作為其各自主機上的服務(wù),任一儲存前端132、134和136可被任一叢集化模塊112、114和116存取,任一運算模塊152、154和156也可被任一叢集化模塊112、114和116調(diào)用。
[0020]對于叢集化模塊112、114和116而言,儲存前端132、134和136隱藏了其后的硬件細(xì)節(jié),分別提供一套文件系統(tǒng)或一塊邏輯儲存空間。以底層為SCSI裝置為例,則儲存前端132、134和136就是SCSI目標(biāo),可以常見的tgtd實作。當(dāng)然儲存前端132、134和136也可以衍生的網(wǎng)際網(wǎng)絡(luò)SCSI (簡稱iSCSI)或其乙太網(wǎng)絡(luò)對應(yīng)(HyperSCSI)、串接式(SerialAttached) SCSI (簡稱 SAS)或其并接對應(yīng)(Parallel SCSI)、InfiniBand、光纖通道(FibreChannel,簡稱FC)或其乙太網(wǎng)絡(luò)或網(wǎng)際網(wǎng)絡(luò)協(xié)議上的(Internet Protocol,簡稱IP)變形(FC over Ethernet 或 FC over IP)或乙太網(wǎng)絡(luò)上的先進(jìn)技術(shù)附件(ATA over Ethernet, ΑΤΑ是 Advanced Technology Attachment 的縮寫)為依歸。
[0021]叢集化模塊112、114和116和運算模塊152、154和156形成一個分散式運算平臺。若套用以Apache Storm,則每個叢集化模塊112、114和116皆為可啟始和分配工作或運算給至少一運算模塊152、154和156的主節(jié)點,而任一運算模塊152、154和156又可將被分配到的工作拆派給彼此,如此遞回直到最后工作完成。
[0022]請配合圖1參見圖2。圖2是依據(jù)本發(fā)明一實施例提供對叢集式儲存的存取的方法的流程圖。如圖2所示,于步驟S201中,叢集化模塊112、114和116中至少一個自某用戶端接收指示寫入某數(shù)據(jù)項的存取指令。用戶端可將存取指令發(fā)給多個叢集化模塊,也可以固定或隨機發(fā)給某個叢集化模塊,如112。視儲存叢集化系統(tǒng)I的環(huán)境設(shè)定,叢集化模塊112可自行執(zhí)行步驟S203以處理存取指令,或?qū)⑺信c該用戶端的往來轉(zhuǎn)介給負(fù)責(zé)的另一個叢集化模塊,如114。具體而言,叢集化模塊112可以代理端點指標(biāo)(proxy end-pointer)的方式告知用戶端其已被轉(zhuǎn)介給叢集化模塊114,則之后至少在本次寫入的流程中用戶端只會和叢集化模塊114往來。或者叢集化模塊114可冒用(assume)叢集化模塊112的身分,或儲存叢集化系統(tǒng)I另包含一個叢集化模塊112、114和116的共用前端,對用戶端隱藏上述轉(zhuǎn)介的過程。
[0023]假設(shè)存取指令由收到的叢集化模塊112處理,則于步驟S203中,叢集化模塊112調(diào)用運算模塊152、154和156中至少一個運算數(shù)據(jù)項的至少一個衍生值。請注意叢集化模塊112可以但不一定偏好由與自己對應(yīng)或在同一主機上的運算模塊152開始運算。衍生值通常指的是對數(shù)據(jù)項投以一散列函數(shù)(hash funct1n)的輸出。步驟S203是本發(fā)明數(shù)據(jù)去重復(fù)的第一個環(huán)節(jié);一般而言,處理數(shù)據(jù)項的衍生、散列或摘要(digest)值會比處理數(shù)據(jù)項本身來得輕松。工作或運算的分配可以發(fā)生在叢集化模塊112或任何被調(diào)用的運算模塊。數(shù)據(jù)項可以被分段,而任一被調(diào)用的運算模塊負(fù)責(zé)的可以是其中一段的衍生值。在另一實施例中,假設(shè)叢集化模塊112調(diào)用了運算模塊152,而后者又調(diào)用了運算模塊154。運算模塊152負(fù)責(zé)的可以是數(shù)據(jù)項的粗略或模糊(fuzzy)摘要,亦即對數(shù)據(jù)項的特征(feature或characteristic)的大致描述,而運算模塊154負(fù)責(zé)細(xì)部、精確的描述。因此,步驟S203所謂“至少一”衍生值可以是平行的任意數(shù)量,可以是遞回任意次的運算,或這兩種概念的彡口口。
[0024]接續(xù)上述調(diào)用運算模塊152和154的例子,于步驟S205中,運算模塊152檢閱儲存叢集化系統(tǒng)I的一份索引是否已經(jīng)記載所運算出的模糊摘要。當(dāng)模糊摘要存在于索引時,表示儲存叢集化系統(tǒng)I已處理過和所述數(shù)據(jù)項類似者,索引可間接指示模糊摘要所對應(yīng)的數(shù)據(jù)位元透過諸前端132、134和136儲存于何處,不需再被寫入,因此僅于步驟S207寫入一遍模糊摘要以為記錄。當(dāng)模糊摘要不存在于索引時,顯然其對應(yīng)的至少部分的數(shù)據(jù)項需于步驟S209中被寫入,且在一實施例中伴隨著對索引的更新,亦即在索引中添加關(guān)聯(lián)于本模糊摘要的條目。在一實施例中,僅在此模糊摘要出現(xiàn)達(dá)一定頻率或次數(shù)時索