专栏首页海云捷迅的专栏分布式存储系统纠删码技术分享
原创

分布式存储系统纠删码技术分享

云课堂专题

海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解的信息,可留言给我们,我们会根据问题酌情回复。

纠删码简介

随着计算机技术和存储技术的发展,数据正以爆炸式的速度增长,海量数据对存储系统提出了巨大的挑战。为了保障存储系统的CAP,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),对于可用性来说常见的2种技术是多副本和纠删码,多副本就是把数据复制多份分别存储到不同地方以实现冗余备份,这种方法容错性能较好但存储利用率低,比较典型的3副本磁盘利用率仅33.33%,当系统数据量很大时,多副本带来巨大的额外存储空间消耗,导致TCO居高不下。纠删码技术以牺牲CPU计算量和网络负载为代价,提高存储空间利用率,同时提供近似副本的可靠性。

纠删码(Erasure Coding, EC)算法起源于1960年,最早应用于通信系统领域。最著名的是范德蒙RS编码Reed-Solomon。随着时间的推移,出现了一些变种算法,例如柯西RS编码等。目前,纠删码技术在分布式存储系统中的应用主要有三类,阵列纠删码(Array Code: RAID5、RAID6等)、RS(Reed-Solomon)里德-所罗门类纠删码和LDPC(LowDensity Parity Check Code)低密度奇偶校验纠删码。纠删码首先对原始数据进行分片,然后基于分片编码生成备份数据,最后将原始数据和备份数据分别写入不同的存储介质。数据恢复是编码的逆运算(为了能够进行数据恢复,要求编码采用的方法(函数)一定可逆),因此也称为解码。

目前一些主流的云存储厂商都采用EC编码方式。

Reed-Solomon实现原理

假设存储系统由n块磁盘组成,我们将它分为k个磁盘来保存数据,这样m=n-k个磁盘保存编码信息,分别对数据进行编码,允许最多m个磁盘出现故障(可以是数据盘也可以是编码盘)。编码和解码行为如图1所示。通过编码,k个数据盘的内容被用来计算m个编码盘的内容。当m个磁盘出现故障,利用现有的磁盘数据通过解码算法可以还原得到所有丢失的数据内容,从而实现恢复。

图1 纠删码基本原理图

编码原理

RS编码以word为编码和解码单位,大的数据块拆分到字长为w(取值一般为8或者16位)的word,然后对word进行编解码。数据块的编码原理与word编码原理相同,后文中一word为例说明,变量Di, Ci将代表一个word。

把输入数据视为向量D=(D1,D2,..., Dn), 编码后数据视为向量(D1, D2,..., Dn, C1, C2,..., Cm),RS编码可视为如下图所示矩阵运算。

图2 编码数据

图2最左边是编码矩阵(或称为生成矩阵、分布矩阵,Distribution Matrix),编码矩阵需要满足任意n*n子矩阵可逆。

为方便数据存储,编码矩阵上部是单位阵(n行n列),下部是m行n列矩阵。下部矩阵可以选择范德蒙德矩阵或柯西矩阵。

解码原理

RS最多能容忍m个数据块被删除。数据恢复的过程如下:

(1)假设D1、D4、C2丢失,从编码矩阵中删掉丢失的数据块/编码块对应的行。   

图3 丢失m块

根据图2所示RS编码运算等式,可以得到如下B' 以及等式。

图4 vandermode矩阵

(2)求出B’的逆矩阵。

图5 B’逆矩阵

(3)由于B' 是可逆的,记B'的逆矩阵为 (B'^-1),则B' * (B'^-1) = I 单位矩阵。两边左乘B' 逆矩阵。

图6 两边乘上B’逆矩阵

(4)得到如下原始数据D的计算公式

图7 单位矩阵

即恢复原始数据D:

图8 解码完成

(5)对D重新编码,可得到丢失的数据

纠删码在ceph中的应用

以典型的读写过程来描述纠删码在ceph中的实现。假设使用RS(10,3)的方式,

客户端要写入一个对象:

  • 副本池(3副本为例):

OSD会将数据复制3份分别存放到3块不同的磁盘上(OSD1,OSD2,OSD3)

  • 纠删池(RS(10,3)为例)

将原始数据按照顺序切分为若干相同大小的块,示例切分为10块;

将对象基于纠删码算法进行编码,得到编码块数据,示例得到3块大小相同的数据;

将编码后的数据块及编码块分别存放到13块不同的磁盘上(OSD1-OSD13)

客户端要读取一个对象:

  • 副本池

由于3副本存放的数据均相同,客户端直接从主OSD读取后返回

  • 纠删池

如果数据块未丢失,那么需要从存放了多个数据块的不同磁盘上读取并按照顺序拼接,如果读的过程中检测到数据块丢失,那么除了需要从那些幸存的OSD上读取数据之外,还需要通过纠删码算法解码还原,最后按照顺序拼接后返回给客户端。

纠删码在AWCloud中的应用

在Ceph中纠删码相对于多副本而言,读取数据需要同时访问更多的磁盘,由算法本身带来的额外网络消耗,以及磁盘故障时额外CPU消耗,导致纠删码性能比多副本要差,因此仅适合于存储大量对时延不敏感的冷数据(如备份数据)。

AWCloud利用FPGA高效的计算能力,将原本使用CPU计算的纠删码算法offload到FPGA硬件上,通过PCI-e方式完成数据在CPU和FPGA硬件之间的交换,最终达到降低CPU消耗的方式来提升集群性能,寻求成本与性能之间的平衡。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • AWCMP实现云应用全生命周期管理

    云应用生命周期管理是整个云平台的核心业务,以“应用商店”为核心,实现快速的应用开发和应用分发,实现整个云应用生命周期的管理和运营。通过对虚拟机、容器和物理机以预...

    海云捷迅
  • 腾讯云授权海云捷迅 为多彩贵州建设添彩加色

    5月28日,腾讯云计算(北京)有限责任公司(以下简称腾讯云)与贵州海云捷迅科技有限公司(以下简称海云捷迅)在贵阳数博会国际生态会议中心现场签署战略合作授权协议。...

    海云捷迅
  • 海云捷迅的教育云实战经验分享

    在互联网时代,大数据、云计算、移动化、社交网络、物联网等新技术层出不穷,对教育信息化应用也产生了重大影响,大数据学习分析、教育云、HPC、移动教育等应用逐渐成为...

    海云捷迅
  • 关于数据类型的前端面试题总结,不要被鄙视哦~

    用户1687375
  • 开发者必读:计算机科学中的线性代数

    机器之心
  • CSS特效,给你的惊喜

    现在这种设计在移动端很常见,因为宽度是稀缺的。相信不少人设计项目中有实现过这种交互,而且,我敢保证是利用JS实现的。

    grain先森
  • 开发者必读:计算机科学中的线性代数(附论文)

    来源:机器之心 作者:Petros Drineas、Michael W. Mahoney 本文共3994字,建议阅读6分钟。 本文为你分享一篇来自普渡大学与UC...

    数据派THU
  • 一沟绝望的死水:模拟邮件服务器,批量注册利器

    我们的目标就是把这互联网搞的更乱更臭,所以我们是不被规则束缚的。今天要拿来开刀的,是邮件系统。

    xjjdog
  • Oracle参数解析(nls_comp)

    前面介绍了Oracle的基本参数,从这节开始讲其他的参数,参数从v$parameter中提取

    bsbforever
  • RKGE_论文阅读笔记

    while(1) { cout<<”Never Give Up”<<endl; }

    AngelNH

扫码关注云+社区

领取腾讯云代金券