本發(fā)明涉及離線存儲(chǔ),特別涉及一種海量數(shù)據(jù)容災(zāi)備份方法。
背景技術(shù):
社會(huì)已經(jīng)進(jìn)入了一個(gè)數(shù)據(jù)爆炸式增長(zhǎng)的時(shí)代。無(wú)處不在的傳感器、移動(dòng)網(wǎng)絡(luò)、社交網(wǎng)絡(luò)、微博、網(wǎng)頁(yè)查詢(xún)?yōu)g覽記錄、通話記錄、消費(fèi)記錄無(wú)時(shí)無(wú)刻不在產(chǎn)生著大量數(shù)據(jù)。存儲(chǔ)領(lǐng)域在大數(shù)據(jù)時(shí)代也面臨著諸多挑戰(zhàn)。這些挑戰(zhàn)不僅僅是海量數(shù)據(jù)的存儲(chǔ)問(wèn)題,更重要的是從體系結(jié)構(gòu)、系統(tǒng)軟件等方面對(duì)上層應(yīng)用高效地處理數(shù)據(jù)提供相應(yīng)的支撐,以滿(mǎn)足不同的上層應(yīng)用需求。存儲(chǔ)領(lǐng)域從上層軟件系統(tǒng)到底層存儲(chǔ)設(shè)備都正發(fā)生著改變。眾所周知,ssd固態(tài)存儲(chǔ)可兼容傳統(tǒng)存儲(chǔ)系統(tǒng),并具有高性能、低功耗等優(yōu)點(diǎn),被廣泛使用在io密集型應(yīng)用環(huán)境中替換傳統(tǒng)機(jī)械硬盤(pán)。而目前正在使用的云計(jì)算平臺(tái)大多是基于機(jī)械磁盤(pán)設(shè)備進(jìn)行設(shè)計(jì)的,ssd由于在內(nèi)部機(jī)制上與磁盤(pán)設(shè)備完全不同,這使得針對(duì)機(jī)械磁盤(pán)設(shè)計(jì)的軟件系統(tǒng)沒(méi)有充分利用ssd的特性。
技術(shù)實(shí)現(xiàn)要素:
為解決上述現(xiàn)有技術(shù)所存在的問(wèn)題,本發(fā)明提出了一種海量數(shù)據(jù)容災(zāi)備份方法,包括:
使用ssd作為緩存掛載用戶(hù)態(tài)文件系統(tǒng)到指定目錄,當(dāng)上層應(yīng)用程序訪問(wèn)存儲(chǔ)在分布式存儲(chǔ)系統(tǒng)中的數(shù)據(jù)時(shí),查詢(xún)配置記錄,查詢(xún)得出文件系統(tǒng)調(diào)用所操作的具體簇;如果所需要的簇位于ssd中,則命中請(qǐng)求并返回相應(yīng)的數(shù)據(jù),如果所需要的簇不在ssd中,使用分布式存儲(chǔ)接口遠(yuǎn)程獲得相應(yīng)的數(shù)據(jù),再將數(shù)據(jù)載入到內(nèi)存返回文件系統(tǒng)調(diào)用,之后將數(shù)據(jù)緩存到ssd中。
優(yōu)選地,所述分布式存儲(chǔ)系統(tǒng)包括緩存管理模塊,所述緩存管理模塊用于異步的處理數(shù)據(jù)修改請(qǐng)求,并且對(duì)有限的ssd緩存空間進(jìn)行管理。
優(yōu)選地,所述分布式存儲(chǔ)系統(tǒng)還包括配置管理模塊,用于管理用戶(hù)態(tài)文件系統(tǒng)的配置,將配置記錄存儲(chǔ)在ssd中,每次文件系統(tǒng)掛載時(shí)從ssd中讀出。
優(yōu)選地,所述分布式存儲(chǔ)系統(tǒng)還包括分布式存儲(chǔ)模塊,用于將所有文件系統(tǒng)調(diào)用傳遞給用戶(hù)態(tài)的緩存管理模塊和配置管理模塊。
優(yōu)選地,所述存儲(chǔ)系統(tǒng)的數(shù)據(jù)以桶的形式進(jìn)行組織,而每個(gè)桶數(shù)據(jù)以鍵進(jìn)行訪問(wèn),鍵在桶數(shù)據(jù)被寫(xiě)入后生成;存儲(chǔ)的文件被切分為固定大小的簇,每個(gè)簇以桶的形式存儲(chǔ)到分布式存儲(chǔ)中。
優(yōu)選地,還包括:將文件劃分為固定大小的簇,并以簇為單位進(jìn)行均衡化;當(dāng)檢測(cè)到發(fā)生寫(xiě)性能下降后,通過(guò)動(dòng)態(tài)選擇將簇存儲(chǔ)在性能下降節(jié)點(diǎn)上的數(shù)據(jù)遷移到未下降的ssd節(jié)點(diǎn)上,同時(shí)在數(shù)據(jù)初始部署時(shí)以簇為單位預(yù)留一部分ssd節(jié)點(diǎn);當(dāng)某個(gè)ssd節(jié)點(diǎn)上發(fā)生寫(xiě)入問(wèn)題后,稱(chēng)為異常節(jié)點(diǎn),動(dòng)態(tài)的將簇存儲(chǔ)在異常節(jié)點(diǎn)上的數(shù)據(jù)遷移到預(yù)留節(jié)點(diǎn)上。
優(yōu)選地,所述寫(xiě)性能下降以數(shù)據(jù)請(qǐng)求延遲作為指標(biāo),在記錄延遲時(shí)減去網(wǎng)絡(luò)層延遲,只記錄讀寫(xiě)層完成寫(xiě)請(qǐng)求造成的延遲;
假設(shè)li代表檢測(cè)模塊記錄的第i個(gè)寫(xiě)請(qǐng)求的延遲,則當(dāng)連續(xù)n個(gè)延遲的方差小于α?xí)r,也即:
其中延遲平均值
則表示該ssd節(jié)點(diǎn)出現(xiàn)了寫(xiě)性能下降,其中α和β是與ssd相關(guān)的參數(shù)。
本發(fā)明相比現(xiàn)有技術(shù),具有以下優(yōu)點(diǎn):
本發(fā)明提出了一種海量數(shù)據(jù)容災(zāi)備份方法,實(shí)現(xiàn)了高性能、低功耗的ssd與高帶寬容災(zāi)分布式存儲(chǔ)架構(gòu)的有機(jī)結(jié)合。
附圖說(shuō)明
圖1是根據(jù)本發(fā)明實(shí)施例的海量數(shù)據(jù)容災(zāi)備份方法的流程圖。
具體實(shí)施方式
下文與圖示本發(fā)明原理的附圖一起提供對(duì)本發(fā)明一個(gè)或者多個(gè)實(shí)施例的詳細(xì)描述。結(jié)合這樣的實(shí)施例描述本發(fā)明,但是本發(fā)明不限于任何實(shí)施例。本發(fā)明的范圍僅由權(quán)利要求書(shū)限定,并且本發(fā)明涵蓋諸多替代、修改和等同物。在下文描述中闡述諸多具體細(xì)節(jié)以便提供對(duì)本發(fā)明的透徹理解。出于示例的目的而提供這些細(xì)節(jié),并且無(wú)這些具體細(xì)節(jié)中的一些或者所有細(xì)節(jié)也可以根據(jù)權(quán)利要求書(shū)實(shí)現(xiàn)本發(fā)明。
本發(fā)明的一方面提供了一種海量數(shù)據(jù)容災(zāi)備份方法。圖1是根據(jù)本發(fā)明實(shí)施例的海量數(shù)據(jù)容災(zāi)備份方法流程圖。
本發(fā)明將ssd的讀寫(xiě)性能與分布式存儲(chǔ)的優(yōu)點(diǎn)相結(jié)合,實(shí)現(xiàn)基于ssd的分布式存儲(chǔ)方案。本發(fā)明的分布式存儲(chǔ)系統(tǒng)使用ssd作為緩存掛載用戶(hù)態(tài)文件系統(tǒng)到指定目錄,對(duì)用戶(hù)態(tài)文件系統(tǒng)進(jìn)行訪問(wèn),而包括緩存替換在內(nèi)的內(nèi)部策略對(duì)上層應(yīng)用透明。數(shù)據(jù)以桶的形式進(jìn)行組織,而每個(gè)桶數(shù)據(jù)以鍵進(jìn)行訪問(wèn),鍵在桶數(shù)據(jù)被寫(xiě)入后生成。存儲(chǔ)的文件被切分為固定大小的簇,每個(gè)簇以桶的形式存儲(chǔ)到分布式存儲(chǔ)中。
系統(tǒng)根據(jù)功能分為三個(gè)模塊:緩存管理模塊、配置管理模塊和分布式存儲(chǔ)模塊。緩存管理模塊用于異步的處理數(shù)據(jù)修改請(qǐng)求,并且對(duì)有限的ssd緩存空間進(jìn)行管理。配置管理模塊用于管理用戶(hù)態(tài)文件系統(tǒng)的配置,將配置記錄存儲(chǔ)在ssd中,每次文件系統(tǒng)掛載時(shí)從ssd中讀出。分布式存儲(chǔ)模塊用于將所有文件系統(tǒng)調(diào)用傳遞給用戶(hù)態(tài)的緩存管理模塊和配置管理模塊。
當(dāng)上層應(yīng)用程序訪問(wèn)存儲(chǔ)在分布式存儲(chǔ)系統(tǒng)中的數(shù)據(jù)時(shí),執(zhí)行以下操作:(1)分布式存儲(chǔ)模塊將文件系統(tǒng)調(diào)用重定向至配置管理模塊;(2)配置管理模塊通過(guò)查詢(xún)配置記錄,查詢(xún)得出文件系統(tǒng)調(diào)用所操作的具體簇,并進(jìn)一步查詢(xún)出簇所對(duì)應(yīng)的分布式存儲(chǔ)內(nèi)桶的鍵;(3)通過(guò)該鍵查詢(xún)緩存管理模塊,如果所需要的簇位于ssd中,則命中請(qǐng)求并返回相應(yīng)的數(shù)據(jù),如果所需要的簇不在ssd中,使用分布式存儲(chǔ)接口遠(yuǎn)程獲得相應(yīng)的數(shù)據(jù),再將數(shù)據(jù)載入到內(nèi)存返回文件系統(tǒng)調(diào)用,之后將數(shù)據(jù)緩存到ssd中。
首先利用數(shù)據(jù)壓縮算法減小簇自身的空間,其次利用簇之間的冗余性來(lái)避免了同樣的簇被重復(fù)存儲(chǔ)。在去重時(shí),簇被分為復(fù)合簇和基本簇。復(fù)合簇封裝了多個(gè)需要進(jìn)一步抽取的子簇;基本簇是分散數(shù)據(jù)結(jié)構(gòu)的最基本的表示。根據(jù)不同的簇類(lèi)型,從簇中抽取對(duì)象,然后利用散列函數(shù)計(jì)算對(duì)象的特征值;去重具體過(guò)程如下:
步驟1.將基本簇傳送給簇抽取器,對(duì)于不同類(lèi)型的復(fù)合簇采用不同的簇抽取算法。通過(guò)分析簇頭來(lái)確定復(fù)合簇和潛在簇的編碼格式。
步驟2.為每個(gè)基本簇分配一個(gè)全局唯一的稱(chēng)為特征值,使用sha散列函數(shù)來(lái)計(jì)算。
步驟3.通過(guò)簇索引,將已存儲(chǔ)簇的特征值進(jìn)行比較,當(dāng)發(fā)現(xiàn)當(dāng)前簇的特征值和已有簇特征值相等時(shí),則索引當(dāng)前簇為已有簇的引用,更新簇索引。
步驟4.存儲(chǔ)非重復(fù)簇。
在步驟3的去重過(guò)程開(kāi)始前,進(jìn)一步將簇分為可修改簇集和不可修改簇集,設(shè)置合適的去重粒度。設(shè)定簇抽取閾值。確定簇候選閾值的取值范圍;對(duì)于原始對(duì)象集合中各種類(lèi)型的簇,遍歷候選去重粒度取值范圍中的每個(gè)候選粒度值,對(duì)于超過(guò)候選粒度值的簇按照該值進(jìn)行劃分,并計(jì)算該候選去重粒度產(chǎn)生的數(shù)據(jù)壓縮比,數(shù)據(jù)壓縮比為初始簇集進(jìn)行簇去重前的數(shù)據(jù)總量除以按照候選粒度值進(jìn)行簇去重之后的數(shù)據(jù)總量得到的值:對(duì)于不可修改簇,將按照對(duì)象的原始大小從簇中抽取。簇結(jié)構(gòu)的不同部分通過(guò)引用其他簇來(lái)去重,根據(jù)簇結(jié)構(gòu)進(jìn)行分段,分段的大小不低于所設(shè)定的可修改簇的平均大小。對(duì)于簇的每個(gè)段生成特征值;和系統(tǒng)中其他的已有特征值比較;對(duì)于識(shí)別出第2次有相同特征值的段,在索引中索引該塊為新塊的引用;對(duì)于沒(méi)有識(shí)別相同前面的塊,存儲(chǔ)該塊并在索引中索引該塊為其本身的引用。
為了提高系統(tǒng)整體讀寫(xiě)性能,緩存管理模塊在ssd中緩存存儲(chǔ)對(duì)象。當(dāng)上層應(yīng)用程序需要對(duì)簇進(jìn)行讀寫(xiě)時(shí),緩存管理模塊首先將相應(yīng)的簇取回內(nèi)存進(jìn)行數(shù)據(jù)操作,而后緩存到ssd中固定大小的緩存區(qū)中。在緩存替換中,距離lru位置分別為l/8、l/4和l/2的位置設(shè)置三個(gè)不同狀態(tài)位,用于區(qū)分讀和寫(xiě)操作引入緩存的數(shù)據(jù),l為lru棧的長(zhǎng)度。由讀操作引入存儲(chǔ)對(duì)象緩存的數(shù)據(jù)存儲(chǔ)在lru棧的狀態(tài)位。在緩存啟動(dòng)階段,在固定時(shí)間間隔內(nèi)確定最終使用的狀態(tài)位的位置。收集運(yùn)行時(shí)各個(gè)狀態(tài)位的位置的開(kāi)銷(xiāo)cost,并通過(guò)比較該值確定最終選取的狀態(tài)位的位置。cost的計(jì)算方法如下:
cost=cw/cr*nw+nr
其中,cw和cr對(duì)應(yīng)寫(xiě)操作和讀操作的相同次數(shù)的計(jì)價(jià),而nw是記錄的寫(xiě)操作的操作次數(shù),nr記錄讀操作的操作次數(shù)。
ssd節(jié)點(diǎn)在接收到去重之后的簇時(shí),先將它們封裝成定長(zhǎng)數(shù)據(jù)段,隨后將多個(gè)定長(zhǎng)數(shù)據(jù)段分成一組,然后執(zhí)行特定的糾刪碼算法,生成多個(gè)編碼對(duì)象。隨后,ssd節(jié)點(diǎn)將編碼對(duì)象組內(nèi)的各個(gè)對(duì)象分散到包括自身在內(nèi)的不同節(jié)點(diǎn)上存儲(chǔ)。對(duì)于同一個(gè)或同一批文件所屬的新簇,其封裝并分組編碼生成的編碼對(duì)象組被調(diào)度到同一組節(jié)點(diǎn)存儲(chǔ)。
當(dāng)接收到文件讀取請(qǐng)求后,系統(tǒng)執(zhí)行以下的操作過(guò)程:
(1)解析請(qǐng)求中附帶的文件標(biāo)識(shí)符;
(2)根據(jù)文件標(biāo)識(shí)符查詢(xún)相應(yīng)文件的簇列表。為此,首先查詢(xún)?cè)撐募乃写氐臉?biāo)識(shí)符,然后根據(jù)各簇的標(biāo)識(shí)符查詢(xún)出其所屬的對(duì)象的標(biāo)識(shí)符,然后根據(jù)對(duì)象的標(biāo)識(shí)符查詢(xún)出對(duì)象所屬的編碼對(duì)象組的標(biāo)識(shí)符,然后再通過(guò)對(duì)象組的標(biāo)識(shí)符查詢(xún)出該對(duì)象所在的ssd節(jié)點(diǎn)的標(biāo)識(shí)符。全部查詢(xún)完成后,將文件所包含的所有簇的標(biāo)識(shí)符列表、各簇所屬對(duì)象的標(biāo)識(shí)符以及該對(duì)象所在ssd節(jié)點(diǎn)的標(biāo)識(shí)符信息都一并存儲(chǔ)到專(zhuān)門(mén)的結(jié)構(gòu)。
(3)根據(jù)該結(jié)構(gòu)中包含的簇標(biāo)識(shí)符列表和各簇的存放位置信息,從相應(yīng)的ssd節(jié)點(diǎn)讀取各簇的數(shù)據(jù)。ssd節(jié)點(diǎn)先通過(guò)對(duì)象標(biāo)識(shí)符查找到對(duì)象所存放的位置,然后通過(guò)簇標(biāo)識(shí)符在該對(duì)象的簇索引內(nèi)進(jìn)行查找,找到該簇在對(duì)象內(nèi)的偏移地址和長(zhǎng)度,最后根據(jù)上述信息讀取相應(yīng)區(qū)間的數(shù)據(jù)。按照結(jié)構(gòu)中指定的順序拼裝到一起,最終組合成原始文件。
系統(tǒng)采用動(dòng)態(tài)的分布式的并行恢復(fù)機(jī)制:當(dāng)檢測(cè)到某個(gè)ssd節(jié)點(diǎn)失效時(shí),其首先查詢(xún)?cè)摴?jié)點(diǎn)所包含的所有對(duì)象的信息,然后調(diào)度系統(tǒng)內(nèi)多個(gè)健康節(jié)點(diǎn)同時(shí)開(kāi)展恢復(fù)工作,各自負(fù)責(zé)一部分對(duì)象的恢復(fù)。
當(dāng)ssd節(jié)點(diǎn)超載時(shí),可以通過(guò)糾刪編碼算法由其他輕載節(jié)點(diǎn)上的對(duì)象計(jì)算出該超載節(jié)點(diǎn)上的對(duì)象,進(jìn)而將對(duì)象副本臨時(shí)存放在這些輕載節(jié)點(diǎn)上并對(duì)外提供服務(wù),減輕超載節(jié)點(diǎn)的負(fù)擔(dān)。
針對(duì)讀寫(xiě)事務(wù)處理方面,本發(fā)明的方法在設(shè)備內(nèi)部同時(shí)支持原子事務(wù)以及塊文件事務(wù)。針對(duì)不同類(lèi)型的事務(wù),對(duì)上層軟件直接提供相應(yīng)的事務(wù)處理接口。在ssd寫(xiě)性能下降發(fā)生后將數(shù)據(jù)以合適粒度的方式進(jìn)行節(jié)點(diǎn)間遷移。
為支持?jǐn)?shù)據(jù)庫(kù)和文件塊,本發(fā)明在ssd轉(zhuǎn)換層中增加了事務(wù)處理邏輯,同時(shí)擴(kuò)展設(shè)備接口,直接對(duì)軟件層提供事務(wù)處理接口。使用事務(wù)元數(shù)據(jù)段和首塊列表段存儲(chǔ)處理文件塊事務(wù)和原子事務(wù)需要的信息,事務(wù)元數(shù)據(jù)段中每條事務(wù)的信息包含事務(wù)寫(xiě)入的所有塊的地址映射,首塊列表段用戶(hù)存儲(chǔ)用戶(hù)數(shù)據(jù)。事務(wù)還原的同時(shí)可以保證轉(zhuǎn)換層映射信息的回復(fù)。對(duì)于文件塊事務(wù),每個(gè)事務(wù)的事務(wù)元數(shù)據(jù)中均包含事務(wù)所有塊的地址映射信息。對(duì)于原子事務(wù),通過(guò)首塊列表段可以查詢(xún)出該事務(wù)的狀態(tài),繼而可以保證事務(wù)內(nèi)所有塊地址映射信息正確性。事務(wù)元數(shù)據(jù)段和首塊列表段可以被用作檢索事務(wù)內(nèi)簇的索引。對(duì)于文件塊事務(wù),事務(wù)數(shù)據(jù)在通過(guò)接口傳到ssd固件層時(shí),首先寫(xiě)入該事務(wù)的事務(wù)元數(shù)據(jù),然后繼續(xù)寫(xiě)入事務(wù)數(shù)據(jù)。
以下方面描述了本發(fā)明文件塊事務(wù)提交的具體過(guò)程,該提供了比傳統(tǒng)塊文件系統(tǒng)更為嚴(yán)格的數(shù)據(jù)保護(hù)。1、設(shè)備接收到軟件系統(tǒng)傳入的文件塊事務(wù)寫(xiě)入請(qǐng)求,讀取空塊列表中的數(shù)據(jù),給靜態(tài)塊分配空閑的物理塊,將包括事務(wù)標(biāo)識(shí)和事務(wù)內(nèi)所有塊地址映射信息的事務(wù)信息以及當(dāng)前已處于提交狀態(tài)的事務(wù)標(biāo)識(shí)寫(xiě)入ssd的事務(wù)元數(shù)據(jù)段,每一個(gè)文件塊事務(wù)擁有一條事務(wù)元數(shù)據(jù);2、將文件塊事務(wù)所有數(shù)據(jù)寫(xiě)入剛分配的物理塊中,物理塊還記錄了事務(wù)標(biāo)識(shí);3、當(dāng)文件塊事務(wù)內(nèi)的所有數(shù)據(jù)均存儲(chǔ)到ssd中后,在ssd的內(nèi)存中表示該事務(wù)處于已提交狀態(tài)。已提交的文件塊事務(wù)標(biāo)識(shí)將被記錄到后續(xù)文件塊的事務(wù)元數(shù)據(jù)中,當(dāng)預(yù)定時(shí)長(zhǎng)內(nèi)沒(méi)有后續(xù)文件塊事務(wù)時(shí)或ssd收到關(guān)機(jī)信號(hào)后,已提交的文件塊事務(wù)被單獨(dú)寫(xiě)入一條空事務(wù)元數(shù)據(jù)中。
事務(wù)元數(shù)據(jù)是文件塊事務(wù)重要的元信息,包含了當(dāng)前事務(wù)的標(biāo)識(shí)、地址映射信息以及其它事務(wù)的提交記錄。為了保證事務(wù)元數(shù)據(jù)的寫(xiě)入不被中斷,將事務(wù)元數(shù)據(jù)存儲(chǔ)于單個(gè)ssd塊中。使用塊數(shù)據(jù)段存儲(chǔ)文件塊事務(wù)信息,包括事務(wù)標(biāo)識(shí)等信息,其余則存儲(chǔ)文件塊事務(wù)中所有ssd塊的地址映射信息。ssd塊校驗(yàn)段存儲(chǔ)數(shù)據(jù)校驗(yàn)等信息。映射信息的邏輯地址來(lái)自軟件層,物理地址則通過(guò)查詢(xún)空塊表進(jìn)行分配得到。
文件塊事務(wù)的事務(wù)元數(shù)據(jù)信息存儲(chǔ)在事務(wù)元數(shù)據(jù)段,這樣當(dāng)故障還原時(shí),依次掃描事務(wù)元數(shù)據(jù)段即可對(duì)所有文件塊事務(wù)狀態(tài)進(jìn)行確認(rèn)。
在寫(xiě)入事務(wù)元數(shù)據(jù)之后,文件塊事務(wù)才開(kāi)始寫(xiě)入事務(wù)內(nèi)的用戶(hù)數(shù)據(jù)。將文件塊事務(wù)中的邏輯塊數(shù)據(jù)寫(xiě)入事先分配的物理地址,文件塊事務(wù)塊校驗(yàn)區(qū)段還包含了事務(wù)標(biāo)識(shí)信息。
文件塊事務(wù)的事務(wù)元數(shù)據(jù)段是一個(gè)順序結(jié)構(gòu),后續(xù)事務(wù)的事務(wù)元數(shù)據(jù)中如果包含前驅(qū)事務(wù)的事務(wù)標(biāo)識(shí),則表示該事務(wù)在后續(xù)事務(wù)開(kāi)始寫(xiě)入時(shí)已經(jīng)處于提交狀態(tài)。如果后續(xù)事務(wù)中存在前驅(qū)事務(wù)的事務(wù)標(biāo)識(shí),則代表有一條從后續(xù)事務(wù)指向前驅(qū)事務(wù)的有向邊,那么位于事務(wù)元數(shù)據(jù)段中的事務(wù)構(gòu)成了一個(gè)有向無(wú)環(huán)圖,被指向的事務(wù)表明后續(xù)事務(wù)中的事務(wù)元數(shù)據(jù)包含其提交記錄,則為處于已提交狀態(tài)的事務(wù)。在預(yù)定義時(shí)長(zhǎng)內(nèi)沒(méi)有后續(xù)文件塊事務(wù)的到來(lái)或者ssd收到了關(guān)機(jī)信號(hào),則已提交事務(wù)不會(huì)在存儲(chǔ)器中一直等待,而在超過(guò)了一定時(shí)間閾值后寫(xiě)入空事務(wù)元數(shù)據(jù)到事務(wù)元數(shù)據(jù)段中。
對(duì)于原子事務(wù),其在事務(wù)開(kāi)始時(shí),其所需要修改的數(shù)據(jù)并沒(méi)有完全確定。為了能夠快速還原,所有原子事務(wù)的首塊記錄在ssd固定位置,也即首塊列表;首塊校驗(yàn)區(qū)段除有一個(gè)指向下一個(gè)預(yù)分配塊的指針之外,還有一個(gè)指向預(yù)分配的原子事務(wù)尾塊指針。由事務(wù)中所有塊通過(guò)校驗(yàn)區(qū)段中存儲(chǔ)的指針構(gòu)成環(huán)來(lái)決定事務(wù)是否提交,在寫(xiě)入當(dāng)前塊時(shí),實(shí)現(xiàn)分配好寫(xiě)入下一個(gè)物理塊的地址,并將這個(gè)地址寫(xiě)入校驗(yàn)區(qū)段中的下一指針,當(dāng)原子事務(wù)寫(xiě)入最后一個(gè)塊時(shí),該塊的校驗(yàn)區(qū)段指針下一指針指向首塊的物理地址,從而通過(guò)這樣的形式構(gòu)成了環(huán)狀結(jié)構(gòu)。在故障還原時(shí),通過(guò)首塊校驗(yàn)區(qū)段直接讀取原子事務(wù)的尾指針判斷該事務(wù)是否提交。
文件塊事務(wù)在還原時(shí),到ssd固定位置尋找事務(wù)元數(shù)據(jù)段最后一條記錄,從最后一條記錄開(kāi)始反向進(jìn)行掃描。根據(jù)事務(wù)元數(shù)據(jù)中的映射信息,逐個(gè)讀取事務(wù)中的所有物理塊,當(dāng)物理塊被讀取后,確認(rèn)物理塊校驗(yàn)區(qū)段中的事務(wù)標(biāo)識(shí)是否與當(dāng)前事務(wù)標(biāo)識(shí)一致,如果確定事務(wù)并未寫(xiě)完成,則進(jìn)行回滾。
在對(duì)原子事務(wù)進(jìn)行還原時(shí),首先將在首塊列表段找到正在運(yùn)行的原子事務(wù)的首塊,接著根據(jù)ssd類(lèi)型的不同,采用不同的策略判斷事務(wù)狀態(tài)。對(duì)于支持塊內(nèi)隨機(jī)編程的固態(tài)存儲(chǔ),根據(jù)原子事務(wù)首塊中存有的尾指針直接讀取原子事務(wù)的尾塊,從而從尾塊是否為空判斷出事務(wù)是否完成。對(duì)于僅支持順序編程的固態(tài)存儲(chǔ),通過(guò)從原子事務(wù)首塊中存儲(chǔ)的下一指針開(kāi)始逐個(gè)讀取原子事務(wù)所有物理塊數(shù)據(jù),如果最終原子事務(wù)所有物理塊構(gòu)成環(huán)狀結(jié)構(gòu),這表明事務(wù)已完成,否則將事務(wù)回滾。對(duì)需要回滾的原子事務(wù)中的所有塊標(biāo)記為無(wú)效,將已提交原子事務(wù)中所有塊的地址映射信息寫(xiě)入映射記錄段中。
轉(zhuǎn)換層中映射數(shù)據(jù)存儲(chǔ)在ssd的兩個(gè)位置,即映射記錄段和事務(wù)元數(shù)據(jù)段。事務(wù)元數(shù)據(jù)段中存儲(chǔ)了預(yù)分配的文件塊事務(wù)地址映射關(guān)系,這部分地址映射數(shù)據(jù)在事務(wù)元數(shù)據(jù)被回收之前被寫(xiě)回映射記錄段。對(duì)于文件塊事務(wù),寫(xiě)入前分配物理塊,將事務(wù)內(nèi)所有塊的地址映射信息寫(xiě)入事務(wù)元數(shù)據(jù)中。完成數(shù)據(jù)寫(xiě)入之后,將映射信息寫(xiě)入存儲(chǔ)器中。對(duì)于原子事務(wù),事務(wù)內(nèi)的所有塊寫(xiě)入ssd后,其映射信息首先在存儲(chǔ)器中更新,其次將被立即寫(xiě)入ssd中。啟動(dòng)時(shí),首先讀取事務(wù)元數(shù)據(jù)段中的映射數(shù)據(jù)并載入內(nèi)存,這部分映射數(shù)據(jù)將在內(nèi)存中常駐直至其被寫(xiě)回至映射記錄段。
本發(fā)明采用于下數(shù)據(jù)部署過(guò)程以緩解寫(xiě)性能下降問(wèn)題,即將文件劃分為固定大小的簇,并以簇為單位進(jìn)行均衡化。當(dāng)檢測(cè)到發(fā)生寫(xiě)性能下降后,通過(guò)動(dòng)態(tài)選擇將簇存儲(chǔ)在性能下降節(jié)點(diǎn)上的數(shù)據(jù)遷移到未下降的ssd節(jié)點(diǎn)上。基于上述數(shù)據(jù)部署方案,同時(shí)在數(shù)據(jù)初始部署時(shí)以簇為單位預(yù)留一部分ssd節(jié)點(diǎn)。當(dāng)某個(gè)ssd節(jié)點(diǎn)上發(fā)生寫(xiě)入問(wèn)題后,稱(chēng)為異常節(jié)點(diǎn),動(dòng)態(tài)的將簇存儲(chǔ)在異常節(jié)點(diǎn)上的數(shù)據(jù)遷移到預(yù)留節(jié)點(diǎn)上。
本發(fā)明利用寫(xiě)性能檢測(cè)模塊檢測(cè)ssd節(jié)點(diǎn)寫(xiě)性能下降。檢測(cè)模塊使用數(shù)據(jù)請(qǐng)求延遲作為指標(biāo)判斷ssd節(jié)點(diǎn)是否存在性能下降問(wèn)題。為了消除網(wǎng)絡(luò)延遲對(duì)于記錄的數(shù)據(jù)的影響,檢測(cè)模塊在記錄延遲時(shí)減去網(wǎng)絡(luò)層延遲,只記錄讀寫(xiě)層完成寫(xiě)請(qǐng)求造成的延遲。
假設(shè)li代表檢測(cè)模塊記錄的第i個(gè)寫(xiě)請(qǐng)求的延遲,則當(dāng)連續(xù)n個(gè)延遲的方差小于α?xí)r,也即:
稱(chēng)這n個(gè)連續(xù)的寫(xiě)請(qǐng)求延遲構(gòu)成了一個(gè)平臺(tái),其中延遲平均值
則代表該ssd節(jié)點(diǎn)出現(xiàn)了寫(xiě)性能下降,其中α和β是與ssd相關(guān)的參數(shù),而n根據(jù)檢測(cè)模塊的精度需求來(lái)確定。
在數(shù)據(jù)均衡化方面,使用區(qū)域映射表進(jìn)行管理,維護(hù)簇對(duì)應(yīng)的ssd節(jié)點(diǎn)之間的映射關(guān)系。當(dāng)某個(gè)簇位于ssd節(jié)點(diǎn)上的所有數(shù)據(jù)遷移至備用節(jié)點(diǎn)后,原有映射記錄與寫(xiě)時(shí)復(fù)制產(chǎn)生的新版本映射記錄進(jìn)行合并。此外,區(qū)域映射表還將數(shù)據(jù)請(qǐng)求重定向到對(duì)應(yīng)的ssd節(jié)點(diǎn),為了記錄對(duì)應(yīng)每個(gè)ssd節(jié)點(diǎn)上對(duì)應(yīng)文件的具體位置,區(qū)域映射表中的記錄以文件或數(shù)據(jù)庫(kù)的形式進(jìn)行存儲(chǔ),并使用散列索引存儲(chǔ)在內(nèi)存中。內(nèi)存中的映射記錄變化將被同步的寫(xiě)入存儲(chǔ)層以保證異常狀態(tài)下的一致性。
當(dāng)檢測(cè)模塊檢測(cè)到寫(xiě)性能下降后,分析器模塊選擇使用發(fā)生寫(xiě)性能下降的ssd節(jié)點(diǎn)的相應(yīng)簇進(jìn)行數(shù)據(jù)遷移。使用節(jié)點(diǎn)映射表節(jié)點(diǎn)映射表快速定位到每個(gè)ssd節(jié)點(diǎn)中存儲(chǔ)的簇,節(jié)點(diǎn)映射表和區(qū)域映射表之間是逆向映射關(guān)系。分析器從兩個(gè)方面對(duì)每一個(gè)簇進(jìn)行監(jiān)控:1)首先是每個(gè)簇落入的數(shù)據(jù)寫(xiě)請(qǐng)求總次數(shù),代表著這個(gè)簇的寫(xiě)頻度;2)其次是每個(gè)ssd節(jié)點(diǎn)上各個(gè)簇的寫(xiě)頻度排序,根據(jù)寫(xiě)頻度的排序,判斷出每個(gè)ssd節(jié)點(diǎn)上。當(dāng)發(fā)生寫(xiě)性能下降的ssd節(jié)點(diǎn)上的簇被選擇遷移時(shí),選取寫(xiě)請(qǐng)求數(shù)據(jù)量最少的節(jié)點(diǎn)作為遷移的目標(biāo)。
數(shù)據(jù)遷移初始化過(guò)程中,數(shù)據(jù)被切分為簇,分別用于追蹤文件塊和ssd節(jié)點(diǎn)之間的映射關(guān)系的區(qū)域映射表和節(jié)點(diǎn)映射表被初始化為空,并隨著簇被分配到不同ssd節(jié)點(diǎn)而不斷被追加記錄。初始化過(guò)程之后進(jìn)入一個(gè)循環(huán)服務(wù)進(jìn)程,接受并行存儲(chǔ)系統(tǒng)的讀寫(xiě)請(qǐng)求。在服務(wù)進(jìn)程中,區(qū)域映射表和節(jié)點(diǎn)映射表的內(nèi)容根據(jù)寫(xiě)請(qǐng)求進(jìn)行實(shí)時(shí)更新,同時(shí)檢測(cè)寫(xiě)性能下降是否發(fā)生。查詢(xún)區(qū)域映射表得到具體每個(gè)簇存儲(chǔ)ssd節(jié)點(diǎn)位置;對(duì)于寫(xiě)請(qǐng)求,分配一個(gè)新的簇用于存儲(chǔ)數(shù)據(jù),同時(shí)新的記錄被追加到區(qū)域映射表和節(jié)點(diǎn)映射表中。一旦寫(xiě)性能下降在某個(gè)ssd節(jié)點(diǎn)被檢測(cè)到之后,節(jié)點(diǎn)映射表用于確定異常節(jié)點(diǎn)上將要被遷移的簇以及遷移簇的目的ssd節(jié)點(diǎn)。接著寫(xiě)頻度較高的簇被遷移到被選擇的寫(xiě)入數(shù)據(jù)量較少的ssd節(jié)點(diǎn)。對(duì)于發(fā)出遷移請(qǐng)求的ssd節(jié)點(diǎn),禁止被選擇為數(shù)據(jù)遷移的目的ssd節(jié)點(diǎn)。
在篡改檢測(cè)環(huán)節(jié),本發(fā)明將塊級(jí)規(guī)則檢測(cè)信息直接存儲(chǔ)在轉(zhuǎn)換層中,使用單個(gè)比特位標(biāo)志是否需要進(jìn)行進(jìn)一步規(guī)則檢測(cè),減少了不必要的簇檢測(cè),并且在數(shù)據(jù)擦除前就進(jìn)行篡改檢測(cè),本發(fā)明根據(jù)不同的用戶(hù)身份具有不同的使用模式,在管理員模式下,將塊級(jí)規(guī)則寫(xiě)入設(shè)備內(nèi)部特定位置,并保證這部分?jǐn)?shù)據(jù)對(duì)普通用戶(hù)不可見(jiàn)。管理員根據(jù)惡意軟件的行為制定基于文件語(yǔ)義的檢測(cè)規(guī)則,通過(guò)簇與文件語(yǔ)義轉(zhuǎn)換層將文件語(yǔ)義轉(zhuǎn)換成簇語(yǔ)義,最后將檢測(cè)規(guī)則發(fā)送給設(shè)備。
將ssd內(nèi)部存儲(chǔ)空間劃分為用戶(hù)數(shù)據(jù)存儲(chǔ)區(qū)與和規(guī)則存儲(chǔ)區(qū),其中,用戶(hù)數(shù)據(jù)存儲(chǔ)區(qū)使用普通的塊設(shè)備接口進(jìn)行訪問(wèn),但是對(duì)規(guī)則存儲(chǔ)區(qū)的修改需要使用專(zhuān)用接口。規(guī)則存儲(chǔ)區(qū)存儲(chǔ)塊級(jí)檢測(cè)規(guī)則,同時(shí)還存儲(chǔ)塊級(jí)存儲(chǔ)檢測(cè)到的異常行為,防止用戶(hù)程序?qū)σ?guī)則存儲(chǔ)區(qū)的數(shù)據(jù)進(jìn)行修改。檢測(cè)規(guī)則被存儲(chǔ)在設(shè)備的固定位置,同時(shí)在設(shè)備啟動(dòng)時(shí)隨著轉(zhuǎn)換層數(shù)據(jù)被一起載入到設(shè)備內(nèi)部存儲(chǔ)器中。
綜上所述,本發(fā)明提出了一種海量數(shù)據(jù)容災(zāi)備份方法,實(shí)現(xiàn)了高性能、低功耗的ssd與高帶寬容災(zāi)分布式存儲(chǔ)架構(gòu)的有機(jī)結(jié)合。
顯然,本領(lǐng)域的技術(shù)人員應(yīng)該理解,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算系統(tǒng)來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算系統(tǒng)上,或者分布在多個(gè)計(jì)算系統(tǒng)所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算系統(tǒng)可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)系統(tǒng)中由計(jì)算系統(tǒng)來(lái)執(zhí)行。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
應(yīng)當(dāng)理解的是,本發(fā)明的上述具體實(shí)施方式僅僅用于示例性說(shuō)明或解釋本發(fā)明的原理,而不構(gòu)成對(duì)本發(fā)明的限制。因此,在不偏離本發(fā)明的精神和范圍的情況下所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。此外,本發(fā)明所附權(quán)利要求旨在涵蓋落入所附權(quán)利要求范圍和邊界、或者這種范圍和邊界的等同形式內(nèi)的全部變化和修改例。