擦除碼是前向糾錯(FEC)技術的一種形式,FEC已經有幾十年的歷史,現在出現了一種新興高容量存儲系統解決RAID的限制。
RAID并不是為保護TB級硬盤上的數據設計的,因為RAID誕生時1GB硬盤都很少見,其基本思想是將數據分散放在多個硬盤上,任一硬盤出現故障都不會導致數據丟失。
對高密度硬盤上的數據執行保護復雜性更高,在過去20年里,硬盤密度增長次數超過了2萬次,現在市場上已經出現2TB和3TB硬盤,硬盤成本也變得令人難以置信的實惠:一塊2TB大小的SATA硬盤不過100美元左右。
這些高密度硬盤提供極具吸引力的性價比,使在傳統旋轉介質上存儲海量數據成為可能。
但是,使用1TB和2TB硬盤組成的RAID陣列更容易造成數據丟失,因為其重建過程很長,有時需要1天甚至更長時間。
隨著硬盤密度的增長,重建時間完全有可能達到數周,這是不可接受的,根據硬盤年故障率3%估算,有些用戶將會在正常業務時間體會到RAID重建帶來的影響。
為此,RAID 6漸漸受到人們的青睞,因為它允許兩塊硬盤同時發生故障。
在RAID 5陣列中,只允許一塊硬盤失效,顯然,在這種情況下進行重建是非常耗時的,如果遇到不可恢復的讀取錯誤,數據就是丟失,對未做災備的企業來說,這無疑是企業的大災難。
擦除碼
擦除碼使數據被分成多個數據包,與額外的信息位編碼,發送給接收者,接收者再編碼并重新封裝成原始數據,如果在傳輸階段數據包丟失,接收者可以重新封裝數據,也就是說,接收者有原始數據包的子集。
伴隨CD,DVD和藍光光盤的問世,存儲介質出現了擦除碼技術,即使媒介表面出現劃痕,仍然可以播放,大多數常見的擦除碼算法已經演變為上世紀60年代麻省理工學院林肯實驗室開發的Reed-Solomon碼。
純擦除碼算法的使用使得RAID 6陣列可以失效兩塊以上的硬盤,保護力度更強了,有些實現方法提供了多種級別的保護,甚至允許用戶(或存儲管理員)指定保護級別。
例如,管理員選擇16塊硬盤中的4塊可以失效,30塊硬盤允許10塊失效,使RAID陣列一直以來人們關心的問題變得不再那么重要。
結合擦除碼和編碼數據的分布,存儲持久性變得更好,數據被分解到一系列數據塊上,然后在這些數據塊上應用擦除碼機制,生產大量的編碼檢查塊。
編碼檢查快然后被分散到存儲系統的多塊硬盤上,因此一或多個檢查塊丟失,存儲系統仍然可以成功檢索和解碼原始數據塊,進而重建數據。
更重要的是,我們不僅需要數據的持久性,也要底層存儲的效率,已經有多款商用存儲提供了傳統的擦除碼技術,現在出現了一些新的變種,如噴泉碼,颶風碼或在線擦除碼。
每一種擦除碼技術在保護數據方面都有自己的優勢,有些甚至實現了全自動化,提供了非常高水平的存儲持久性,數據丟失的幾率小于(1×10-9)%。
云存儲環境常用的一種方法是將文件保存多份,大多數云存儲提供商都聲稱保留了3份,但它仍然不能提供高水平的存儲持久性,如3份拷貝所在的介質全部發生故障,數據仍然面臨丟失的風險。
如果云存儲提供商只需用準備300TB的存儲容量,問題倒不大,但如果要準備100PB呢,豈不是要300PB,這種架構的成本實際上已經遠遠超出了RAID 6鏡像的成本。
借助擦除碼技術,使用相對較低的存儲開銷,就可以實現良好的存儲持久性,選擇16塊硬盤允許4塊失效的策略,需用60%的開銷,換句話說,每PB可用容量需用1.6PB原始容量。
從運營角度來看,與傳統技術相比,這種方法可以大大節省成本,使用擦除碼技術的存儲系統可以利用高密度硬盤提供更經濟的數據存儲服務,存儲可靠性和持久性也更好。