【海云捷迅云课堂】分布式存储系统纠删码技术分享
云课堂专题
海云捷迅云课堂专题,旨在秉承开源理念,为大家提供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消耗的方式来提升集群性能,寻求成本与性能之间的平衡。
【海云捷迅云课堂】分布式存储系统纠删码技术分享相关推荐
- 【海云捷迅云课堂】云主机驱散说明
海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解的信息,可留言给我们,我们会根据问题酌情 ...
- 【海云捷迅云课堂】DPDK技术分享文档
海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解的信息,可留言给我们,我们会根据问题酌情 ...
- 【海云捷迅云课堂】vGPU在OpenStack中的应用
海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解的信息,可留言给我们,我们会根据问题酌情 ...
- 海云捷迅的教育云实战经验分享
在互联网时代,大数据.云计算.移动化.社交网络.物联网等新技术层出不穷,对教育信息化应用也产生了重大影响,大数据学习分析.教育云.HPC.移动教育等应用逐渐成为教育行业的热点. 然而,教育系统对于信息 ...
- 化繁为简 海云捷迅为企业提供应用OpenStack新“姿势”
自2010年10月 OpenStack首个正式版本Austin发布至今,已有近七年的发展历程.相比Cloudstack.OpenNebula等开源技术,OpenStack发展最为迅速,随时间推移渐渐趋 ...
- 专访李华:低调的海云捷迅如何优雅做“减法”
OpenStack刚刚在上周过完了6周岁生日,从最初的炒作到现在的趋于理性,无论是行业领袖还是初创新秀都逐渐抛弃浮躁,脚踏实地让OpenStack真正落地,6年的时光,让OpenStack这个曾经很少 ...
- 2018最值得期待:为AI提供基础云平台的海云捷迅
今天是大年初二,给您拜年! 今年春节不一样,中国云报携手为AI提供基础云平台的海云捷迅给您拜年! 以下是海云捷迅CTO李华的新年寄语 北京海云捷迅科技有限公司(简称AWCloud海云捷迅),国内领先的 ...
- 用SaaS的方法做云管理 海云捷迅的创新之法
[51CTO.com原创稿件]如今,OpenStack已经逐渐开始被企业所接受,将OpenStack部署在企业的生产环境中,但是,OpenStack发展了六年后,我们仍然看到不少OpenStack的失 ...
- 百度飞桨Paddle Lite与海云捷迅基于Intel FPGA的自研开发套件完成适配
点击左上方蓝字关注我们 在技术革新的浪潮下,人工智能在产业升级.改善人类生活等方面发挥着越来越重要的作用.从科研.金融.零售到工业.农业等越来越多的行业与业务场景,无不渗透了人工智能的威力.此外,为人 ...
最新文章
- SAP MM ME21N 创建PO时报错 - Net price in CNY becomes too large – 之对策
- linux查看网卡速度
- C#中嵌入互操作类型的含义
- python模拟点击网页按钮_网页自动化开发(第一章)
- 二叉搜索树 (BST)
- linux启动项目报连不上mysql_Linux运维常见故障及处理的 32 个妙计
- java中怎么判断返回200_java – 从Spring REST API返回HTTP代码200
- 【转】Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
- Python学习笔记day10
- 27. 使用distance和advance将容器的const_iterator转换成iterator
- Python 优雅获取本机 IP 方法【转】
- 如何使用两台无线路由器进行无线桥接(互联)(转)
- UGUI源码剖析(CanvasUpdateSystem 画布刷新系统)
- 【IOI2020国家集训队作业 Part 1】CF505E Mr. Kitayuta vs. Bamboos
- csv、txt和tsv数据文件的异同点,以及如何使用Python读取和生成
- 开发润乾报表过程:因为内容过多分页导致的这条线
- 【iOS】设置背景渐变色
- mysql修改游戏元宝_页游源码【武斗乾坤】自带安装启动教程+元宝游戏数据修改教程+自由一键游戏启动服务端...
- 编译错误:类型不匹配 mscomctl与Excel库
- [模板] 二分图最大匹配
热门文章
- 运用多种设计模式的综合案例_北风网原创Java设计模式全面解析(23种设计模式综合实例应用)...
- SpringWind180926
- 科卫机器人软件测试笔试题
- 大学计算机基础第5版赵英良答案,清华大学出版社-图书详情-《C++程序设计实验指导与习题解析》...
- 电脑蓝屏的解决- -
- json 布尔值 java,默认情况下,布尔值字段的JSON Post请求发送false
- 阿里云搜索是什么,与百度搜索有什么不同
- 学生管理系统——用链表实现
- 无功优化的matlab程序,遗传算法的无功优化matlab实现
- 导出Excel报错问题