在传统存储领域,随着磁盘容量的不断增大,RAID数据重构时间将会是一个非常严重的问题。大家知道,过长的数据重构时间意味着数据可靠性下降。所以,在RAID设计的过程中,一定要考虑数据重构的时间,并且尽可能的将“无数据保护状态”的时间降到最小。在不改变传统RAID架构前提下,只能通过增加数据冗余度来缓解大容量磁盘引入的超长数据重构时间的问题。这种思路就好比几年前,当RAID5无法满足过长数据重构时间时,只能被迫采用RAID6算法,通过RAID6能够提供两块盘的冗余度来缓解长时间数据重构的问题。随着时间的推移,目前,在很多应用中,RAID6也无法满足应用需求了。为了达到更高的数据冗余度,一个比较不错的选择是采用冗余度更大的编解码方式:Erasure Code。很多公司将基于这种编码方式的RAID称之为RAID7。

在互联网领域,通常采用Server SAN的存储架构方式。也就是将廉价的Server通过集群软件的方式组建一套分布式的存储系统。Google首先倡导了这种方式,架构了GFS系统,将很多非格式化的数据(例如网页)存储到这种分布式系统中。通常,这种廉价的Server是不具备RAID功能的,那么数据可靠性如何保证呢?在这种Server SAN中,通常会将数据复制多份存储到不同的节点上,一旦一个节点失效,数据可以从其它节点上获取。数据多节点复制的方式可以很好的提高数据可靠性,并且可以将读写数据流很好的分离。但是,带来的问题是存储利用率大为降低。对于一般的数据,通常会存储三份,对于非常重要的数据,会存储六份。如何平衡存储空间和数据可靠性成了分布式存储需要考虑的重要问题。Erasure Code可以平衡这两者关系,在提高存储空间利用率的前提下,不会影响数据可靠性。采用Erasure Code对数据进行编码冗余的方式和“网络RAID(RAIN)”的概念是很相像的。当互联网领域引入Erasure Code之后,需要考虑的问题是如何降低编解码的运算复杂度问题。

事实已经证明,Erasure Code作为一种数据编解码技术在大数据环境下有了十分迫切的需求。不仅传统的RAID需要这种技术,而且分布式存储也需要这种技术去提升存储资源利用率。

常用的Erasure code是基于范德蒙(Vandermonde)矩阵的RS算法。其基本思想很简单,采用范德蒙矩阵作为生成矩阵,得到校验数据。现假设输入数据为D1~Dn,生成的校验数据为C1~Cm,那么输入数据和校验数据之间的关系可以描述为:

其中,

为范德蒙矩阵,该矩阵为编码矩阵。所以,为了得到校验数据,主要的任务是将输入数据和编码矩阵相乘,得到的输出结果就是编码值。为了能够更好的表示磁盘上存储的数据,通常将编码矩阵方程表示如下:

可以发现这个生成矩阵(A)就是单元矩阵和范德蒙矩阵的组合。输入数据(D)和生成矩阵(A)的乘积就是编码之后的存储数据(E)。采用传统RAID的思路去理解,编码之后的结果就是一个条带需要存储的所有数据。

编码过程我们已经很清楚了,生成矩阵的格式很规整。那么,问题是如何进行解码操作呢?当存储的数据d1~dn,c1~cm中有些数据无法读取时,如何进行数据恢复呢?从数学的原理来看,只要将读取的有效数据和生成矩阵的逆矩阵相乘就可以恢复丢失的数据。假设m个数据块丢失,则可以将m个数据块对应的矩阵A和E中的行删掉,得到新的n*n阶生成矩阵A2和1*n阶结果矩阵E2。由于生成矩阵是有范德蒙矩阵和单元矩阵的组合,所以,矩阵A的任意n行子集都可以保证线性无关。因此,需要恢复的数据可以通过A2和E2 的逆矩阵乘积得到,即D=逆(A2)*逆(E2)。

从数学的角度来看,我们现在常用的RAID5和RAID6算法只是范德蒙矩阵算法的一个子集而已。当冗余数据只有一个的时候,就退化成了RAID5算法,在实数域只需要将输入数据累加就可以得到校验码了。为了简化计算复杂度,编解码运算放到了迦罗话域,加法运算变成了XOR逻辑运算。当冗余数据有两个的时候,范德蒙矩阵退化成了RAID6算法,也可以在迦罗华域通过查表、XOR的方法完成运算。具体可以参考文章《一个IO的传奇一生(12)-- 磁盘阵列1》。

从这个角度来看,基于范德蒙矩阵的Erasure Code方法是传统RAID5/RAID6算法的扩展。在实现过程中,同样可以在迦罗华域中完成乘、除和加减法运算。为了实现快速算法,需要构建两张对数表和反对数表,然后通过查表和XOR运算快速实现编解码。

基于范德蒙矩阵的Erasure Code编解码原理比较简单,可以说是在RAID5/RAID6算法基础上的一种延伸。采用这种方法的算法复杂度还是比较高的,编码复杂度为O(mn),其中m为校验数据个数,n为输入数据个数。解码复杂度为O(n^3),解码具有较高的计算复杂度。

基于范德蒙矩阵的Erasure code技术详解相关推荐

  1. 基于柯西矩阵的Erasure Code技术详解

    一.概述 Erasure Code可以应用于分布式存储系统中,替代多份数据拷贝的数据冗余方式,从而可以提高存储空间利用率.此外,Erasure code还可以应用于传统RAID系统中,增加数据冗余度, ...

  2. 基于DNS解析的GSLB《CDN技术详解》

    基于DNS解析的GSLB工作方式 基于DNS解析的GSLB方案实际上就是把负载均衡设备部署在DNS系统中.在用户发出任何应用连接请求时,首先必须通过DNS系统来请求获得服务器的IP地址,基于DNS的G ...

  3. P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解

    目录 1.内容概述 2.反向链接技术:一种特殊的P2P场景(通信双方中只有一方位于NAT设备之后) 3.基于UDP协议的P2P打洞技术详解 3.1.原理概述 3.2.典型P2P情景1: 两客户端位于同 ...

  4. 1960 范德蒙矩阵(数学贪心)

    1960 范德蒙矩阵 LYK最近在研究范德蒙矩阵与矩阵乘法,一个范德蒙矩阵的形式如下: 它想通过构造一个含有1~nm的n*m的矩阵G,使得G*V得到的n*n的矩阵T中所有位置上的元素之和最大.其中n, ...

  5. 技术详解:基于人脸识别的 AI 弹幕

    --------点击屏幕右侧或者屏幕底部"+订阅",关注我,随时分享机器智能最新行业动态及技术干货---------- 有时候,弹幕比剧情还精彩,那些脑洞大开.观点鲜明的弹幕,可以 ...

  6. 关于《J2ME手机游戏开发技术详解》的问题!

    这里只是对我书中的bug和没有说明白的技术处说明,对于具体的编程问题,我只是点到为止! 对于3D部分的问题,由于我现在工作重点不在这上面,有些问题的回答我感到吃力,也不太想回答,详情请看我的文章. 我 ...

  7. 【H.264/AVC视频编解码技术详解】七、 熵编码算法(1):基础知识

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  8. python数据科学课后答案_Python数据科学-技术详解与商业实践-第五讲作业

    作者:Ben,著有<Python数据科学:技术详解与商业实践>.<用商业案例学R语言数据挖掘>.<胸有成竹-数据分析的SAS EG进阶>作者.2005年进入数据科学 ...

  9. 作为SLAM中最常用的闭环检测方法,视觉词袋模型技术详解来了

    摘自:https://mp.weixin.qq.com/s/OZnnuA31tEaVt0vnDOy5hQ 作为SLAM中最常用的闭环检测方法,视觉词袋模型技术详解来了 原创 小翼 飞思实验室 今天 基 ...

  10. 大数据发展规划及技术详解

    大数据发展规划及技术详解 1.BI的流程:主要是阐述一下BI的流程:第一,需求分析阶段,要搞清楚用户需求,就本例用户想要的是volte业务使用情况的月报表,必须要搞清楚月报表中包括哪些指标(包括维度指 ...

最新文章

  1. 技术大佬的肺腑之言:“不要为了 AI 而 AI”! | 刷新 CTO
  2. RabbitMQ 如何消息生产者producer发送给RabbitMQ服务器broker?
  3. 开会迟到,代码不规范,晚上八点半去健身,跟leader坐电梯自己先出去!某新入行程序员被疯狂吐槽!...
  4. Memcached、Redis OR Tair
  5. Keras 文本预处理 text sequence
  6. AB1601中断的问题
  7. 实验十四-团队项目评审课程学习总结
  8. 运行Xcode时出现 Lazy loading NSBundle MobileCoreServices.framework和 Loaded MobileCoreServices.framework
  9. .NET开发框架(二)-框架功能简述
  10. java 线程类 通信_Java 中利用管道实现线程间的通讯
  11. 《深入浅出DPDK》读书笔记(二):网卡的读写数据操作
  12. SQL SERVER数据库优化相关资料
  13. 教你sql查询分析器执行存储过程
  14. 小波去噪程序c语言,else - 小波去噪c语言程序
  15. html5 canvas 虚线,HTML5 canvas画带箭头的虚线
  16. 汪磊老师整理的前端进阶课程目录
  17. vue项目之微信分享
  18. 高校大学生可以免费领半年阿里云服务器
  19. 等比缩放公式_iPhone屏幕适配,等比缩放
  20. 【C#语言】具名类型和匿名类型

热门文章

  1. FPGA之SDRAM控制器设计(一)
  2. ArcGis学习资料汇总整理
  3. 天轰穿C#教程之数学运算符
  4. fullscreen (JS 简易轻量化类原生的高兼容窗口全屏控件)
  5. 百度图像识别java使用笔记
  6. php 万能密码,万能用户名和万能密码
  7. 看书必备:40个全球免费开放电子图书馆
  8. SQL语句中查询数据
  9. 一文详解工业相机和镜头选取
  10. my ReadBook_wangluoyingxiaoyucehua / network marketing / wangluoyingxiao