美文网首页
大规模数据存储技术之Erasure Code(EC编码)

大规模数据存储技术之Erasure Code(EC编码)

作者: EdwardLee | 来源:发表于2017-05-18 16:19 被阅读0次

    一、背景

    • 传统各大互联网公司在大规模数据存储,包括私有云和公有云,技术选型上基本核心都是n-way replication,如典型的1主3备的架构。
    • n-way replication技术在带来高可用性的同时,伴随着巨大的冗余存储成本,因此近年来各大公司都在用很多trick减少冗余备份的投入
    • EC编码的理论已经有20多年的历史了,但知道最近几年再P2P领域中发挥作用才被大家重视起来

    二、EC技术

    1、What

    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。

    Paste_Image.png

    2、Where

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

    • 阵列
      如果磁盘阵列需要使用高级特性,比如需要能够容错两个磁盘失效(RAID6),那么可以用n+2的模式;如果想容错4个磁盘失效,则可使用n+4的模式。
    • 云存储
      erasure code是云存储的核心技术,最初诸如hadoop, GFS,CEPH等都采用的是n-way replication来做冗余,但是这样会带来极大的成本开销,因此几乎各大公司都在用erasure code替代n-way replication,之后我还会简要介绍一下具体他们使用的模式。
    • P2P领域
      erasure code 的理论起码也有20年的历史了,但真正实践可能也就最近几年的时间,在P2P领域,动态的分布和智能的容错,特别是对短暂失效是非常关键的。以往的算法或多或少都有点山寨的感觉,而借助erasure code之后,将会使P2P的算法更具有数学的严谨性。
    • 数字编码
      erasure code本身就是出自编码理论,所以在这一块具有先天的优势。

    3、How

    最常见的Erasure Code是Reed Solomon算法,如图,RS codes定义了一个(n + m) * n的分发矩阵(Distribution Matrix) 。

    Paste_Image.png

    1) Encode

    对每一段的n份数据,我们都可以通过B * D 得到得到对n份数据的Encode结果即n+m分数据。

    Paste_Image.png

    2) Decode

    Decode的过程对应着存在数据受损时,可以由任意n份数据恢复出其他受损数据。这个过程分成2个阶段:恢复原始数据、恢复编码数据。

    假设如上图中的原始数据D1~5对应的编码后存储数据中D1, D4, C2 失效

    a) 恢复原始数据

    Step1: 可以同时从矩阵B和B*D中,去掉相应的行,得到下面的等式:

    Paste_Image.png

    Step2: 用Survivors数据恢复原始数据D1~5,我们只需简单的做矩阵乘法:

    Paste_Image.png

    因为(B')^-1 * B' = I 单位矩阵,所以我们就秋得了原始矩阵D:

    Paste_Image.png
    b) 恢复编码数据

    矩阵B是已知的,原始数据D已经完成恢复,只需要再做一次Encode的过程即可。因为是矩阵乘法,只取出受损数据对应的行进行矩阵乘即可。

    参考文档[http://blog.csdn.net/sinat_27186785/article/details/52034588]
    

    相关文章

      网友评论

          本文标题:大规模数据存储技术之Erasure Code(EC编码)

          本文链接:https://www.haomeiwen.com/subject/ruvsxxtx.html