Erasure-Code(纠删码) 最佳实践

1. 纠删码原理

这个星球产生的数据越来越庞大,差不多2010年开始各大互联网公司大都上线了系统以应对数据膨胀带来的成本增长。Erasure-Code(纠删码)技术应用其中。典型如Google 新一代分布式存储系统colossus系统的Reed-solomon算法、Window Azure Storage 的LRC算法等等。

EC(Erasure-Code)算法的最底层的基本的数学原理:行列矩阵中一种特殊矩阵的性质:即任意MxN(M行N列{M<N})的行列式,其任意MxM的子矩阵都是可逆,以实现数据恢复运算

如下图所示,以一个典型的例子进行说明。

D1~D5通过矩阵A(8*5)相乘得到D1~D5的原始数据和C1~C3的校验数据块(Figure-1)。假设此时原始数据块D1、D4和校验数据块C1发生损坏。那要如何才能读取D1、D4等数据块、还原C1校验数据块?这个时候就依赖矩阵运算的特性。首先可知从A获取子矩阵B‘ (5*5)与原始数据相乘可以得到D2、D3、D5、C2、C3(即现有还未损坏的数据)(Figure-1),那反过来说,当前的问题就是:如何通过已有的B‘和D2、D3、D5、C2、C3还原得到D1、D4数据块和C1校验块。此时利用矩阵运算,假设B可逆,在等式2边分别乘上B’的可逆矩阵B'-1,这样就可以通过B'-1 和已有的D2、D3、D5、C2、C3 进行矩阵运算还原得到D1和D4数据块。C1可以通过(B11~B15)与已经恢复的数据(D1~D5)相乘获得。该过程可行的核心保障就是需要确保矩阵A的任意5*5的子矩阵的可逆矩阵都是存在的,这样才能确保丢失8块数据中的任意3块数据都可以进行数据还原。核心的重点就是需要找到这样的矩阵A,其中黄色部分就是范德蒙矩阵(这里对此不多做展开,自行google或者参看任何矩阵论的教材都有清晰的说明)。

更多由浅入深,如何工程化的原理的解释可以参考:Erase Code 原理。

2. EC与数据放置

首先看如何对数据进行数据放置。比如HDFS、colossus、Ceph 将数据条带化的放置在不同的chunk(Stripe placement)。而Window Azure Storage 则使用连续数据块放置方式(Contiguous placement)。各自有各自的特点。

如上图所示,假设abcdfghigklmnopqrstuvwxyz为原始的一段数据内容,在EC场景下可以有2种截然不同的数据划分方式。

  • Stripe Placement:条带的数据放置方式,即将数据顺序进行拆散,逻辑放置在不同的数据块中,打破了数据原先的物理相邻顺序。
  • Contiguous PlaceMent:连续的数据放置方式,即保留数据原来的顺序,除了数据分块的边界(如上图D1、D2)的边界,核心上来说数据逻辑上还是保持了相邻的顺序。

这2种方式各有各的特点,如上图所示,在工程上D1~D5数据块 、C1~C3校验块一般都按照故障域原则放置在不同可用区的不同的磁盘上。

Stripe Placement 的特点

  1. 一份数据的读取可以同时利用多个磁盘的吞吐能力,但是对于IOPS来说是放大(换句话说对大块数据读取比较友好),缺点就是失去了数据的locality(这在Hadoop大数据体系中将计算放置在数据附近来说是很关键的一点);
  2. 及时EC,即不用等凑足整一份大的数据才进行EC写入,基本在凑足EC的条带大小即可进行写入,也就是说在线数据写入可以直接以EC的体系。

Contiguous Placement的特点则相对来说相反

  1. 数据都是临近放置,所以一般情况下的数据的读取就跟副本形式一样,在一个数据节点是就可以获得,对于小IO来说比较友好,对于大IO没有明显的缺陷。
  2. 不能进行及时EC。需要进行凑足一定的数据才能够形成D1到D5的数据块进行EC,所以一般来说比较适合做后台的EC。比如Window Azure Storage 是先写三副本的Extent,在Extent seal(关闭掉)之后后台异步得将数据为EC。

3. EC 条带大小与小IO

在大规模的存储系统中,小文件往往会结合索引机制,将小文件合并成一整个大文件。详见对象存储架构设计A Bite of S3 Storage Arch。

对于小文件一般是指小于128KB的文件,在Contiguous PlaceMent 条件下小文件在常规情况下的读取方式与传统的多副本类似。但是在高负载情况下和节点故障情况下需要backup request 机制保障latency,在如上5+3的模式下,一个IO,需要其他5个节点的IO进行恢复。

为了避免在5倍的IO造成对用户latency的显著放大(负载情况下慢节点拖慢整个数据读取的速度)。一般来说可以通过Backup Request的方式减少对用户即时访问的影响。window-azure 给出了RS(12+3 )、 LRC(12+2+2)等 纠删码算法情况下EC重建4KB数据的响应时间情况。从图(a)可以看出在低压力情况下通过RS方式重建(读取12块数据)相比直接读取的时间差不多是2.5倍(23ms VS 51ms vs),在通过Backup Requst的方式发送15个请求选最快的12个的策略恢复数据情况下可以获得与单副本差不多的响应时间(29ms)。但是在高压力情况下,读取12块数据的响应时间相比于直接读取的响应时间是(305ms VS 91ms ),同样可以通过backup Request(12+2)的方式来使得响应时间降低到差不多与直接读取差不多的响应时间97ms。也就是说在整体IOPS能力并非瓶颈情况下,可以通过BackUp Request的机制显著降低采用EC技术方案在坏盘等故障情况下对用户IO延迟的直接影响

而对于Stripe PlaceMent 情况下。如果Stripe Unit 过小,比如4KB,那么可能会导致128KB的小文件读取需要跨很多节点才能够读取完整的数据,相对来说比较费IOPS。这个时候可以适当调整条带大小,使得在正常情况下,小IO的绝大多数情况下的读取可以在单个节点读取,跨越边界情况下读取2个节点。

但是这会导致小文件需要很大的IO填充才能够进行一次写入(满条带写),空间利用率会有比较大的降低。上层合直接写入的文件不适合太小,A Bite of S3 Storage Arch中说明的小文件一般来说先可以不通过3副本WAL的方式保障持久性的情况下,通过Merge成更大的MobFile EC的方式来避免文件太小。如下图所示EC 4+2组合,可以使得EC Stripe Unit大小比如为1.5MB。每个分片数据256KB的方式来使得小IO在正常情况下可以在一个节点上读取。

4. EC 与大IO

在大块数据读写情况下,Contiguous PlaceMent 方案,在一般场景下跟传统的多副本策略几乎是一样的。因为数据一般来说都是临近放置,直接按照分块的放置进行直接数据读取即可。但是在异常情况下,按照Window Azure Storage 场景的测试,由于磁盘和网络带宽容易相对容易达到瓶颈,所以采用BackUp Request的并没有啥改善。

如下图所示,RS(read k) 、RS(readk +1)、RS(readk +2)、RS(readk +3) 均没有太大的改善。其发表paper的时候大概是2010年当初其网络(NIC) 大概是1Gbps。而现在其实网络越来越多的是10Gbps、50Gbps、100Gbps。所以今日不同往时,最核心的原因还是看当前系统带宽层面的带宽是否已经饱和。

一般情况下可以认为上层业务的大块连续IO读取都是满条带的读取,在Stripe Placement 情况下,满条带的读取在正常情况下和异常情况下从底层读取的数据量可以认为是一致的(如下图左侧图所示),而且当前一般来说EC 解码有硬件加速,即计算层面不太容易成为瓶颈,所以Stripe Placement 在正常度和异常情况下的开销基本可以认为差不多。在极端情况下,数据跨越stripe unit边界的情况下,会带来2倍的IO放大。但是在Contiguous PlaceMent 策略下,则需要更大的范围内的放大,如下EC 4+2 的策略下,可能会导致4倍的放大,在比如12+3等情况下,会有更大的放大。

5. 总结

上述分析了EC 结合不同的放置策略Stripe PlaceMent、Congiguous PlaceMent情况下各自的优势和缺点,在这些固有的约束条件下,需要通过合理的架构选择来充分利用EC的优点,屏蔽EC缺点以最大化EC的价值

在当前机房网络能力越来越强的情况下(如(Flat DataCenter Storage说明),数据的locality总体来说在大多数大数据场景下越来越不重要了,存储计算分离是大趋势。比如S3(对象存储)、EBS等,可以考虑使用 RS + Stripe PlaceMent 结合合理的 Stripe Unit的方案作为底层的纠删码方案,在架构选择层面可以参考之前的2篇博文

对象存储架构设计、随机IO存储系统EBS架构设计。

题图19世纪伟大数学家 伽罗华. 其数学理论让EC在计算机上的实现成为可能

Notes

作者:网易存储团队工程师 TOM。限于作者水平,难免有理解和描述上有疏漏或者错误的地方,欢迎共同交流;部分参考已经在正文和参考文献中列表注明,但仍有可能有疏漏的地方,有任何侵权或者不明确的地方,欢迎指出,必定及时更正或者删除;文章供于学习交流,转载注明出处

参考文献

  1. HDFS-Erasure-Coding-Design
  2. Erasure Coding in Windows Azure Storage
  3. Erasure Code 原理和工程化介绍)
  4. Flat DataCenter Storage
  5. A Bite Of S3 Storage Arch
  6. A Bite of Random IO Storage Design-EBS

编辑于 02-12

Erasure-Code(纠删码) 最佳实践相关推荐

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

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

  2. Hadoop3.0时代,怎么能不懂EC技术纠删码? 个推为你解读

    根据云存储服务商Backblaze发布的2021年硬盘"质量报告",现有存储硬件设备的可靠性无法完全保证,我们需要在软件层面通过一些机制来实现可靠存储.一个分布式软件的常用设计原则 ...

  3. MiniO纠删码快速入门

    MiniO纠删码快速入门 Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏. 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据. 什么是纠 ...

  4. SDS离全面EC(纠删码)还有多远?

    SDS(软件定义存储)离全协议(块.文件.对象).全介质(全闪.混合) .全场景使用EC(纠删码)还有多远?今天我们来寻找答案. 我们XSKY一直在提升SDS的得盘率.性能.扩展性.通用性,以便SDS ...

  5. Hadoop 3.0纠删码简单调研

    目录: 1.  背景 2. 纠删码(Erasure Coding)介绍 3. 纠删码(Erasure Coding)原理 4. 总结 一. 背景 随着大数据技术的发展,HDFS作为Hadoop的核心模 ...

  6. Erasure Code - EC纠删码原理

    Erasure Code - EC纠删码原理 查看全文 http://www.taodudu.cc/news/show-3010091.html 相关文章: 楞严咒全文正确注音版_楞严咒全文注音 积分 ...

  7. minio存储之纠删码(Erasure Code)

    纠删码的原理介绍可以参考: https://www.jianshu.com/p/4abf65ad03af 一般上我们如果要保证数据高可用,主流的有两种策略: 多副本 纠删码 副本(Replicatio ...

  8. 分布式系统下的纠删码技术(一) -- Erasure Code (EC)

    近几个月主要参与一个分布式存储系统的纠删码部分(用于数据容错),纠删码在学术界出现比较早,现在ceph,微软的存储系统,Hadoop 3.0等都用了EC.文章会分为多篇,主要将Erasure Code ...

  9. Ceph 进阶系列(四):Ceph的纠删码特性 EC(Erasure Code)

    从GitHub上Clone Ceph项目,我是基于(ceph version 12.2.11 luminous 版本)的代码来分析的 一.EC(Erasure Code)是什么? Ceph的纠删码特性 ...

最新文章

  1. python-GUI,生成ssn
  2. php mysql文件缓存_PHP文件缓存类实现代码
  3. HTMLCSS 第三天 笔记
  4. java客户端api文档_Java 11:新的HTTP客户端API
  5. 大厂面试必问!50w字+的Java技术类校招面试题汇总
  6. ssd目标检测训练自己的数据_目标检测Tensorflow object detection API之训练自己的数据集...
  7. 使用thead,tbody,tfoot来实现表格的分页打印
  8. 《认清C++语言》---接口继承和实现继承
  9. js里面把密码encode_PHP会员找回密码功能的简单实现
  10. 记录常见的配准方法(二)
  11. 域名和IP地址的区别
  12. 【打卡】汽车领域多语种迁移学习挑战赛
  13. debian7修改密码
  14. JavaScript 事件委托
  15. C++的errorC2039
  16. 深圳湾口岸过关进入香港的交通方法
  17. 忽悠自由主义_所有教育工作者都应该知道的16种自由主义
  18. 开源协议 - 几张开源协议比较
  19. Top 10 Most Popular Torrent Sites of 2014
  20. ThinkPHP框架漏洞

热门文章

  1. SH-SSS丨面向有声读物的跨说话人语音风格迁移
  2. 【项目管理】采购、外包、合同
  3. 用Halo在自己服务器搭建一个个人博客
  4. Windows XP 瘦身提速优化技巧大全
  5. 将扩散模型应用到文本领域
  6. 北京新机场 严打无人机“黑飞”
  7. 从“点卡改月卡”谈电子游戏产业中的道德困境
  8. 【卷积码系列4】卷积码的状态转移函数、距离谱和译码性能界分析及matlab仿真
  9. 去年“双11“我买的那台云服务器
  10. 故障:卡死原因及解决