1. 介绍

Erasure Code可以认为是RAID的通式,任何RAID都可以转换为特定的erasure code。在传统的RAID中,仅支持少量的磁盘分布,当系统中存在多个分发点和多节点时,RAID将无法满足需求。比如RAID5只支持一个盘失效,即使是RAID6也仅支持两个盘失效,所以支持多个盘失效的算法也就是erasure code是解决这一问题的办法。(Erasure Code作为可有效提升存储效率、安全性和便捷性的新兴存储技术)

定义:erasure code是一种技术,它可以将n份原始数据,增加m份数据(用来存储erasure编码),并能通过n+m份中的任意n份数据,还原为原始数据。定义中包含了encode和decode两个过程,将原始的n份数据变为n+m份是encode,之后这n+m份数据可存放在不同的device上,如果有任意小于m份的数据失效,仍然能通过剩下的数据还原出来。也就是说,通常n+m的erasure编码,能容m块数据故障的场景,这时候的存储成本是1+m/n,通常m<n。因此,通过erasure编码,我们能够把副本数降到1.x。
存储领域,数据冗余机制其实这几十年来没有太多进展,RAID,副本一直是当仁不让的最终选择。而近几年,尤其是规模较大的应用场景下,纠删码越来越多的出现在选择的视野范围,成为RAID,副本之外的第三种选择,因此也获得了越来越多的关注。

纠删码(Erasure Code)本身是一种编码容错技术,最早是在通信行业解决部分数据在传输中损耗的问题,它的基本原理是把传输的信号分段,加入一定的校验再让各段间发生一定的联系,即使在传输过程中丢失掉部分信号,接收端仍然能通过算法把完整的信息计算出来。

如果严格的区分,实际上按照误码控制的不同功能,可分为检错、纠错和纠删三种类型:

  • 检错码仅具备识别错码功能 而无纠正错码功能
  • 纠错码不仅具备识别错码功能,同时具备纠正错码功能
  • 纠删码则不仅具备识别错码和纠正错码的功能,而且当错码超过纠正范围时,还可把无法纠错的信息删除

2. 应用领域

凡是需要通过冗余来进行高可用的场景。但总体来说,主要运用于存储和数字编码领域。

2.1 阵列

如果磁盘阵列需要使用高级特性,比如需要能够容错两个磁盘失效(RAID6),那么可以用n+2的模式;如果想容错4个磁盘失效,则可使用n+4的模式。

2.2 云存储

erasure code是云存储的核心技术,最初诸如hadoop, GFS,CEPH等都采用的是n-way replication来做冗余,但是这样会带来极大的成本开销,因此几乎各大公司都在用erasure code替代n-way replication,之后我还会简要介绍一下具体他们使用的模式。

2.3 P2P领域

erasure code 的理论起码也有20年的历史了,但真正实践可能也就最近几年的时间,在P2P领域,动态的分布和智能的容错,特别是对短暂失效是非常关键的。以往的算法或多或少都有点山寨的感觉,而借助erasure code之后,将会使P2P的算法更具有数学的严谨性。

2.4 数字编码

erasure code本身就是出自编码理论,所以在这一块具有先天的优势。

纠删码常见的有三类,Reed-Solomen类(RS纠删码),级联低密度纠删码和数字喷泉码。目前在存储行业应用的主要是Reed-Solomen类纠删码。
从纠删码基本的形态来看,它是N个数据+M个校验的结构,其中数据和校验的N和M值都能够按照一定的规则设定。在1~M个数据块(数据或校验都行)损坏的情况下,整体数据仍然可以通过计算剩余数据块上面的数据得出,整体数据不会丢失,存储仍然是可用。

3. 原理

RS codes定义了一个(n + m) * n的分发矩阵(Distribution Matrix) ,如下图。原始数据为D1到D5,分发矩阵B。

编码过程就是上述两个矩阵相乘的结果,如下图:

因此得到了原始数据和编码数据一共n + m份,只要丢失数据份数不超过m,就可以通过矩阵运算求出所有原始数据,并可以继续求出丢失的数据。

4. 关键问题

4.1 编码矩阵选取

由于丢失后需要求解逆矩阵进行解码,因此必须要使用可逆的矩阵与单位矩阵进行构建。

目前开源实现中Jerasure库用的是范德蒙矩阵,Intel EC提供了范德蒙矩阵和柯西矩阵的实现。其中范德蒙矩阵的定义如下:

4.2 开源实现

  1. Jerasure库
    http://jerasure.org/

  2. Intel EC库
    http://www.intel.com/content/www/us/en/storage/erasure-code-isa-l-solution-video.html

5. 工程实践

  1. 编码
    在创建数据块以及数据块远远未写满的情况下,使用副本策略做数据容错。当若干数据块(比如k个数据块)都基本写满,则禁止对这些数据块做写(包括修改、删除)等操作。此时进行编码,当编码成功时,删除冗余的数据块副本。此时就从副本策略变成纠删码策略。
  2. 解码
    a)一个线程定期扫描数据,比如对数据块和校验块做crc校验,如果发现有数据块或者校验块失效,则启动恢复线程。
    b)恢复线程先根据EC组现有的数据情况,从远程或本地获取必要的数据进行解码,恢复失效数据。

Erasure Coding相关推荐

  1. MIniIO Erasure Coding 应用案例

    今天我们来了解一下EC方案,纠删码是分布式存储系统的关键数据保护方式. 这篇博文解释了纠删码如何满足企业对数据保护的要求,以及它是如何在 MinIO 中实现的. 数据保护和硬件故障 数据保护在任何企业 ...

  2. Hadoop hdfs副本存储和纠删码(Erasure Coding)存储优缺点

    The advantages and disadvantages of hadoop hdfs replicating storage and erasure coding storage. Hado ...

  3. Hadoop 3.0 纠删码技术分析(Erasure Coding)

    背景 随着大数据技术的发展,HDFS作为Hadoop的核心模块之一得到了广泛的应用.为了数据的可靠性,HDFS通过多副本机制来保证.在HDFS中的每一份数据都有两个副本,1TB的原始数据需要占用3TB ...

  4. Hadoop 3.0 Erasure Coding 纠删码功能预分析

    前言 HDFS也可以支持Erasure Coding功能了,将会在Hadoop 3.0中发布,可以凭图为证: 在HDFS-7285中,实现了这个新功能.鉴于此功能还远没有到发布的阶段,可能后面此块相关 ...

  5. 9 DataNodes are required for the erasure coding policies: RS-6-3-1024k

    CDH6.2.1版本的集群: 172.30.81.203 manager 172.30.81.204 node1 172.30.81.205 node2 172.30.81.206 node3 存在隐 ...

  6. 【翻译】New in Luminous: Erasure Coding for RBD and CephFS

    Luminous 现在完全支持覆盖写纠删码(EC) RADOS池,允许RBD和CephFS(以及RGW)直接使用纠删码池.这可能会显着地降低Ceph系统每兆字节的总成本,因为通常的3副本存储开销可以减 ...

  7. HDFS纠删码(Erasure Coding)

    目的 HDFS默认的3副本策略,在存储空间和其他比如网络带宽上有200%的开销,因而副本策略是昂贵的.但是对于具有相对较低I/O的冷热数据集,在正常操作期间很少访问其他副本块,但仍然消耗与第一个副本相 ...

  8. HDFS Erasure Coding介绍

    todo 转载于:https://www.cnblogs.com/igloo1986/p/7866321.html

  9. HDFS Erasure Coding

    文章目录 目标 背景 结构 部署 集群和硬件配置 配置密钥 启用Intel ISA-L 管理员命令 使用限制 目标 复制是昂贵的–HDFS默认3x复制方案在存储和其他资源方面(eg.网络.宽带)有20 ...

最新文章

  1. 不疯狂的外星人,已疯狂的资本
  2. 机器学习 深度学习 ai_用AI玩世界末日:深度Q学习的多目标优化
  3. C#后台调用跨域MVC服务,带Cookie验证
  4. 一句话菜刀 php eval,如何基于菜刀PHP一句话实现单个文件批量上传?
  5. 【echarts柱状图最大高度】echarts柱状图限制柱子最大高度方法
  6. 计算机网络七层结构与功能,网络七层结构介绍
  7. Dell vostro 3667重装系统
  8. EKS使用AWS EFS CSI
  9. 卡通人物数据集下载地址
  10. 加速安装pytorch
  11. 卡路里与脂肪重量的换算
  12. golang 获取当天0点时间_golang 获取当天是周几(两种方法)
  13. Matlab读取excel并使用拉依达准则筛选数据
  14. php采集所有a标签,dedecms采集去除a标签代码
  15. HTML5图片与文本对齐方式
  16. 管理培训课程都包括哪些内容?管理者如何提高管理能力?
  17. 树莓派六足仿生蜘蛛机器人Hexapod二次开发源代码
  18. 进程和计划任务管理(二)
  19. 别再说不了解非接触液位传感器了?只需三分钟就能搞懂
  20. 汉芯一号诞生记 zz

热门文章

  1. buuctf [pasecactf_2019]flask_ssti
  2. Fabric2.3 使用Caliper进行性能测试(保姆级示范,亲测可行)
  3. VW虚拟机Ubuntu18.04安装tools
  4. 2017 计蒜之道 初赛 第一场 A 阿里的新游戏
  5. kali破解pdf密码
  6. kafka代码初步涉猎,用代码发送消息到客户端
  7. 第六次大灭绝还远吗?––读《大灭绝时代》
  8. 【转】渗透工具包2014贺岁版发布
  9. 红米note10pro救砖红米k40g游戏增强版救砖联发科机型处理器救砖教程
  10. 2.6. 字符类型与字符编码