2. 相關研究
2.3. 抹除碼
抹除碼(Erasure Code)[8],是一種可以提升訊息可獲得性的編碼技術,通常 應用於網路通訊以及資料儲存等相關領域,其基本的概念是將原本檔案分區塊 (Block)來處理,取 n 個 Blocks 使用抹除碼編碼可將其展開為 m 個編碼區塊 (Encoded Block),在這之中只需收集一定數量的 Encoded Blocks 即可解碼回原本 的檔案[9]。
圖 2–2 為抹除碼的簡單原理示意圖,將 n 個 Blocks 經由編碼將其展開為 m 個 Encoded Blocks,只需從中收集 ℓ (ℓ ≥ n)個任意 Encoded Blocks 即可解碼回原 始資料,代表著容許失去總共 m-n 個 Blocks 與 Encoded Blocks,也因此從而得 知 m 與 n 之值決定了資料的可獲得性[10][11]。按照其解碼所需要的條件可再分 為兩大類,當解碼所需之 Encoded Blocks 數量等於 n 時即為 Optimal Code;當大 於 n 時則為 Near-Optimal Code。在後續小節將依序介紹三種本篇論文所使用到 的抹除碼,並說明其所屬類型以及編碼原理。
2.3.1. Reed-Solomon Code
Reed-Solomon Code (RS Code)是一種被廣泛應用在各種通訊以及儲存應用 的編碼,在 1960 年由 Irving S. Reed 與 Gustave Solomon 提出[12],最常見的是
圖 2–2 抹除碼原理 Encode Any≧n
Decode
n
… …
m ℓ
…
在 CD、DVD 以及藍光光碟等應用上。
RS Code 是一種 Forward Error Correction Code,以線性組合的方式進行編碼,
將 n 份原始訊息轉換成 m 個訊息(m>n),圖 2–3 即為 RS Code 之編碼範例,藉 由新增加的冗餘訊息 Q1~Qm-n,可以提升接收端一定程度的容錯率。編碼過程為 計算 G‧B=E,對一 n 個 Blocks 的資料 B {B1,B2,…,Bn}進行處理,根據 RS Code 之原理可得一固定大小 m‧n 之生成矩陣 G,再來將生成矩陣與 n‧1 的矩陣 B 相乘,即可得到一 m‧1 矩陣 E {B1,B2,…,Bn,Q1,…,Qm-n},此矩陣內容即為編碼 後之 Encoded Blocks。當需要解碼時,只需收集與 Blocks 數量相等之 Encoded Blocks,作為 n‧1 之矩陣,與一固定的 n‧n 生成矩陣之反矩陣進行相乘,所求 得 n‧1 矩陣結果即為 n 份原始 Blocks 之值。在計算過程中須注意的是,RS Code 不管是編碼還是解碼,都必須在 Galois Field 內進行運算。
RS Code 是一個頗具代表性的 Optimal Code,在後續的討論中將會繼續探討 以 RS Code 應用於不同雲端檔案系統架構之影響。
2.3.2. Linear Combination Code
Christos Gkantsidis 在 2005 年將 Network Coding[13]的概念應用在點對點的 網路傳播[14],論文中提出一個利用線性組合以及加入抹除碼原理的簡單編碼方 式,即為 Linear Combination Code (LC Code)。
LC Code 是一種改善檔案傳播效率的編碼技術,主要是利用在傳輸過程中對 資料進行編碼的動作,以此來增加資料的可用性。藉由讓使用者散播經過編碼後 的 Encoded Block,使得還原檔案的方式有更多樣性的組合[15][16][17],當有越
圖 2–3 RS Code 編碼原理
多的使用者參與傳播,其他的使用者就越有可能湊齊還原檔案所需之 Encoded
2.3.3. Luby-Transform Code
Luby-Transform Code (LT Code)是一種符合 Fountain Code[18]特性的 Erasure Code,由 Michael Luby 於 2002 年提出[19],使用簡單的 XOR 運算方式來進行編 碼與解碼的動作。
在 LT Code 提出之前的抹除碼,進行編碼前都必須指定好編碼後所產生的 Encoded Blocks 數量,因此就必須先算好資料的遺失率或損壞率,再決定展開後 所需的 Encoded Blocks 數量。LT Code 的作法是一次運算只產生一個 Encoded Block,隨著傳送方不斷傳送訊息的過程中不停產生 Encoded Blocks,接收方只 需收集一定數量之 Encoded Blocks,即可解碼還原回原始訊息。此狀況就像是一 個不斷噴出水滴的噴泉,取水者不須在意水滴之間的差異,只須收集足夠的量即 可達成目的,故稱之為 Fountain Code。
圖 2–5 為 LT Code 之編碼示意圖,先取 n 個 Blocks 來進行編碼,接著將規 定數量之原始 Blocks 彼此 XOR 起來,所計算求得之值與記錄參與編碼之 Blocks 訊息合併起來,即為一個 Encoded Block,最後再根據需求重覆此一動作直到產 生完所需之數量為止。當需要解碼時,根據 Encoded Block 裡所記錄的參與 Blocks 訊息,從參與數量為 1 的 Encoded Block 開始解碼,由於原始 Blocks 參與數量為 1,故可直接視為原始 Block 之訊息,接著再利用此原始訊息對參與數量為 2 之 Encoded Blocks 進行解碼,只要擁有此份原始訊息參與之 Encoded Block 便可計 算出其他原始訊息,依此類推不斷重覆解碼動作即可解碼出所有原始資訊。
LT Code 這種編碼方式讓他亦被稱為 Rateless Code,雖然有著隨傳即收的好 處,但是也造成無法確定每次解碼所需之 Encoded Blocks 數量,由於每次 XOR 所挑選的原始 Blocks 皆採用隨機挑選的方式,有時候會因為原始訊息的覆蓋率 不完全導致部分資料解碼不出來的缺點,因此 LT Code 比較適用於不易受到微小 差異影響的影音傳送等相關領域。
圖 2–5 LT Code 編碼原理
…
…
n
B E
LT Code 後續有許多的改良,例如 2006 年發表的 Raptor Code[20]就更進一 步的改善 LT Code,除了 Raptor Code 之外亦有許多相關研究[21],但是在這邊因 為應用的方向並不相同,考量三種抹除碼之特性,僅使用比較基本的 LT Code 來與 RS Code、LC Code 作比較便足夠了。