本發(fā)明涉及存儲,具體涉及一種用于分布式糾刪碼重刪系統(tǒng)的路由方法、裝置及可讀介質(zhì)。
背景技術(shù):
1、為了應(yīng)對數(shù)據(jù)膨脹帶來的挑戰(zhàn),提高數(shù)據(jù)中心的存儲利用率并降低存儲成本,重復(fù)數(shù)據(jù)刪除技術(shù)已被廣泛應(yīng)用于重復(fù)率較高的大規(guī)模存儲系統(tǒng)中,以達(dá)到精準(zhǔn)識別并消除系統(tǒng)中的重復(fù)數(shù)據(jù)的目的,實現(xiàn)存儲效率的顯著提升。對比傳統(tǒng)的壓縮技術(shù),重復(fù)數(shù)據(jù)刪除技術(shù)可以消除多個文件之間的數(shù)據(jù)冗余,大幅提升了系統(tǒng)的存儲效率,有效降低了數(shù)據(jù)傳輸和存儲的總體成本。重復(fù)數(shù)據(jù)刪除技術(shù)的應(yīng)用,使文件最終以共享數(shù)據(jù)對象或數(shù)據(jù)塊的引用集合存儲,使得具有相同數(shù)據(jù)塊的文件之間出現(xiàn)了依賴關(guān)系,即數(shù)據(jù)塊會被多個文件共享。這一特征從根本上改變了文件的可靠性,一塊數(shù)據(jù)塊的失效可能會導(dǎo)致多個文件無法被訪問,所以需要使用容錯機制來幫助系統(tǒng)維持高可用性。冗余復(fù)制技術(shù)和糾刪碼技術(shù)是常被用來為系統(tǒng)提供數(shù)據(jù)容錯性的有效手段。
2、冗余復(fù)制技術(shù)指的是通過策略性的增加數(shù)據(jù)冗余來為系統(tǒng)提供可靠性,這意味著系統(tǒng)內(nèi)部并非所有數(shù)據(jù)塊都有同等程度的可靠性保障,但是對于此類系統(tǒng)來說,任何文件出現(xiàn)失效都會帶來嚴(yán)重的后果,所以需要為所有文件提供可靠性保證。
3、糾刪碼技術(shù)通過在原始數(shù)據(jù)中加入新的校驗數(shù)據(jù),使得文件各個數(shù)據(jù)塊產(chǎn)生關(guān)聯(lián)。當(dāng)發(fā)生數(shù)據(jù)塊丟失或錯誤等失效問題時,只要失效的數(shù)據(jù)塊數(shù)量不超過系統(tǒng)所設(shè)定的容錯上限,糾刪碼便能利用剩余的有效數(shù)據(jù)塊進行解碼操作,從而恢復(fù)失效的數(shù)據(jù)。糾刪碼技術(shù)使用較少的冗余數(shù)據(jù),為存儲系統(tǒng)內(nèi)的所有數(shù)據(jù)塊提供與多備份機制相同的容錯能力。
4、糾刪碼重復(fù)數(shù)據(jù)刪除系統(tǒng)將糾刪碼技術(shù)與重復(fù)數(shù)據(jù)刪除技術(shù)相結(jié)合,糾刪碼則能為重復(fù)數(shù)據(jù)刪除系統(tǒng)中所有數(shù)據(jù)塊提供可靠性保證,而不僅局限于部分?jǐn)?shù)據(jù)塊,確保了所有數(shù)據(jù)的完整性和可用性。這種融合方案繼承了兩種技術(shù)的優(yōu)點,在保證系統(tǒng)可靠性的基礎(chǔ)上,進一步提升了系統(tǒng)的存儲效率。通過這種結(jié)合,系統(tǒng)能夠在數(shù)據(jù)冗余和數(shù)據(jù)去重之間找到一種平衡,從而提供更加高效且可靠的數(shù)據(jù)存儲解決方案。bo?han等人將文件分割成多個數(shù)據(jù)塊,并進行重復(fù)數(shù)據(jù)刪除操作,之后他們應(yīng)用糾刪碼技術(shù)對這些數(shù)據(jù)塊進行編碼;r-admad將多個文件拼接成更大的文件再進行上述操作;eec-dedup則進一步減少了零字節(jié)填充;codeplugin則將文件劃分為子文件來獲取更高的存儲效率。現(xiàn)有工作存在以下不足:
5、(1)系統(tǒng)可靠性不足。在構(gòu)建糾刪碼重刪系統(tǒng)時,現(xiàn)有的研究往往未能充分考慮文件刪除操作對糾刪碼可靠性的影響。系統(tǒng)中進行文件刪除操作時,被多個文件索引的塊可能會出現(xiàn)編碼條帶中其他數(shù)據(jù)塊被刪除的情況,破壞了其糾刪碼條帶的完整性,導(dǎo)致被多個文件索引的塊無法被糾刪碼恢復(fù),失去可靠性保障。
6、(2)系統(tǒng)吞吐量下降。在糾刪碼重刪系統(tǒng)中,現(xiàn)有的研究常采用全局重刪技術(shù),這種技術(shù)雖然可以有效地消除重復(fù)數(shù)據(jù),但同時也給系統(tǒng)帶來了較大的計算壓力。全局重刪需要對整個系統(tǒng)中的數(shù)據(jù)進行掃描和比對,這個過程需要消耗大量的計算資源。此外,現(xiàn)有的系統(tǒng)多采用中心化的布局,這種布局方式在數(shù)據(jù)處理量較小時尚能維持較高的性能,但在面對高負(fù)載時,中心節(jié)點的處理能力可能成為瓶頸,導(dǎo)致系統(tǒng)性能下降。
技術(shù)實現(xiàn)思路
1、本技術(shù)的目的在于針對上述提到的技術(shù)問題提出一種用于分布式糾刪碼重刪系統(tǒng)的路由方法、裝置及可讀介質(zhì)。
2、第一方面,本發(fā)明提供了一種用于分布式糾刪碼重刪系統(tǒng)的路由方法,包括以下步驟:
3、獲取待寫入的文件,對待寫入的文件進行等長分塊,得到k個數(shù)據(jù)塊,對k個數(shù)據(jù)塊進行糾刪碼編碼,生成m個校驗塊,k個數(shù)據(jù)塊和m個校驗塊構(gòu)成k+m個文件塊,并計算待寫入的文件中的每個文件塊的指紋值;
4、構(gòu)建本地指紋表和全局文件索引表,本地指紋表中記錄存儲集群中的每個節(jié)點中存儲的已寫入的文件中的每個文件塊的指紋值、引用計數(shù)和存儲地址,全局文件索引表中記錄已寫入的文件的唯一識別碼以及已寫入的文件中的所有文件塊的指紋值和節(jié)點信息,節(jié)點信息包括節(jié)點在存儲集群中的唯一標(biāo)識符;
5、將待寫入的文件中的其中一個文件塊的指紋值在本地指紋表中查詢,響應(yīng)于確定在本地指紋表中查詢到與待寫入的文件中的其中一個文件塊的指紋值相同的指紋值,則確定待寫入的文件中的其中一個文件塊為重復(fù)塊,并將重復(fù)塊在本地指紋表中的引用計數(shù)進行累加;響應(yīng)于確定在本地指紋表中查詢不到與待寫入的文件中的其中一個文件塊的指紋值相同的指紋值,則確定待寫入的文件中的其中一個文件塊不為重復(fù)塊,并將待寫入的文件中的其中一個文件塊的指紋值存儲在存儲集群中的其中一個節(jié)點上,將待寫入的文件中的其中一個文件塊的指紋值、引用計數(shù)和存儲地址記錄在本地指紋表;
6、重復(fù)上個步驟,直至待寫入的文件中的所有文件塊都在本地指紋表中查詢完成,待寫入的文件變?yōu)橐褜懭氲奈募⑸蓪?yīng)的唯一識別碼,并結(jié)合其對應(yīng)的所有文件塊的指紋值和所有文件塊所對應(yīng)的節(jié)點信息更新在全局文件索引表中。
7、作為優(yōu)選,文件塊的指紋值采用布谷鳥哈希算法進行計算,文件塊的指紋值被分配存儲到存儲集群的節(jié)點上,其中,同一個文件中的指紋值不同的文件塊映射在存儲集群中的不同節(jié)點上,不同的文件中的指紋值相同的文件塊映射在存儲集群中的同一個節(jié)點上。
8、作為優(yōu)選,采用訪問計數(shù)器記錄存儲集群中的每個節(jié)點的訪問次數(shù),響應(yīng)于確定文件塊對應(yīng)的分配的節(jié)點的訪問次數(shù)超過閾值,則使用布谷鳥哈希算法計算文件塊的指紋值的所有可存儲的節(jié)點,選擇所有可存儲的節(jié)點中存儲的指紋值最少或者訪問次數(shù)最少的節(jié)點作為轉(zhuǎn)移的節(jié)點,將文件塊的指紋值從分配的節(jié)點復(fù)制到轉(zhuǎn)移的節(jié)點,若在分配的節(jié)點的本地指紋表中查詢不到文件塊的指紋值,則在轉(zhuǎn)移的節(jié)點的本地指紋表中查詢文件塊的指紋值,若在轉(zhuǎn)移的節(jié)點的本地指紋表中查詢不到文件塊的指紋值,則在分配的節(jié)點的本地指紋表中查詢文件塊的指紋值;重復(fù)以上查詢過程,直至查詢到與文件塊的指紋值并獲取對應(yīng)的存儲地址,以讀取到文件塊。
9、作為優(yōu)選,還包括:
10、獲取待訪問的文件的唯一識別碼;
11、響應(yīng)于確定在全局文件索引表中查詢到與待訪問的文件的唯一識別碼相同的唯一識別碼,則獲取到待訪問的文件的所有文件塊的指紋值和節(jié)點信息;
12、遍歷每個節(jié)點信息,根據(jù)節(jié)點信息在對應(yīng)的節(jié)點的本地指紋表中查詢與待訪問的文件中的文件塊的指紋值相同的指紋值所對應(yīng)的存儲地址,在存儲地址中讀取對應(yīng)的文件塊;
13、重復(fù)以上步驟,直至遍歷完所有節(jié)點信息。
14、作為優(yōu)選,還包括:
15、獲取待刪除的文件的唯一識別碼;
16、響應(yīng)于確定在全局文件索引表中查詢到與待刪除的文件的唯一識別碼相同的唯一識別碼,則獲取到待刪除的文件的所有文件塊的指紋值和節(jié)點信息;
17、遍歷每個節(jié)點信息,根據(jù)節(jié)點信息在對應(yīng)的節(jié)點的本地指紋表中查詢到與待刪除的文件中的文件塊的指紋值相同的指紋值所對應(yīng)的引用次數(shù),并將引用次數(shù)進行減一;
18、重復(fù)以上步驟,直至遍歷完所有節(jié)點信息,將引用次數(shù)為0的文件塊作為無效塊;
19、響應(yīng)于存儲集群中的其中一個節(jié)點中的無效塊的數(shù)量達(dá)到閾值,則將存儲集群中的其中一個節(jié)點中的無效塊刪除。
20、作為優(yōu)選,還包括:通過唯一識別碼將全局文件索引表進行切分得到與全局文件索引表具有相同數(shù)據(jù)項格式的若干個子表,并將每個子表存儲在存儲集群中對應(yīng)的節(jié)點上,且每個節(jié)點的鄰居節(jié)點上存儲子表的備份表,每個子表中的文件的唯一識別碼的其中n位字符相同,子表與備份表相同;
21、在全局文件索引表中查詢的過程等同于在子表或備份表中查詢,若無法訪問子表,則訪問備份表。
22、第二方面,本發(fā)明提供了一種用于分布式糾刪碼重刪系統(tǒng)的路由裝置,包括:
23、糾刪碼編碼模塊,被配置為獲取待寫入的文件,對待寫入的文件進行等長分塊,得到k個數(shù)據(jù)塊,對k個數(shù)據(jù)塊進行糾刪碼編碼,生成m個校驗塊,k個數(shù)據(jù)塊和m個校驗塊構(gòu)成k+m個文件塊,并計算待寫入的文件中的每個文件塊的指紋值;
24、索引關(guān)系建立模塊,被配置為構(gòu)建本地指紋表和全局文件索引表,本地指紋表中記錄存儲集群中的每個節(jié)點中存儲的已寫入的文件中的每個文件塊的指紋值、引用計數(shù)和存儲地址,全局文件索引表中記錄已寫入的文件的唯一識別碼以及已寫入的文件中的所有文件塊的指紋值和節(jié)點信息,節(jié)點信息包括節(jié)點在存儲集群中的唯一標(biāo)識符;
25、重刪模塊,被配置為將待寫入的文件中的其中一個文件塊的指紋值在本地指紋表中查詢,響應(yīng)于確定在本地指紋表中查詢到與待寫入的文件中的其中一個文件塊的指紋值相同的指紋值,則確定待寫入的文件中的其中一個文件塊為重復(fù)塊,并將重復(fù)塊在本地指紋表中的引用計數(shù)進行累加;響應(yīng)于確定在本地指紋表中查詢不到與待寫入的文件中的其中一個文件塊的指紋值相同的指紋值,則確定待寫入的文件中的其中一個文件塊不為重復(fù)塊,并將待寫入的文件中的其中一個文件塊的指紋值存儲在存儲集群中的其中一個節(jié)點上,將待寫入的文件中的其中一個文件塊的指紋值、引用計數(shù)和存儲地址記錄在本地指紋表;
26、重復(fù)模塊,被配置為重復(fù)執(zhí)行上個模塊,直至待寫入的文件中的所有文件塊都在本地指紋表中查詢完成,待寫入的文件變?yōu)橐褜懭氲奈募⑸蓪?yīng)的唯一識別碼,并結(jié)合其對應(yīng)的所有文件塊的指紋值和所有文件塊所對應(yīng)的節(jié)點信息更新在全局文件索引表中。
27、第三方面,本發(fā)明提供了一種電子設(shè)備,包括一個或多個處理器;存儲裝置,用于存儲一個或多個程序,當(dāng)一個或多個程序被一個或多個處理器執(zhí)行,使得一個或多個處理器實現(xiàn)如第一方面中任一實現(xiàn)方式描述的方法。
28、第四方面,本發(fā)明提供了一種計算機可讀存儲介質(zhì),其上存儲有計算機程序,該計算機程序被處理器執(zhí)行時實現(xiàn)如第一方面中任一實現(xiàn)方式描述的方法。
29、第五方面,本發(fā)明提供了一種計算機程序產(chǎn)品,包括計算機程序,計算機程序被處理器執(zhí)行時實現(xiàn)如第一方面中任一實現(xiàn)方式描述的方法。
30、相比于現(xiàn)有技術(shù),本發(fā)明具有以下有益效果:
31、(1)本發(fā)明提出的用于分布式糾刪碼重刪系統(tǒng)的路由方法通過使所有數(shù)據(jù)塊參與糾刪碼編碼,為所有數(shù)據(jù)塊提供相同的可靠性保護,解決了系統(tǒng)的部分?jǐn)?shù)據(jù)塊可靠性不足的問題。
32、(2)本發(fā)明提出的用于分布式糾刪碼重刪系統(tǒng)的路由方法采用局部重刪方案代替全局重刪方案,避免了使用全局重刪方案帶來的額外計算壓力,提高了系統(tǒng)的讀寫性能。
33、(3)本發(fā)明提出的用于分布式糾刪碼重刪系統(tǒng)的路由方法去中心化方案采用去中心化的負(fù)載均衡方案,解決了中心化結(jié)構(gòu)的弊病,提高了高負(fù)載情況下的系統(tǒng)讀寫性能,解決了分布糾刪碼重刪式系統(tǒng)中元數(shù)據(jù)管理的一致性和同步問題,實現(xiàn)了讀寫沖突的無鎖化處理。