前言
本文是根据在学习使用minio的过程中,对minio文档中Erasure Code学习结果,是根据本人学习理解思路产生,是为了方便日后复习所编写,可能有许多错误,希望在日后学习中可以逐步改善。(网络上优秀的博客与文档,本文只为自用)
正文
纠删码:主要依靠 源数据 和 校验块 ;
如果我们有n个源数据 我们可以通过计算得出 m个校验块,并把这n+m个块放在n+m磁盘上,此时我们最多可以丢失m块磁盘,
例如5+3的原理如下:
入上图,矩阵D是源数据,B矩阵是可逆矩阵(对矩阵B有一个要求:它的任意n个行向量都是相互独立的),其具体组成如上图,此时我们可以让B*D得到一个新矩阵
观察新矩阵D,我们可以得知,其上面5块为原矩阵 ,下面3块为校验块,此时我们把这8块放入不同磁盘,此时出现丢失,假如出现丢失 ,丢失的是D1,D4,C2
如图,此时B为B’ , B’是丢失对应行的 B,此时B’* D= 幸存矩阵S,
这时我们求出B’的逆矩阵 ,
如图*B’*D=*幸存矩阵S
由于矩阵和其逆矩阵相乘为I(对角线为1,就相当于1),此时
此时的D就已经被求出,D就是原来的数据。
这时可能会有的疑问:
1.丢失超过5个怎么办,能不能恢复?
答:不可以,由于可逆矩阵性质:可逆矩阵一定是方阵,所以无论其丢失多少个磁盘,最后计算的B’和一定为n*n,其幸存矩阵也是只取n个磁盘进行计算。
2.最早的B矩阵是如何形成的?
答:上面的一般是固定的,但下面的一般是根据不同算法完成的,常见的可以根据范德蒙行列式,可以满足对B的要求。
3.D矩阵具体为什么形式,且该纠错码的实现代码是怎么样的?
答:正在学习,minio源码也没有了解,待日后学习。
4.为什么minio文档中说“使用N / 2数据和奇偶校验块,因为它可确保最佳地防止驱动器故障。”?
答:可能是对磁盘使用,和数据恢复的综合考虑,是不是真实原因还待学习。