存儲領域來看,數據冗余機制其實這幾十年來沒有太多進展,RAID,副本一直是當仁不讓的最終選擇。而近幾年,尤其是規模較大的應用場景下,糾刪碼越來越多的出現在選擇的視野范圍,成為RAID,副本之外的第三種選擇,因此也獲得了越來越多的關注。
糾刪碼(Erasure Code)本身是一種編碼容錯技術,最早是在通信行業解決部分數據在傳輸中損耗的問題,它的基本原理是把傳輸的信號分段,加入一定的校驗再讓各段間發生一定的聯系,即使在傳輸過程中丟失掉部分信號,接收端仍然能通過算法把完整的信息計算出來。如果嚴格的區分,實際上按照誤碼控制的不同功能,可分為檢錯、糾錯和糾刪三種類型。
- 檢錯碼僅具備識別錯碼功能 而無糾正錯碼功能;
- 糾錯碼不僅具備識別錯碼功能,同時具備糾正錯碼功能;
- 糾刪碼則不僅具備識別錯碼和糾正錯碼的功能,而且當錯碼超過糾正范圍時,還可把無法糾錯的信息刪除。
Erasure Code(EC),即糾刪碼,是一種前向錯誤糾正技術(Forward Error Correction,FEC,說明見后附錄),主要應用在網絡傳輸中避免包的丟失, 存儲系統利用它來提高存儲可靠性。相比多副本復制而言, 糾刪碼能夠以更小的數據冗余度獲得更高數據可靠性, 但編碼方式較復雜,需要大量計算 。糾刪碼只能容忍數據丟失,無法容忍數據篡改,糾刪碼正是得名與此。目前,糾刪碼技術在分布式存儲 系統中的應用主要有三類,陣列糾刪碼(Array Code: RAID5、RAID6等)、RS(Reed-Solomon)里德-所羅門類糾刪碼和LDPC(LowDensity Parity Check Code)低密度奇偶校驗糾刪碼。
- RAID是EC的特殊情況。在傳統的RAID中,僅支持有限的磁盤失效,RAID5只支持一個盤失效,RAID6支持兩個盤失效,而EC支持多個盤失效。
- EC主要運用於存儲和數字編碼領域。例如磁盤陣列存儲(RAID 5、RAID 6),雲存儲(RS)等。
- LDPC碼也可以提供很好的保障可靠性的冗余機制。與RS編碼相比,LDPC編碼效率要略低,但編碼和解碼性能要優於RS碼以及其他的糾刪碼,主要得益於編解碼采用的相對較少並且簡單的異或操作。LDPC碼目前主要用於通信、視頻和音頻編碼等領域。
FEC 介紹
在信息中按照某種規則加上一定的冗余位,構成一個碼字,稱為差錯控制編碼過程。在接收端接收到碼字,或從存儲設備中讀取碼字后,查看信息位和冗余位,並檢查他們之間的關系是否正確,以確定是否有差錯發生,稱為校驗。Forward Error Correction,FEC- 前向糾錯編碼技術通過在傳輸碼列中加入冗余糾錯碼,在一定條件下,通過解碼可以自動糾正傳輸誤碼。這種編碼的譯碼設備較復雜。
除FEC之外,還有兩種差錯控制編碼:Automatic repeat request(ARQ)檢錯重發(或自動請求重傳),Hybrid Error Correction(HEC)混合糾錯:
檢錯重發由發送端送出能夠發現錯誤的碼,接收端如果發現錯誤,通過反向信道把這一判決結果反饋給發送端。然后,發送端把接收端認為錯誤的信息再次重發。其特點是需要反饋信道,譯碼設備簡單。
混合糾錯是 ARQ和 FEC方式的混合。發送端同時送出具有檢錯和糾錯能力的碼,如果接收端收到信碼在糾錯能力以內,則自動進行糾正。如果超出糾錯能力,則經過反饋信道請求發送端重發。
參考資料:
