本發(fā)明涉及大數(shù)據(jù)與云存儲(chǔ)領(lǐng)域,特別是涉及一種基于異或操作的三盤容錯(cuò)陣列的可擴(kuò)展方法及系統(tǒng)。
背景技術(shù):
:在大型數(shù)據(jù)中心,海量數(shù)據(jù)存儲(chǔ)在大量冗余磁盤中,用戶可以并行訪問其中的數(shù)據(jù)。這些冗余磁盤被稱為獨(dú)立磁盤冗余陣列(RAID)。近來,三盤容錯(cuò)陣列(3DFTs)在大型數(shù)據(jù)中心中大受歡迎,因?yàn)樗鼈兛梢蕴峁└呖煽啃院偷统杀鹃_銷。在過去二十年中,科學(xué)家提出許多糾刪碼來達(dá)到三盤容錯(cuò)的效果,包括最大距離可分碼(MDS)和non-MDS編碼。MDS編碼在給定一定數(shù)量的冗余下,可以提供最大的數(shù)據(jù)保護(hù)。一些編碼,如STAR編碼,Triple-Star編碼,TIP-Code編碼和EH-Code編碼的編碼方式由三種不同的校驗(yàn)(行校驗(yàn)、斜校驗(yàn)、反向斜校驗(yàn))組成,從而提供高可靠性。Non-MDS編碼由于犧牲了部分存儲(chǔ)效率,可以大搞更高的性能或者可靠性。近來,隨著云計(jì)算的發(fā)展,磁盤陣列的可擴(kuò)展性被廣泛討論。這是因?yàn)椋?、在基于MDS編碼的三盤容錯(cuò)陣列中增加額外的磁盤可以提高存儲(chǔ)效率,減少成本花費(fèi)。2、有著新加磁盤的磁盤陣列可以提供更高的I/O吞吐量和更大的容量。更多的數(shù)據(jù)可以并行地訪問,減少了I/O開銷,提高了整個(gè)系統(tǒng)的性能。3、三盤容錯(cuò)陣列被廣泛應(yīng)用在大型數(shù)據(jù)中心,是因?yàn)樗哂懈呖煽啃???煽啃栽诖笮蛿?shù)據(jù)中心中扮演著重要的角色。不幸的是,現(xiàn)有的擴(kuò)展方法不能很好地適用于基于異或操作的三盤容錯(cuò)陣列。一些方法(如Round-Robin(RR)和Semi-RR)已經(jīng)被證明,在擴(kuò)展過程中,它們?cè)跀?shù)據(jù)遷移和校驗(yàn)修改上產(chǎn)生了大量的I/O開銷。Semi-RR同時(shí)也遭受著擴(kuò)展后不均衡的數(shù)據(jù)分布問題。其他方法為了在糾刪碼這種復(fù)雜的布局下平衡數(shù)據(jù)分布花費(fèi)了大量的I/O,如SDM和RS6。SDM犧牲了一部分條帶,使得在一個(gè)條帶集中,數(shù)據(jù)分布是均衡的。它可以處理由兩種不同校驗(yàn)編碼而成的編碼(但在基于異或操作的三盤容錯(cuò)編碼中有三種不同的校驗(yàn)),這會(huì)導(dǎo)致校驗(yàn)修改和I/O開銷很高。RS6是一種針對(duì)RDP編碼的RAID-6擴(kuò)展方法,它會(huì)導(dǎo)致額外的數(shù)據(jù)遷移開銷。在一些編碼下,RS6對(duì)編碼擴(kuò)展后,使得數(shù)據(jù)分布不均衡,如STAR編碼和TIP-Code編碼。一些其他的方法,如FastScale,GSR和CRAID,它們是用于RAID-0或RAID-5陣列,不能運(yùn)用到三盤容錯(cuò)陣列??梢?,現(xiàn)有的擴(kuò)展方法均不適合基于異或操作的三盤容錯(cuò)陣列的擴(kuò)展,因此,實(shí)有必要提出一種技術(shù)手段,以解決上述問題。技術(shù)實(shí)現(xiàn)要素:為克服上述現(xiàn)有技術(shù)存在的不足,本發(fā)明之目的在于提供一種三盤容錯(cuò)陣列的可擴(kuò)展方法及系統(tǒng),其可以運(yùn)用到基于異或操作的三盤容錯(cuò)陣列上,使得擴(kuò)展后的數(shù)據(jù)分布是均衡的。為達(dá)上述及其它目的,本發(fā)明提出一種三盤容錯(cuò)陣列的可擴(kuò)展方法,包括如下步驟:準(zhǔn)備階段,從存儲(chǔ)系統(tǒng)中收集相關(guān)的參數(shù),為接下來的兩個(gè)階段計(jì)算必要的參數(shù);遷移階段,選擇一部分條帶作為條帶集,并且根據(jù)準(zhǔn)備階段中計(jì)算出的參數(shù),在每個(gè)條帶中選出一些數(shù)據(jù)行,用來遷移至新加的磁盤中;合并階段,將空的條帶聚合。進(jìn)一步地,在準(zhǔn)備階段,根據(jù)三盤容錯(cuò)陣列中MDS編碼的布局和它的配置參數(shù),計(jì)算出ns,ne和L,提供給以后的兩個(gè)階段,其中,ns表示一個(gè)條帶集中的條帶個(gè)數(shù),ne表示在該條帶集中被設(shè)置為空行的總數(shù)量,L表示一個(gè)條帶中,空行的最小數(shù)量。進(jìn)一步地,遷移階段包括如下步驟:將條帶集讀入緩存;根據(jù)校驗(yàn)塊的最小修改量,對(duì)合適的數(shù)據(jù)塊進(jìn)行遷移;更新和重新計(jì)算校驗(yàn)塊。進(jìn)一步地,將整個(gè)條帶集的數(shù)據(jù)塊和校驗(yàn)塊一次性讀入位于內(nèi)存的緩存X,條帶集中被選中的空行被放入緩存Y中。進(jìn)一步地,所述根據(jù)校驗(yàn)塊的最小修改量,對(duì)合適的數(shù)據(jù)塊進(jìn)行遷移的步驟對(duì)行校驗(yàn)、斜校驗(yàn)、反向斜校驗(yàn)的關(guān)系進(jìn)行分析后,改變一些數(shù)據(jù)塊的位置,使得這些塊仍然在它們?cè)瓉淼男r?yàn)鏈中。進(jìn)一步地,所述更新和重新計(jì)算校驗(yàn)塊步驟中,通過計(jì)算原始行校驗(yàn)塊和新加的數(shù)據(jù)塊的異或和來更新行校驗(yàn)塊。進(jìn)一步地,所述更新和重新計(jì)算校驗(yàn)塊步驟中,更新斜校驗(yàn)需要計(jì)算原始斜校驗(yàn)塊,相關(guān)空行中的數(shù)據(jù)塊和相應(yīng)已更新的行校驗(yàn)塊的異或和。進(jìn)一步地,所述更新和重新計(jì)算校驗(yàn)塊步驟中,根據(jù)糾刪碼的編碼公式重新計(jì)算反向斜校驗(yàn)塊。進(jìn)一步地,所述合并階段包括如下步驟:確定哪些條帶需要被合并或被拆分,使得總體的計(jì)算開銷最??;在條帶集中或條帶集之間合并條帶。為達(dá)到上述目的,本發(fā)明還提供一種三盤容錯(cuò)陣列的可擴(kuò)展系統(tǒng),包括:準(zhǔn)備單元,從存儲(chǔ)系統(tǒng)中收集相關(guān)的參數(shù),為遷移單元以及合并單元提供必要的參數(shù);遷移單元,選擇一部分條帶作為條帶集,并且根據(jù)階段一中計(jì)算出的參數(shù),在每個(gè)條帶中選出一些數(shù)據(jù)行,用來遷移至新加的磁盤中,在遷移過程中,數(shù)據(jù)塊的移動(dòng)是由不同校驗(yàn)之間的關(guān)聯(lián)所決定的;合并單元,用于將空的條帶聚合。與現(xiàn)有技術(shù)相比,本發(fā)明一種三盤容錯(cuò)陣列的可擴(kuò)展方法及系統(tǒng)根據(jù)不同校驗(yàn)的關(guān)聯(lián)性,選擇合適的數(shù)據(jù)塊進(jìn)行遷移,從而達(dá)到最小的數(shù)據(jù)遷移和校驗(yàn)修改的數(shù)量,同時(shí),本發(fā)明將具有空數(shù)據(jù)塊的條帶進(jìn)行合并,使得校驗(yàn)修改的I/O開銷降低,因此本發(fā)明可以確保擴(kuò)展后數(shù)據(jù)分布是均衡的,擴(kuò)展過程中的I/O開銷較小。附圖說明圖1為本發(fā)明一種三盤容錯(cuò)陣列的可擴(kuò)展方法的步驟流程圖;圖2為該方法的總體結(jié)構(gòu)圖;圖3該方法的實(shí)例,表示擴(kuò)展前/后條帶集中的條帶0;圖4該方法的實(shí)例,表示擴(kuò)展前/后條帶集中的條帶1;圖5該方法的實(shí)例,表示擴(kuò)展前/后條帶集中的條帶2;圖6該方法的實(shí)例,表示條帶集中的條帶0和1的合并過程;圖7為本發(fā)明一種三盤容錯(cuò)陣列的可擴(kuò)展系統(tǒng)的系統(tǒng)架構(gòu)圖。具體實(shí)施方式以下通過特定的具體實(shí)例并結(jié)合附圖說明本發(fā)明的實(shí)施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭示的內(nèi)容輕易地了解本發(fā)明的其它優(yōu)點(diǎn)與功效。本發(fā)明亦可通過其它不同的具體實(shí)例加以施行或應(yīng)用,本說明書中的各項(xiàng)細(xì)節(jié)亦可基于不同觀點(diǎn)與應(yīng)用,在不背離本發(fā)明的精神下進(jìn)行各種修飾與變更。圖1為本發(fā)明一種三盤容錯(cuò)陣列的可擴(kuò)展方法的步驟流程圖。如圖1所示,本發(fā)明一種三盤容錯(cuò)陣列的可擴(kuò)展方法,包括如下步驟:步驟101,階段一,即準(zhǔn)備階段:從存儲(chǔ)系統(tǒng)中收集相關(guān)的參數(shù),為接下來的兩個(gè)階段計(jì)算必要的參數(shù)。步驟102,階段二,即遷移階段:選擇一部分條帶作為條帶集,并且根據(jù)階段一中計(jì)算出的參數(shù),在每個(gè)條帶中選出一些數(shù)據(jù)行,用來遷移至新加的磁盤中。在遷移過程中,數(shù)據(jù)塊的移動(dòng)是由不同校驗(yàn)之間的關(guān)聯(lián)所決定的,這可以保證均衡的數(shù)據(jù)分布。步驟103,階段三,即合并階段:將空的條帶聚合起來,減少校驗(yàn)修改的數(shù)量和I/O開銷。圖2為本發(fā)明一種三盤容錯(cuò)陣列的可擴(kuò)展方法之較佳實(shí)施例的總體結(jié)構(gòu)圖,以上三階段分別對(duì)應(yīng)圖2中左、中、右部分,圖3為該方法的實(shí)例,表示擴(kuò)展前/后條帶集中的條帶0;圖4為該方法的實(shí)例,表示擴(kuò)展前/后條帶集中的條帶1;圖5為該方法的實(shí)例,表示擴(kuò)展前/后條帶集中的條帶2;圖6為該方法的實(shí)例,表示條帶集中的條帶0和1的合并過程。以下將配合圖2-圖6通過具體的實(shí)例來進(jìn)一步說明本發(fā)明:一、準(zhǔn)備階段在該階段中,為接下來的兩步計(jì)算了必要的參數(shù)。根據(jù)三盤容錯(cuò)陣列中MDS編碼的布局和它的配置參數(shù),可以用以下公式計(jì)算出ns,ne和L,其中,ns表示一個(gè)條帶集中的條帶個(gè)數(shù),ne表示在該條帶集中被設(shè)置為空行的總數(shù)量,L表示一個(gè)條帶中,空行的最小數(shù)量。根據(jù)圖2所示,一個(gè)條帶集包含了許多條帶。每個(gè)條帶中,部分行被設(shè)為“空行”,為了達(dá)到數(shù)據(jù)均衡,它們會(huì)被用來遷移到其他盤。ns=lcm{m×nr,nd+m}m×nr]]>ne=lcm{m×nr,nd+m}nd+m]]>L=1m×nr≤nd+mfloor(m×nrnd+m)m×nr>nd+m]]>以基于Triple-Star編碼的三盤容錯(cuò)陣列從7塊磁盤擴(kuò)展至9塊磁盤為例。nd=4,nr=4和m=2,其中,nd表示擴(kuò)展前磁盤陣列中數(shù)據(jù)盤的數(shù)量,nr表示擴(kuò)展前一個(gè)條帶中的行數(shù)量,m表示擴(kuò)展磁盤的數(shù)量。根據(jù)上述公式,可計(jì)算得到ns=3,ne=4,L=1。這表示一個(gè)條帶集包含三個(gè)條帶,一共有4行數(shù)據(jù)被設(shè)為空行,用來平衡數(shù)據(jù)負(fù)載(在空行中的數(shù)據(jù)塊被遷移至其他磁盤)。每個(gè)條帶至少包含一個(gè)空行。因此,在擴(kuò)展后,條帶集中三個(gè)條帶對(duì)應(yīng)的空行的數(shù)量為別是1,1,2(1+1+2=4=ne)。二、遷移階段在上一階段取得相關(guān)參數(shù)后,這個(gè)階段對(duì)條帶集中合適的數(shù)據(jù)塊進(jìn)行遷移??煞譃槿缦氯竭M(jìn)行操作:(1)將條帶集讀入緩存。為了減少擴(kuò)展過程中讀I/O操作的數(shù)量,本發(fā)明將整個(gè)條帶集的數(shù)據(jù)塊和校驗(yàn)塊一次性讀入位于內(nèi)存的緩存X。條帶集中被選中的空行被放入緩存Y中。在一個(gè)條帶集中,讀一塊磁盤上的數(shù)據(jù)是一次順序讀,對(duì)應(yīng)一次讀I/O。(2)遷移數(shù)據(jù)塊本發(fā)明根據(jù)校驗(yàn)塊的最小修改量,對(duì)合適的數(shù)據(jù)塊進(jìn)行遷移。在對(duì)三種不同的校驗(yàn)塊(行校驗(yàn)、斜校驗(yàn)、反向斜校驗(yàn))的關(guān)系進(jìn)行分析后,本發(fā)明改變了一些數(shù)據(jù)塊的位置,使得這些塊仍然在它們?cè)瓉淼男r?yàn)鏈中。這種做法可以確保修改盡可能少的校驗(yàn)塊。本發(fā)明給出了STAR編碼和Triple-Star編碼關(guān)于行校驗(yàn)和斜校驗(yàn)的遷移算法,該算法可以將數(shù)據(jù)遷移的數(shù)量和校驗(yàn)修改的計(jì)算最小化。第行被看做是基礎(chǔ)行,這一行不需要在水平方向上移動(dòng)任何數(shù)據(jù)塊。接下來,改變了同一塊磁盤上空的數(shù)據(jù)塊和位于空行上的數(shù)據(jù)塊之間的映射關(guān)系,這不會(huì)引發(fā)數(shù)據(jù)遷移開銷。剩下的位于空行的數(shù)據(jù)塊以輪詢順序被寫入空的數(shù)據(jù)塊中。其中,STAR編碼和Triple-Star編碼關(guān)于行校驗(yàn)和斜校驗(yàn)的遷移算法如下:得到并計(jì)算以下參數(shù)的值,n,m,nrnd和L,新加磁盤的標(biāo)號(hào)從到設(shè)如果并且并且i不是空行的ID,i,j分別表示數(shù)據(jù)塊在條帶中的行號(hào)和磁盤號(hào),則如果i<rb則i'=i,j'=j(luò)-m否則如果i>rb則i'=i,j'=j(luò)+m例如,如圖3-5所示,這表示在每個(gè)條帶中,第1行不移動(dòng)任何數(shù)據(jù)塊。新加的磁盤被標(biāo)號(hào)為到新加入磁盤后,塊2(C0,2)用C0,4表示。塊2(C0,4,i=0,j=4)滿足上述算法的條件,因此該方法將其遷移至C0,2(i'=0,j=4-2=2)。類似的,該方法將圓形標(biāo)記的數(shù)據(jù)塊(如塊9,18和25等)遷移至不同的磁盤,但它們?nèi)匀辉谠瓉淼男行r?yàn)鏈和斜校驗(yàn)鏈。接下來,本發(fā)明改變了同一塊磁盤上空的數(shù)據(jù)塊和位于空行上的數(shù)據(jù)塊之間的映射關(guān)系。從緩存Y中選出菱形標(biāo)記的數(shù)據(jù)塊(如塊14,13和30等),寫入同一磁盤的空數(shù)據(jù)塊中。因此,這可以將數(shù)據(jù)遷移開銷最小化。最后緩存Y中剩下的數(shù)據(jù)塊(如塊12,15,18和31等)以輪詢順序被寫入空的數(shù)據(jù)塊。在極少數(shù)情況下,緩存Y中的數(shù)據(jù)塊不足以填滿同一磁盤的空數(shù)據(jù)塊,這會(huì)增加一部分?jǐn)?shù)據(jù)遷移數(shù)量。(3)更新和重新計(jì)算校驗(yàn)塊三種校驗(yàn)塊需要被更新或者重新計(jì)算。行校驗(yàn)塊可以被一次性寫入校驗(yàn)盤,而另外兩種校驗(yàn)塊需要被暫時(shí)存放在緩存X。更新行校驗(yàn)塊這里通過計(jì)算原始行校驗(yàn)塊和新加的數(shù)據(jù)塊的異或和來更新行校驗(yàn)塊。接下來,我們將其一次性寫入行校驗(yàn)盤,因?yàn)樾行r?yàn)在合并階段不會(huì)被改變。例如,V12和V14表示數(shù)據(jù)塊12和14的值。更新斜校驗(yàn)塊更新斜校驗(yàn)需要計(jì)算原始斜校驗(yàn)塊,相關(guān)空行中的數(shù)據(jù)塊和相應(yīng)已更新的行校驗(yàn)塊的異或和。斜向部分新增加的斜校驗(yàn)可以使用緩存X中的數(shù)據(jù)進(jìn)行計(jì)算。例如,接下來,將斜校驗(yàn)塊放入緩存X。重新計(jì)算反向斜校驗(yàn)塊根據(jù)糾刪碼的編碼公式,這里使用緩存X中的數(shù)據(jù)塊重新計(jì)算反向斜校驗(yàn)塊,并將其放入緩存X中。到目前為止,在一個(gè)條帶集中的擴(kuò)展過程已經(jīng)完成。如果某些數(shù)據(jù)在擴(kuò)展過程中丟失了,它們可以通過緩存X和Y被恢復(fù)出來。三、合并階段本發(fā)明需要合并階段是因?yàn)樗梢越档托r?yàn)修改的I/O數(shù)量。因?yàn)榫哂锌招?或空數(shù)據(jù)塊)的條帶仍然需要校驗(yàn)塊進(jìn)行數(shù)據(jù)保護(hù),校驗(yàn)塊的數(shù)量和一個(gè)完整條帶中需要的校驗(yàn)塊數(shù)量是一樣的。因此我們將條帶合并,使得所有校驗(yàn)塊得以充分利用,并且降低校驗(yàn)修改和I/O的開銷。合并階段需要以下步驟:1)確定哪些條帶需要被合并或被拆分,使得總體的計(jì)算開銷最小。在前一階段之后,條帶集中每個(gè)條帶的行數(shù)是知道的。本發(fā)明選擇出一些恰好匹配的條帶進(jìn)行合并,形成一個(gè)完整條帶。如果沒有合適的條帶,則對(duì)條帶進(jìn)行拆分。由于I/O開銷的降低,拆分所帶來的計(jì)算開銷是可以承擔(dān)的,不會(huì)對(duì)擴(kuò)展過程產(chǎn)生影響。以基于Triple-Star編碼的三盤容錯(cuò)陣列從7塊磁盤擴(kuò)展至9塊磁盤為例。如圖3-4所示,假設(shè)有三個(gè)條帶集I,II和III,每個(gè)條帶集包含條帶0,1和2。條帶集I中的條帶0和1可以合并成一個(gè)完整的條帶,如圖6所示。條帶集I中的條帶2可以和條帶集II和II中的條帶2進(jìn)行合并。因此,在合并完成后,擴(kuò)展前3×3=9個(gè)具有7塊磁盤的條帶變成了1×3+1=4個(gè)具有9塊磁盤的條帶。2)在條帶集中或條帶集之間合并條帶該步驟可以被分成兩部分:合并數(shù)據(jù)塊和行校驗(yàn)塊;合并斜校驗(yàn)和反向斜校驗(yàn),并將其一次性寫入校驗(yàn)盤。在第一部分中,合并數(shù)據(jù)塊和行校驗(yàn)塊的操作只改變了數(shù)據(jù)塊和行校驗(yàn)塊的行標(biāo)號(hào),不會(huì)產(chǎn)生額外的I/O開銷。塊Ci,j(條帶a)被映射到塊Ci+x,j(條帶b),x是條帶b中的行的數(shù)量(不包含空行)。如圖3-5所示,塊C1,2(條帶1)被映射到C4,2(條帶0)的位置,x=3。在第二部分中,合并斜校驗(yàn)和反向斜校驗(yàn),并將其一次性寫入校驗(yàn)盤。我們可以簡(jiǎn)單地通過異或運(yùn)算計(jì)算得出上述兩種校驗(yàn)。行校驗(yàn)塊Ci,p+1(條帶a)和(條帶b)的值相加得到一個(gè)新的Ci,p+1,x是條帶a中的行的數(shù)量(不包含空行)。即如圖3-5所示,R'0可以用條帶0中C0,8表示。在條帶1中,R'10可以用條帶0中C4,8表示。在條帶1中的數(shù)據(jù)和行校驗(yàn)塊被映射到條帶0后,因此更新條帶0中的C4,8是計(jì)算條帶0中原始的C0,8和條帶1中的C4,8的異或和(x=3,p=7)。反向斜校驗(yàn)塊的計(jì)算和斜校驗(yàn)塊的計(jì)算類似。接下來,將他們寫入校驗(yàn)盤并釋放緩存空間。上述操作可以并行進(jìn)行,加速了整個(gè)擴(kuò)展進(jìn)程。圖7為本發(fā)明一種三盤容錯(cuò)陣列的可擴(kuò)展系統(tǒng)的系統(tǒng)架構(gòu)圖。如圖7所示,本發(fā)明一種三盤容錯(cuò)陣列的可擴(kuò)展系統(tǒng),包括準(zhǔn)備單元701、遷移單元702以及合并單元703。其中,準(zhǔn)備單元701從存儲(chǔ)系統(tǒng)中收集相關(guān)的參數(shù),為遷移單元702以及合并單元703提供必要的參數(shù);遷移單元702選擇一部分條帶作為條帶集,并且根據(jù)階段一中計(jì)算出的參數(shù),在每個(gè)條帶中選出一些數(shù)據(jù)行,用來遷移至新加的磁盤中,在遷移過程中,數(shù)據(jù)塊的移動(dòng)是由不同校驗(yàn)之間的關(guān)聯(lián)所決定的,這可以保證均衡的數(shù)據(jù)分布;合并單元703,用于將空的條帶聚合,以減少校驗(yàn)修改的數(shù)量和I/O開銷。準(zhǔn)備單元701根據(jù)三盤容錯(cuò)陣列中MDS編碼的布局和它的配置參數(shù),可以用以下公式計(jì)算出ns,ne和L。根據(jù)圖2所示,一個(gè)條帶集包含了許多條帶。每個(gè)條帶中,部分行被設(shè)為“空行”,為了達(dá)到數(shù)據(jù)均衡,它們會(huì)被用來遷移到其他盤。ns=lcm{m×nr,nd+m}m×nr]]>ne=lcm{m×nr,nd+m}nd+m]]>L=1m×nr≤nd+mfloor(m×nrnd+m)m×nr>nd+m]]>遷移單元702對(duì)條帶集中合適的數(shù)據(jù)塊進(jìn)行遷移,可分為如下三步進(jìn)行操作:(1)將條帶集讀入緩存。為了減少擴(kuò)展過程中讀I/O操作的數(shù)量,遷移單元702將整個(gè)條帶集的數(shù)據(jù)塊和校驗(yàn)塊一次性讀入位于內(nèi)存的緩存X。條帶集中被選中的空行被放入緩存Y中。在一個(gè)條帶集中,讀一塊磁盤上的數(shù)據(jù)是一次順序讀,對(duì)應(yīng)一次讀I/O。(2)遷移數(shù)據(jù)塊遷移單元702根據(jù)校驗(yàn)塊的最小修改量,對(duì)合適的數(shù)據(jù)塊進(jìn)行遷移。在對(duì)三種不同的校驗(yàn)塊(行校驗(yàn)、斜校驗(yàn)、反向斜校驗(yàn))的關(guān)系進(jìn)行分析后,改變了一些數(shù)據(jù)塊的位置,使得這些塊仍然在它們?cè)瓉淼男r?yàn)鏈中。這種做法可以確保修改盡可能少的校驗(yàn)塊。遷移單元702給出了STAR編碼和Triple-Star編碼關(guān)于行校驗(yàn)和斜校驗(yàn)的遷移算法,該算法可以將數(shù)據(jù)遷移的數(shù)量和校驗(yàn)修改的計(jì)算最小化。第行被看做是基礎(chǔ)行,這一行不需要在水平方向上移動(dòng)任何數(shù)據(jù)塊。接下來,改變了同一塊磁盤上空的數(shù)據(jù)塊和位于空行上的數(shù)據(jù)塊之間的映射關(guān)系,這不會(huì)引發(fā)數(shù)據(jù)遷移開銷。剩下的位于空行的數(shù)據(jù)塊以輪詢順序被寫入空的數(shù)據(jù)塊中。其中,STAR編碼和Triple-Star編碼關(guān)于行校驗(yàn)和斜校驗(yàn)的遷移算法如下:得到并計(jì)算以下參數(shù)的值,n,m,nrnd和L,新加磁盤的標(biāo)號(hào)從到設(shè)如果并且并且i不是空行的ID則如果i<rb則i'=i,j'=j(luò)-m否則如果i>rb則i'=i,j'=j(luò)+m例如,如圖3-5所示,這表示在每個(gè)條帶中,第1行不移動(dòng)任何數(shù)據(jù)塊。新加的磁盤被標(biāo)號(hào)為到新加入磁盤后,塊2(C0,2)用C0,4表示。塊2(C0,4,i=0,j=4)滿足上述算法的條件,因此遷移單元702將其遷移至C0,2(i'=0,j=4-2=2)。類似的,遷移單元702將圓形標(biāo)記的數(shù)據(jù)塊(如塊9,18和25等)遷移至不同的磁盤,但它們?nèi)匀辉谠瓉淼男行r?yàn)鏈和斜校驗(yàn)鏈。接下來,遷移單元702改變了同一塊磁盤上空的數(shù)據(jù)塊和位于空行上的數(shù)據(jù)塊之間的映射關(guān)系。從緩存Y中選出菱形標(biāo)記的數(shù)據(jù)塊(如塊14,13和30等),寫入同一磁盤的空數(shù)據(jù)塊中。因此,這可以將數(shù)據(jù)遷移開銷最小化。最后緩存Y中剩下的數(shù)據(jù)塊(如塊12,15,18和31等)以輪詢順序被寫入空的數(shù)據(jù)塊。在極少數(shù)情況下,緩存Y中的數(shù)據(jù)塊不足以填滿同一磁盤的空數(shù)據(jù)塊,這會(huì)增加一部分?jǐn)?shù)據(jù)遷移數(shù)量。(3)更新和重新計(jì)算校驗(yàn)塊三種校驗(yàn)塊需要被更新或者重新計(jì)算。行校驗(yàn)塊可以被一次性寫入校驗(yàn)盤,而另外兩種校驗(yàn)塊需要被暫時(shí)存放在緩存X。更新行校驗(yàn)塊這里通過計(jì)算原始行校驗(yàn)塊和新加的數(shù)據(jù)塊的異或和來更新行校驗(yàn)塊。接下來,我們將其一次性寫入行校驗(yàn)盤,因?yàn)樾行r?yàn)在合并階段不會(huì)被改變。例如,V12和V14表示數(shù)據(jù)塊12和14的值。更新斜校驗(yàn)塊更新斜校驗(yàn)需要計(jì)算原始斜校驗(yàn)塊,相關(guān)空行中的數(shù)據(jù)塊和相應(yīng)已更新的行校驗(yàn)塊的異或和。斜向部分新增加的斜校驗(yàn)可以使用緩存X中的數(shù)據(jù)進(jìn)行計(jì)算。例如,接下來,將斜校驗(yàn)塊放入緩存X。重新計(jì)算反向斜校驗(yàn)塊根據(jù)糾刪碼的編碼公式,這里使用緩存X中的數(shù)據(jù)塊重新計(jì)算反向斜校驗(yàn)塊,并將其放入緩存X中。到目前為止,在一個(gè)條帶集中的擴(kuò)展過程已經(jīng)完成。如果某些數(shù)據(jù)在擴(kuò)展過程中丟失了,它們可以通過緩存X和Y被恢復(fù)出來。合并單元703將條帶合并,使得所有校驗(yàn)塊得以充分利用,并且降低校驗(yàn)修改和I/O的開銷。合并單元需要以下步驟:1)確定哪些條帶需要被合并或被拆分,使得總體的計(jì)算開銷最小。在前一階段之后,條帶集中每個(gè)條帶的行數(shù)是知道的。本發(fā)明選擇出一些恰好匹配的條帶進(jìn)行合并,形成一個(gè)完整條帶。如果沒有合適的條帶,則對(duì)條帶進(jìn)行拆分。由于I/O開銷的降低,拆分所帶來的計(jì)算開銷是可以承擔(dān)的,不會(huì)對(duì)擴(kuò)展過程產(chǎn)生影響。以基于Triple-Star編碼的三盤容錯(cuò)陣列從7塊磁盤擴(kuò)展至9塊磁盤為例。如圖3-4所示,假設(shè)有三個(gè)條帶集I,II和III,每個(gè)條帶集包含條帶0,1和2。條帶集I中的條帶0和1可以合并成一個(gè)完整的條帶,如圖6所示。條帶集I中的條帶2可以和條帶集II和II中的條帶2進(jìn)行合并。因此,在合并完成后,擴(kuò)展前3×3=9個(gè)具有7塊磁盤的條帶變成了1×3+1=4個(gè)具有9塊磁盤的條帶。2)在條帶集中或條帶集之間合并條帶該步驟可以被分成兩部分:合并數(shù)據(jù)塊和行校驗(yàn)塊;合并斜校驗(yàn)和反向斜校驗(yàn),并將其一次性寫入校驗(yàn)盤。在第一部分中,合并數(shù)據(jù)塊和行校驗(yàn)塊的操作只改變了數(shù)據(jù)塊和行校驗(yàn)塊的行標(biāo)號(hào),不會(huì)產(chǎn)生額外的I/O開銷。塊Ci,j(條帶a)被映射到塊Ci+x,j(條帶b),x是條帶b中的行的數(shù)量(不包含空行)。如圖3-5所示,塊C1,2(條帶1)被映射到C4,2(條帶0)的位置,x=3。在第二部分中,合并斜校驗(yàn)和反向斜校驗(yàn),并將其一次性寫入校驗(yàn)盤。我們可以簡(jiǎn)單地通過異或運(yùn)算計(jì)算得出上述兩種校驗(yàn)。行校驗(yàn)塊Ci,p+1(條帶a)和(條帶b)的值相加得到一個(gè)新的Ci,p+1,x是條帶a中的行的數(shù)量(不包含空行)。即如圖3-5所示,R'0可以用條帶0中C0,8表示。在條帶1中,R'10可以用條帶0中C4,8表示。在條帶1中的數(shù)據(jù)和行校驗(yàn)塊被映射到條帶0后,因此更新條帶0中的C4,8是計(jì)算條帶0中原始的C0,8和條帶1中的C4,8的異或和(x=3,p=7)。反向斜校驗(yàn)塊的計(jì)算和斜校驗(yàn)塊的計(jì)算類似。接下來,將他們寫入校驗(yàn)盤并釋放緩存空間。上述操作可以并行進(jìn)行,加速了整個(gè)擴(kuò)展進(jìn)程。綜上所述,本發(fā)明一種三盤容錯(cuò)陣列的可擴(kuò)展方法及系統(tǒng)根據(jù)不同校驗(yàn)的關(guān)聯(lián)性,選擇合適的數(shù)據(jù)塊進(jìn)行遷移,從而達(dá)到最小的數(shù)據(jù)遷移和校驗(yàn)修改的數(shù)量,同時(shí),本發(fā)明將具有空數(shù)據(jù)塊的條帶進(jìn)行合并,使得校驗(yàn)修改的I/O開銷降低,因此本發(fā)明可以確保擴(kuò)展后數(shù)據(jù)分布是均衡的,擴(kuò)展過程中的I/O開銷較小。上述實(shí)施例僅例示性說明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何本領(lǐng)域技術(shù)人員均可在不違背本發(fā)明的精神及范疇下,對(duì)上述實(shí)施例進(jìn)行修飾與改變。因此,本發(fā)明的權(quán)利保護(hù)范圍,應(yīng)如權(quán)利要求書所列。當(dāng)前第1頁1 2 3