糾刪碼理論介紹
1 什麼是EC?
EC:糾刪碼-Erasure Code,是一種編碼理論:
- EC是糾錯碼的一種,通過增加校驗片,保證數據可靠性。
- 特性:將數據分成k個分片,生成m個校驗片,假設n=k+m,在n個分片中任意選取k個分片,就可以將原始數據恢復回來。
EC不僅應用在存儲領域,通信領域也是EC的主要應用場景。
2 EC(4+2)編解碼簡介
上圖可以簡單說明EC(4+2)的編碼、解碼以及故障恢復的主要流程,包括:
- chunk:將數據進行分片,如圖分成4個片:d1、d2、d3、d4.
- encode:根據4個數據片,生成2個校驗片(生成校驗片的邏輯請看下一節),這樣就形成4+2的EC數據片
- 故障:4+2的EC,允許這6個數據片任意損壞2個,假如損壞了d2和c1,如圖
- decode:通過d1、d3、d4、c2,根據EC的計算,可以算出原始的數據塊
- re-encode:將原始的數據塊分成d1、d2、d3、d4,再次計算出c1、c2
- replace:將損壞的數據塊d2、c1進行替換掉即可
可以發現EC的故障恢復比副本更復雜,副本直接再copy一份即可,但是EC比副本的優勢是成本,相比於3副本,EC在保證同樣可靠性的同時,並不需要保存3份數據。
3 EC的數學原理
其中:
- B是一個(5+3)行5列的矩陣,這個矩陣有這樣的特點,任意5階方陣都是一個可逆矩陣
- D是數據,分成了5等份,D1~D5
根據矩陣乘法,B * D 的結果是一個剛好是(5+3)行1列的矩陣,即:D1、D2、D3、D4、D5、C1、C2、C3,這種(5+3)的EC策略是允許任意3份的丟失。
假如D1、D4、C2損壞了,那麼依然存在這樣的等式:B’ * D = D2、D3、D5、C1、C3,如上圖2.中的等式
由於B’存在可逆矩陣,那麼兩邊同時乘以B’的可逆矩陣,得到上圖4.等式,那麼就到的原始數據D:D1、D2、D3、D4、D5。
最後,B * D就能把損壞的D1、D4、C2計算出來,進而達到故障恢復。
說明
符合B矩陣要求的,有:
4 EC存儲的優缺點
優勢
- 磁盤利用率高,存儲成本低,通常是3副本存儲的一半,甚至更低
- 和3副本相比,有較低的網絡開銷,尤其在write的時候表現明顯
劣勢
- 在編、解碼過程中通常有較大的CPU佔用和網絡開銷,主要體現在write和故障read、故障恢復的情況下
- EC必須滿條帶的讀寫,不足條帶的情況下會有padding
- 和3副本相比,EC存儲系統更復雜,集羣穩定性挑戰更大
EC編碼的缺點,使得EC最開始並沒有應用在線數據,一般都是應用在低頻存儲中,何爲低頻存儲,就是訪問頻次較低數據的存儲系統中,不過目前已經有的在線存儲也開始使用EC編碼了。