基於柯西矩陣的Erasure Code技術詳解


一、概述

Erasure Code 可以應用於分布式存儲系統中,替代多份數據拷貝的數據冗余方式,從而可以提高存儲空間利用率。此外, Erasure code 還可以應用於傳統 RAID系統中,增加數據冗余度,支持多塊盤同時發生故障,從而可以提高數據可靠性。

采用范德蒙矩陣可以構建 Erasure code (關於范德蒙矩陣的編解碼方法,可以參考文章《 基於范德蒙矩陣的 Erasure code 技術詳解 》),其生成矩陣表示如下:

wKiom1Nw14PSZbQ2AABqVIsHDo0323.jpg

采用范德蒙矩陣作為編碼矩陣的問題在於算法復雜度太高,其解碼算法復雜度為O ( n^3 )。采用目前的處理器技術,還是會影響 IO 的性能,增加 IO 延遲。因此,找到一種更加合理的編碼矩陣,降低算法復雜度是 Erasure code 得以廣泛應用的一個前提條件。

二、基於柯西矩陣的編解碼過程

基於柯西矩陣的李德 - 所羅門( RS )碼是在范德蒙矩陣的 RS 碼基礎上作了兩點重要改進:

1, 用柯西矩陣來代替范德蒙矩陣。由於范德蒙矩陣求逆運算的復雜度為 O (n^3 ),而柯西矩陣求逆運算的復雜度僅為 O ( n^2 )。因此,采用柯西矩陣可以降低解碼的運算復雜度。

2, 采用有限域二進制矩陣的方式來提高運算效率,直接將乘法轉換成 XOR 邏輯運算,大大降低了運算復雜度。

大家知道,柯西矩陣可以描述如下:

wKioL1Nw13OwOQEBAABdnKs6pIM901.jpg

X ( i )和 Y ( i )都是迦羅華域 GF ( 2^w )中的元素。柯西矩陣有兩個特點:第一,任意一個子方陣都是奇異矩陣,存在逆矩陣;第二,柯西矩陣在迦羅華域上的求逆運算,可以在 O ( n^2 )的運算復雜度內完成。

采用柯西矩陣進行 Erasure code 編碼過程描述如下:

wKiom1Nw17SwXzPCAACab8PlxuM933.jpg

其運算過程和范德蒙矩陣編碼過程是一樣的,只不過采用柯西矩陣替換了范德蒙矩陣。從運算過程來看,編碼過程是迦羅華域的系列乘法、加法運算。

柯西解碼方程描述如下:

wKioL1Nw16HxK0JkAAB9KUUW2GM257.jpg

當任何一個數據元 d ( i )遭到損壞時,需要通過解碼過程進行數據恢復。數據解碼過程可以分成如下幾大步驟:

1, 選取剩余有效的數據塊,構成一個解碼列向量。例如, d1 、 d3 數據塊損壞了,那么可以選取剩余數據 d0 、 d2 、 c0 、 c2 作為解碼列向量。

2, 摘取生成矩陣(柯西矩陣)中解碼列向量所對應的行,構成方陣 A ,該矩陣的逆矩陣就是解碼生成矩陣 inv(A) 。

wKiom1Nw1-ryjLYTAABCqKn5nOQ754.jpg

3, 解碼生成矩陣 inv(A) 和解碼列向量的乘積就可以得到丟失的數據 d1 和 d3 。

從整個過程來看,矩陣求逆過程是最大的運算開銷。解碼過程和范德蒙矩陣編碼是一樣的,但是柯西矩陣的求逆運算復雜度要低於范德蒙矩陣,因此,具有更好的性能。

三、柯西編解碼過程優化

從編解碼過程來看,柯西編解碼最大的運算量是乘法和加法運算。在范德蒙編碼的時候,我們可以采用對數 / 反對數表的方法將乘法運算轉換成了加法運算,並且在迦羅華域中,加法運算轉換成了 XOR 運算。

柯西編解碼為了降低乘法復雜度,采用了有限域上的元素都可以使用二進制矩陣表示的原理,將乘法運算轉換成了迦羅華域“與運算”和“ XOR 邏輯運算”,提高了編解碼效率。

從數學的角度來看,在迦羅華有限域中,任何一個 GF ( 2^w )域上的元素都可以映射到 GF ( 2 )二進制域,並且采用一個二進制矩陣的方式表示 GF ( 2^w )中的元素。例如, GF ( 2^3 )域中的元素可以表示成 GF ( 2 )域中的二進制矩陣:

wKioL1Nw1-Hxs5n-AABIAxf83Cg322.jpg

圖中,黑色方塊表示邏輯 1 ,白色方塊表示邏輯 0 。通過這種轉換, GF ( 2^w)域中的陣列就可以轉換成 GF ( 2 )域中的二進制陣列。生成矩陣的陣列轉換表示如下:

wKiom1Nw2CSAB54NAAE47LivpYM228.jpg

在 GF ( 2^w )域中的生成矩陣為 K* ( K+m ),轉換到 GF ( 2 )域中,變成了 (w*k) * (w*(k+m)) 二進制矩陣。采用域轉換的目的是簡化 GF ( 2^w )域中的乘法運算。在 GF ( 2 )域中,乘法運算變成了邏輯與運算,加法運算變成了 XOR運算,可以大大降低運算復雜度。和范德蒙編解碼中提到的對數 / 反對數方法相比,這種方法不需要構建對數 / 反對數表,可以支持 w 為很大的 GF 域空間。采用這種有限域轉換的方法之后,柯西編碼運算可以表示如下:

wKioL1Nw2BOCGwJUAAD64h4nPg4389.jpg

四、總結

可以說柯西編碼是在范德蒙編碼基礎之上的一種優化。其主要有兩點:第一降低了矩陣求逆的運算復雜度;第二通過有限域轉換,將 GF ( 2^w )域中的元素轉換成二進制矩陣,簡化了乘法運算。所以,柯西編解碼要優於范德蒙矩陣的方法,柯西編碼的運算復雜度為 O ( n(n- m) ),解碼復雜度為 O ( n^2 )。

本文出自 “存儲之道” 博客,轉載請與作者聯系!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM