堅果雲如何提高存儲空間有效率

此內容是回答知乎的一個問題。 我的回答解釋了堅果雲如何採取措施更好地檢測文件內和文件之間的重複數據,因此與所有人共享。 根據我們有限的瞭解,堅果雲在整個行業(國內和國外)是非常擅長提高存儲空間利用率的,甚至與亞馬遜,谷歌,微軟,IBM,EMC和其他巨頭相比。當然,巨頭們也很可能有沒有披露的祕密方案,我們也是這樣 :-)

這只是堅果雲採取的衆多機制的一種,其他方面的技術我們會適時披露。

關於樓上提到的交叉文件差異分析和動態分片等方式,堅果雲都進行過非常深入的思考和仔細的研究。

固定分塊的數據去重(de-duplication)
其 他朋友的回答中,採用固定分塊比較的方式,這是數據去重的第一個階段。利用哈希樹算法(Merkle Tree)【1】,計算分塊的特徵值。如果分塊已經存儲在系統中,無需再次存儲,直接進行交叉引用。 減少存儲空間和加快上傳速度。這個方式幾乎所有的雲存儲服務商都提供,包括堅果雲。

此方法適用於未修改的文件,尤其適用於照片和視頻等多媒體文件。 然而,它有一個致命的缺陷。 一旦在文件開頭添加或刪除了一個比特,整個文件的塊就會完全改變。 將無法檢測到大量數據重複,因此不適合頻繁修改數據的情況。 辦公室文件和設計文件等

不過,目前大多服務(包括dropbox)都只用了簡單的hash檢測重複的分塊,這在數據隱私性上有一定的漏洞。這個問題比較複雜,如果環境允許,我們會適度的披露更多信息和解決辦法。

 

單個文件不同版本之間的數據去重
這是數據去重的第二個階段。

這個辦法主要是利用某種形式的滑動窗口動態檢測數據分塊的邊界,從而除了能夠檢測到固定的重複分塊外。也可以避免因爲上述的數據插入或者刪除導致的算法失效。上面提到的rsync【3】算法也使用了類似的思想。

這類型的算法有個好處,完全可以通過客戶端本地匹配,節約服務器的計算和IO資源。

Dropbox和堅果雲都在產品發佈的開始用了類似的手段,這也是經常提到的“增量同步”。國內的其他廠商最近也在逐步採用這個方法,或許某天,它應該是雲存儲產品的一個必備功能。

 

不同文件之間的數據去重
這是數據去重的第三個階段。

刪除不同文件的相同數據,通常類似於上面的第二階段。 通過滑動窗口算法動態將數據分塊,然後使用第一種方法的哈希算法查詢服務器上的重複分塊。

這個方法有個大問題:
1)窗口滑動的時候有一個假設,假定目標數據是完全隨機的,從而保證窗口的設定(分塊的大小)也是隨機的。如果數據不滿足隨機性,容易導致分片數目過多或者過少。
2)該算法不能通過客戶端執行,必須在服務器上執行。

這個算法的關鍵是找到合適的手段,控制文件分片後的數目。分片太多容易增大服務器查找重複分片的負擔,分片太少容易導致去重的效率下降。這個算法不適合在用戶存入數據的時候就進行處理,也就是不適合在線處理。

堅果雲在這個方面研究發現,利用這個算法,離線分批的對某些類型的數據進行處理可以很好的降低存儲成本。某些高端的數據歸檔(data archive)系統,也用了類似的手段對於不經常訪問的數據進行去重。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章