本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,具體的說是涉及一種分布式存儲(chǔ)系統(tǒng)的糾刪碼優(yōu)化方法。
背景技術(shù):
隨著信息化時(shí)代的來臨,全球數(shù)據(jù)量正處于爆炸式增長(zhǎng)的趨勢(shì)。提高存儲(chǔ)系統(tǒng)可靠性以及保障數(shù)據(jù)可用性已成為企業(yè)的研究重點(diǎn)?,F(xiàn)有的分布式存儲(chǔ)系統(tǒng)中,絕大多數(shù)是通過多副本技術(shù)來提升系統(tǒng)可靠性、可用性、性能以及可擴(kuò)展性。但在大數(shù)據(jù)時(shí)代,存儲(chǔ)規(guī)模越來越大,多副本技術(shù)的系統(tǒng)開銷將越來越大。相對(duì)于副本技術(shù),糾刪碼技術(shù)具有更高存儲(chǔ)效率,并且能降低網(wǎng)絡(luò)中的數(shù)據(jù)流量。但糾刪碼需要消耗較大的cpu資源,讀寫流程比較復(fù)雜,需要對(duì)齊讀寫。現(xiàn)有的技術(shù)糾刪碼存儲(chǔ)系統(tǒng)中,大多需要在前段實(shí)現(xiàn)緩存池,先把數(shù)據(jù)寫到緩存池中,等滿足一定條件時(shí)再把緩存池中的數(shù)據(jù)刷到后端存儲(chǔ)。這種方法可以保證大部分寫請(qǐng)求都是滿條帶寫,避免了傳統(tǒng)寫操作前需要先讀取未滿條帶數(shù)據(jù)的步驟,但緩存可能造成數(shù)據(jù)丟失,大大降低了數(shù)據(jù)的安全性。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中的不足,本發(fā)明要解決的技術(shù)問題在于提供了一種分布式存儲(chǔ)系統(tǒng)的糾刪碼優(yōu)化方法。
為解決上述技術(shù)問題,本發(fā)明通過以下方案來實(shí)現(xiàn):一種分布式存儲(chǔ)系統(tǒng)的糾刪碼優(yōu)化方法,該方法是利用糾刪碼的特點(diǎn),減小糾刪碼條帶的大小,小的條帶更能滿足滿條帶寫,對(duì)于未滿條帶的部分,使讀取補(bǔ)齊的數(shù)據(jù)最小化;大于大io,小條帶把請(qǐng)求數(shù)據(jù)切分成很多個(gè)條帶,利用內(nèi)存引用技術(shù),進(jìn)行邏輯層的小條帶合并,保證了大io被切分,性能不受影響;所述方法把糾刪碼的條帶最小化,減少了未滿條帶寫時(shí)讀取補(bǔ)齊數(shù)據(jù)的數(shù)據(jù)量,前段不需要設(shè)置緩存池也能保證較高的讀寫性能,增加數(shù)據(jù)的安全性和減少了前段的內(nèi)存消耗;
所述方法包括分布式塊存儲(chǔ)系統(tǒng),該分布式塊存儲(chǔ)系統(tǒng)包括:
控制主機(jī):所述控制主機(jī)生成虛擬磁盤,作為存儲(chǔ)數(shù)據(jù)路徑的前端主機(jī),完成數(shù)據(jù)接收、轉(zhuǎn)發(fā)功能;
存儲(chǔ)主機(jī):所述存儲(chǔ)主機(jī)分布于存儲(chǔ)系統(tǒng)中,數(shù)據(jù)最終的存放地點(diǎn)將存儲(chǔ)資源抽象成多個(gè)存儲(chǔ)組件,每個(gè)組件由大型的稀疏文件鏈組成;
所述方法還包括(k+r,k)糾刪碼存儲(chǔ)虛擬磁盤,該(k+r,k)糾刪碼存儲(chǔ)虛擬磁盤包括k個(gè)數(shù)據(jù)組件,r個(gè)校驗(yàn)組件;
(k+r,k)糾刪碼虛擬磁盤的一個(gè)糾刪碼條帶包含k個(gè)數(shù)據(jù)塊和r個(gè)校驗(yàn)塊,數(shù)據(jù)塊的大小為n字節(jié);前段虛擬磁盤寫入k*n個(gè)字節(jié)的數(shù)據(jù),會(huì)被拆分成k份,分別寫入到k個(gè)數(shù)據(jù)組件中,根據(jù)糾刪碼算法,計(jì)算出r個(gè)校驗(yàn)數(shù)據(jù)塊,分別寫入到r個(gè)校驗(yàn)組件中;
糾刪碼寫入時(shí)需要計(jì)算校驗(yàn)數(shù)據(jù),數(shù)據(jù)偏移量和數(shù)據(jù)長(zhǎng)度必須對(duì)齊數(shù)據(jù)塊大小,如果沒有滿足該條件必須先到后端組件上讀取數(shù)據(jù)補(bǔ)齊條帶;如果數(shù)據(jù)偏移量沒有對(duì)齊,需要讀取條帶頭,如果數(shù)據(jù)長(zhǎng)度沒有對(duì)齊,需要讀取條帶尾;
所述方法還包括糾刪碼數(shù)據(jù)拆分重組方法,該糾刪碼數(shù)據(jù)拆分重組方法是通過多個(gè)數(shù)據(jù)條帶在內(nèi)存中進(jìn)行數(shù)據(jù)拆分重組后,只需進(jìn)行一次糾刪碼運(yùn)算;
所述分布式存儲(chǔ)系統(tǒng)的糾刪碼優(yōu)化方法如下:
①:基本變量說明,假設(shè)數(shù)據(jù)塊個(gè)數(shù)k為4,校驗(yàn)塊個(gè)數(shù)為2,數(shù)據(jù)大小n為1k,條帶大小s為n*k=4k,數(shù)據(jù)偏移量為offset,數(shù)據(jù)長(zhǎng)度為length;
②:數(shù)據(jù)偏移量和數(shù)據(jù)長(zhǎng)度補(bǔ)齊;如果數(shù)據(jù)偏移量不能被條帶大小整除,數(shù)據(jù)塊需要向前補(bǔ)齊,如果數(shù)據(jù)偏移量+數(shù)據(jù)長(zhǎng)度的大小不能被條帶大小整除,需要向后補(bǔ)齊數(shù)據(jù);由于本分布式存儲(chǔ)系統(tǒng)的所有前端io的數(shù)據(jù)偏移量和數(shù)據(jù)長(zhǎng)度都是4k對(duì)齊的;所以只要保證條帶大小為4k就可以避免數(shù)據(jù)補(bǔ)齊;
③:當(dāng)條帶大小為4k時(shí),前段一個(gè)大io會(huì)被分成多個(gè)條帶;每個(gè)條帶的數(shù)據(jù)都要進(jìn)行一次糾刪碼計(jì)算和k+r次網(wǎng)絡(luò)傳輸;消耗大量的cpu資源、降低網(wǎng)絡(luò)的利用率和降低了后端存儲(chǔ)的寫性能;
④:為了不降低小條帶的性能,先對(duì)數(shù)據(jù)進(jìn)行拆分重組,、假設(shè)需要寫入的數(shù)據(jù)大小為12k,分成3個(gè)條帶;對(duì)每個(gè)條帶對(duì)應(yīng)的數(shù)據(jù)塊進(jìn)行合并,假設(shè)合并前的數(shù)據(jù)塊編號(hào)為[123456789101112],合并后的數(shù)據(jù)塊編號(hào)為{[159][2610][3711][4812]};數(shù)據(jù)重新合并后,可以看成條帶大小為12k,數(shù)據(jù)塊為3k的糾刪碼條帶,只需進(jìn)行一次糾刪碼運(yùn)算就可以算出整個(gè)數(shù)據(jù)塊的校驗(yàn)值;并且可以把數(shù)據(jù)合并發(fā)送給存儲(chǔ)后端,減少網(wǎng)絡(luò)數(shù)據(jù)發(fā)送系統(tǒng)調(diào)用的次數(shù),降低了cpu消耗和提高網(wǎng)絡(luò)的利用率。
相對(duì)于現(xiàn)有技術(shù),本發(fā)明的有益效果是:本發(fā)明提供一種分布式存儲(chǔ)系統(tǒng)的糾刪碼優(yōu)化方法。利用糾刪碼的特點(diǎn),盡量減小糾刪碼條帶的大小。小的條帶更能滿足滿條帶寫,對(duì)于未滿條帶的部分,可以使讀取補(bǔ)齊的數(shù)據(jù)最小化。大于大io,小條帶會(huì)把請(qǐng)求數(shù)據(jù)切分成很多個(gè)條帶,利用內(nèi)存引用技術(shù),進(jìn)行邏輯層的小條帶合并,保證了大io會(huì)把被切分,性能不受影響。本糾刪碼優(yōu)化方法把糾刪碼的條帶最小化,減少了未滿條帶寫時(shí)讀取補(bǔ)齊數(shù)據(jù)的數(shù)據(jù)量。前段不需要設(shè)置緩存池也能保證較高的讀寫性能,大大增加了數(shù)據(jù)的安全性和減少了前段的內(nèi)存消耗。
本發(fā)明提供一種分布式存儲(chǔ)系統(tǒng)的糾刪碼優(yōu)化方法,在不影響性能的條件下,最小化糾刪碼的條帶,減少了未滿條帶寫時(shí)讀取未滿條帶數(shù)據(jù)的數(shù)據(jù)量。前段不需要設(shè)置緩存池也能保證較高的讀寫性能,大大增加了數(shù)據(jù)的安全性和減少了前段的內(nèi)存消耗。
附圖說明
圖1為本發(fā)明的分布式塊存儲(chǔ)系統(tǒng)架構(gòu)圖;
圖2為本發(fā)明的(k+r,k)糾刪碼存儲(chǔ)虛擬磁盤示意圖;
圖3為本發(fā)明的糾刪碼虛擬磁盤中各組件數(shù)據(jù)分塊示意圖;
圖4為本發(fā)明的糾刪碼虛擬磁盤寫入示意圖;
圖5為本發(fā)明的糾刪碼數(shù)據(jù)拆分重組示意圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行詳細(xì)闡述,以使本發(fā)明的優(yōu)點(diǎn)和特征能更易于被本領(lǐng)域技術(shù)人員理解,從而對(duì)本發(fā)明的保護(hù)范圍做出更為清楚明確的界定。
請(qǐng)參照附圖1-5,本發(fā)明的一種分布式存儲(chǔ)系統(tǒng)的糾刪碼優(yōu)化方法,該方法是利用糾刪碼的特點(diǎn),減小糾刪碼條帶的大小,小的條帶更能滿足滿條帶寫,對(duì)于未滿條帶的部分,使讀取補(bǔ)齊的數(shù)據(jù)最小化;大于大io,小條帶把請(qǐng)求數(shù)據(jù)切分成很多個(gè)條帶,利用內(nèi)存引用技術(shù),進(jìn)行邏輯層的小條帶合并,保證了大io被切分,性能不受影響;所述方法把糾刪碼的條帶最小化,減少了未滿條帶寫時(shí)讀取補(bǔ)齊數(shù)據(jù)的數(shù)據(jù)量,前段不需要設(shè)置緩存池也能保證較高的讀寫性能,增加數(shù)據(jù)的安全性和減少了前段的內(nèi)存消耗;
所述方法包括分布式塊存儲(chǔ)系統(tǒng),該分布式塊存儲(chǔ)系統(tǒng)包括:
控制主機(jī):所述控制主機(jī)生成虛擬磁盤,作為存儲(chǔ)數(shù)據(jù)路徑的前端主機(jī),完成數(shù)據(jù)接收、轉(zhuǎn)發(fā)功能;
存儲(chǔ)主機(jī):所述存儲(chǔ)主機(jī)分布于存儲(chǔ)系統(tǒng)中,數(shù)據(jù)最終的存放地點(diǎn)將存儲(chǔ)資源抽象成多個(gè)存儲(chǔ)組件,每個(gè)組件由大型的稀疏文件鏈組成;
所述方法還包括(k+r,k)糾刪碼存儲(chǔ)虛擬磁盤,該(k+r,k)糾刪碼存儲(chǔ)虛擬磁盤包括k個(gè)數(shù)據(jù)組件,r個(gè)校驗(yàn)組件;
(k+r,k)糾刪碼虛擬磁盤的一個(gè)糾刪碼條帶包含k個(gè)數(shù)據(jù)塊和r個(gè)校驗(yàn)塊,數(shù)據(jù)塊的大小為n字節(jié);前段虛擬磁盤寫入k*n個(gè)字節(jié)的數(shù)據(jù),會(huì)被拆分成k份,分別寫入到k個(gè)數(shù)據(jù)組件中,根據(jù)糾刪碼算法,計(jì)算出r個(gè)校驗(yàn)數(shù)據(jù)塊,分別寫入到r個(gè)校驗(yàn)組件中;
糾刪碼寫入時(shí)需要計(jì)算校驗(yàn)數(shù)據(jù),數(shù)據(jù)偏移量和數(shù)據(jù)長(zhǎng)度必須對(duì)齊數(shù)據(jù)塊大小,如果沒有滿足該條件必須先到后端組件上讀取數(shù)據(jù)補(bǔ)齊條帶;如果數(shù)據(jù)偏移量沒有對(duì)齊,需要讀取條帶頭,如果數(shù)據(jù)長(zhǎng)度沒有對(duì)齊,需要讀取條帶尾;
所述方法還包括糾刪碼數(shù)據(jù)拆分重組方法,該糾刪碼數(shù)據(jù)拆分重組方法是通過多個(gè)數(shù)據(jù)條帶在內(nèi)存中進(jìn)行數(shù)據(jù)拆分重組后,只需進(jìn)行一次糾刪碼運(yùn)算;
所述分布式存儲(chǔ)系統(tǒng)的糾刪碼優(yōu)化方法如下:
①:基本變量說明,假設(shè)數(shù)據(jù)塊個(gè)數(shù)k為4,校驗(yàn)塊個(gè)數(shù)為2,數(shù)據(jù)大小n為1k,條帶大小s為n*k=4k,數(shù)據(jù)偏移量為offset,數(shù)據(jù)長(zhǎng)度為length;
②:數(shù)據(jù)偏移量和數(shù)據(jù)長(zhǎng)度補(bǔ)齊;如果數(shù)據(jù)偏移量不能被條帶大小整除,數(shù)據(jù)塊需要向前補(bǔ)齊,如果數(shù)據(jù)偏移量+數(shù)據(jù)長(zhǎng)度的大小不能被條帶大小整除,需要向后補(bǔ)齊數(shù)據(jù);由于本分布式存儲(chǔ)系統(tǒng)的所有前端io的數(shù)據(jù)偏移量和數(shù)據(jù)長(zhǎng)度都是4k對(duì)齊的;所以只要保證條帶大小為4k就可以避免數(shù)據(jù)補(bǔ)齊;
③:當(dāng)條帶大小為4k時(shí),前段一個(gè)大io會(huì)被分成多個(gè)條帶;每個(gè)條帶的數(shù)據(jù)都要進(jìn)行一次糾刪碼計(jì)算和k+r次網(wǎng)絡(luò)傳輸;消耗大量的cpu資源、降低網(wǎng)絡(luò)的利用率和降低了后端存儲(chǔ)的寫性能;
④:為了不降低小條帶的性能,先對(duì)數(shù)據(jù)進(jìn)行拆分重組,如圖5所示,假設(shè)需要寫入的數(shù)據(jù)大小為12k,分成3個(gè)條帶;對(duì)每個(gè)條帶對(duì)應(yīng)的數(shù)據(jù)塊進(jìn)行合并,假設(shè)合并前的數(shù)據(jù)塊編號(hào)為[123456789101112],合并后的數(shù)據(jù)塊編號(hào)為{[159][2610][3711][4812]};數(shù)據(jù)重新合并后,可以看成條帶大小為12k,數(shù)據(jù)塊為3k的糾刪碼條帶,只需進(jìn)行一次糾刪碼運(yùn)算就可以算出整個(gè)數(shù)據(jù)塊的校驗(yàn)值;并且可以把數(shù)據(jù)合并發(fā)送給存儲(chǔ)后端,減少網(wǎng)絡(luò)數(shù)據(jù)發(fā)送系統(tǒng)調(diào)用的次數(shù),降低了cpu消耗和提高網(wǎng)絡(luò)的利用率。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施方式,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其它相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。