信息加載,供新來數(shù)據(jù)匹配,如果未命中,則需要將對應Container中的所有指紋加載到Cache并提供給新來數(shù)據(jù)查詢。
[0052]步驟45:在采用相似去重的過程中,冗余數(shù)據(jù)查找時并不能保證較高的去重率,因此在該示例中,根據(jù)備份數(shù)據(jù)流的特性設計了Hot Index(熱點索引庫)來進一步提升數(shù)據(jù)去重率。Hot Index也是存儲于內(nèi)存的Hash表,Hot Index是基于LRU Cache中每個容器中指紋訪問頻率來更新的。在一個Container中,所有指紋被匹配的頻率,在一定的程度上可以更好的反應Container中的存儲數(shù)據(jù)的狀況。Hot Index中每一條內(nèi)容為Cache中相應Container中匹配頻率最大的前k條chunk指紋,與對應的Container的映射。通過將當前Cache中每個Container對應的熱點指紋,加入到Hot Index中來代表Container,可以更好代表指紋在Container中的訪問頻率,以及備份數(shù)據(jù)流的特征。在去重過程中通過與HotIndex中的指紋進行匹配,確定相關Container,可以進一步提升在節(jié)點內(nèi)的數(shù)據(jù)去重率。
[0053]圖5為根據(jù)本發(fā)明一個實施例的云存儲中集群重刪系統(tǒng)局部路由算法特征指紋選取過程示意圖。
[0054]具體而言,為了解決在大規(guī)模集群中加入重復數(shù)據(jù)刪除技術(shù)引入的數(shù)據(jù)路由問題,同時為了達到集群存儲系統(tǒng)高去重率、高性能以及負載均衡等目標,在該示例中,本發(fā)明的方法提出了一個面向重刪的數(shù)據(jù)路由算法-局部相似路算法。該算法主要分為兩個主要過程:一是數(shù)據(jù)路由特征指紋的選取過程,另一個是有狀態(tài)路由選擇過程。其中,數(shù)據(jù)路由特征指紋選取過程主要包括以下步驟:
[0055]步驟51:在路由粒度選擇問題上,本發(fā)明的實施例采用固定大塊的思想,將備份數(shù)據(jù)流進行大塊劃分,劃分成SuperBlock,這樣數(shù)據(jù)可以保持一定局部性特征。另外,在實驗中測試得到:在SuperBlock大小為8M左右時,可以達到系統(tǒng)性能與去重的最佳效果。
[0056]步驟S52:針對每個SuperBlock,采用⑶C算法將數(shù)據(jù)劃分為平均大小為4KB的數(shù)據(jù)塊chunk,并計算每個chunk的指紋信息,然后SuperBlock中所有的chunk指紋信息構(gòu)成的集合中,選出一定的指紋作為路由特征指紋,用以指導數(shù)據(jù)路由。在選擇的過程中,基于布羅德最小獨立置換原理進行選擇。由于在SuperBlock中有2048條chunk指紋,基于數(shù)據(jù)局部性以及相似性的特點將SuperBlock進一步邏輯劃分,將SuperBlock劃分為邏輯大小相等的Segment (數(shù)據(jù)段),其中每個Segment的大小由實驗測得為512KB時最佳,即平均128個chunk組成一個Segment。
[0057]步驟S53:經(jīng)過步驟S52的數(shù)據(jù)組織后,一個SuperBlock由16個邏輯的Segment組成,其中每個Segment又由128個chunk組成,然后根據(jù)布羅德最小獨立置換原理選擇每個Segment中最小分塊的指紋作為Segment的代表指紋,最后將SuperBlock中選擇出的16個指紋作為特征指紋作為路由選擇依據(jù)。
[0058]圖6為根據(jù)本發(fā)明一個實施例的云存儲中集群重刪系統(tǒng)局部路由算法有狀態(tài)路由選擇過程示意圖。具體而言,在局部路由算法中,第二個主要的過程就是基于有狀態(tài)的路由選擇框架,如圖6所示,該過程的主要包括以下步驟:
[0059]步驟61:客戶端首先將SuperBlock選擇出的特征指紋集合序列化,然后異步建立與數(shù)據(jù)服務的遠程連接,將序列化的特征指紋集合發(fā)送到數(shù)據(jù)服務中。
[0060]步驟62:數(shù)據(jù)服務器接收到序列化的特征指紋集合后,反序列化數(shù)據(jù),并與本地的Similarity Index進行索引查詢,確定匹配成功的指紋個數(shù),返回給客戶端。
[0061]步驟63:客戶端將得到的各數(shù)據(jù)服務器匹配成功的指紋個數(shù),加入SuperBlock的地址請求隊列中,發(fā)送到元數(shù)據(jù)服務器中。元數(shù)據(jù)服務器接收到SuperBlock地址請求后,根據(jù)集群中的使用情況,以及設計的負載判斷情況,確定最佳的存儲地址返回給客戶端。
[0062]需要說明的是,在上述過程中,為了節(jié)省路由時的網(wǎng)絡帶寬消耗,在該示例中,采用基于相似的特征指紋選樣方式,節(jié)約一定的性能消耗,同時,為了保證系統(tǒng)的去重率,采用有狀態(tài)路由方式,根據(jù)匹配成功的指紋個數(shù),確定最佳節(jié)點,避免無狀態(tài)路由的不平衡性以及低去重率問題。
[0063]圖7為根據(jù)本發(fā)明一個實施例的云存儲系統(tǒng)中的數(shù)據(jù)寫入過程示意圖。同時,圖7展示了在云存儲實際系統(tǒng)中數(shù)據(jù)服務器節(jié)點接收數(shù)據(jù)時系統(tǒng)的去重引擎的實現(xiàn)過程,在該示例中,以Hadoop的底層分布式文件系統(tǒng)HDFS作為實現(xiàn)的了本方案的系統(tǒng)原型,其中去重引擎的實現(xiàn)主要在DataNode中體現(xiàn),具體步驟包括:
[0064]步驟71:在DataNode中DataXceiver線程負責接送并處理從Client發(fā)送過來的寫請求,當SuperBlock發(fā)送到DataNode時,啟動BlockReceiver線程負責對數(shù)據(jù)的接收和去重存儲過程。
[0065]步驟72:首先BlockReceiver線程接收SuperBlock的數(shù)據(jù)路由特征指紋與元數(shù)據(jù)信息,通過與Hot Index和Simi larity Index索引表的查詢匹配,確定需要匹配的Container,由于Container都是存儲于磁盤的數(shù)據(jù),可能需要進行10讀操作,在實現(xiàn)過程中通過設計的LRU Cache,進行一次匹配,這樣在一定程度上可以避免10操作,然后將確定Container元數(shù)據(jù)信息組成相似索引子集。
[0066]步驟73:在步驟72中加載得到相似索引子集后,就可以對SuperBlock中的數(shù)據(jù)進行索引查找。如果匹配到,則不必在對原數(shù)據(jù)進行存儲,如果沒有匹配到,則選擇一個開放的Container,并將未去重的數(shù)據(jù)進行存儲。最后,將SuperBlock的中每條chunk的存儲信息寫入磁盤Block Meta文件中。
[0067]需要說明的是,在上述示例中,還需要處理的一個重要方面就是對索引表的維護。索引更新主要分為三個部分:一是Cache中的索引更新,LRU Cache的更新是根據(jù)數(shù)據(jù)節(jié)點的讀寫請求并基于LRU方式對緩存進行更新;二是Similarity Index表的更新,當一個Container存儲完畢后,需要選出Container中存儲SuperBlock中對應的數(shù)據(jù)路由特征指紋更新到Simi larity Index索引庫中,用于相似指紋的查找匹配;三是對應Hot Index庫中的索引更新,由LRU Container Cache中對一個Container中chunk指紋的訪問頻率設定的,通過訪問頻率來定時更新Hot Index。
[0068]圖8為根據(jù)本發(fā)明一個實施例的云存儲系統(tǒng)中的數(shù)據(jù)重組過程示意圖。如圖8所示,展示了在云存儲系統(tǒng)中數(shù)據(jù)服務器節(jié)點加載數(shù)據(jù)時在Hadoop中的數(shù)據(jù)重組過程,具體包括以下步驟:
[0069]步驟81:在DataNode中DataXceiver線程負責接送并處理從Client發(fā)送過來的讀請求,當需要發(fā)送數(shù)據(jù)時,啟動BlockSend線程負責對請求SuperBlock的本地讀取與網(wǎng)絡發(fā)送。
[°07°] 步驟82:首先,在啟動子線程定位SuperBlock的Block Meta的物理存儲位置后,加載Block Meta中所有chunk元數(shù)據(jù)到內(nèi)存,然后針對chunk中的元數(shù)據(jù),讀取chunk的物理存儲位置以及存儲信息,并根據(jù)邏輯偏移量對SuperBlock進行數(shù)據(jù)重組。
[0071 ] 步驟83:在步驟82中對SuperBlock按照順序組織其中的數(shù)據(jù),然后由BlockSend線程將重組后的SuperBlock中的數(shù)據(jù)部分發(fā)送到客戶端,客戶端接收到數(shù)據(jù)后,按照SuperBlock的編號組織數(shù)據(jù)返回給用戶請求的文件。
[0072]需要說明的是,在上述過程中,根據(jù)chunk的物理地址加載數(shù)據(jù)時,為了減輕隨機讀造成的磁盤瓶頸,在實現(xiàn)過程中,基于相似去重的