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

news2024/10/6 18:25:38

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/954179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一种借助MYSQL递归CTE生成所有的组合情况的实现方法

需求说明 有如下表和数据&#xff1a; Nname1户口2查询机构数过多3危险驾驶4多头用信 需要输出name里的所有组合情况&#xff0c;即单个值&#xff0c;两两组合&#xff0c;三个组合、四个组合。结果为2的n次方-1中情况&#xff0c;这里是15。 预期结果为&#xff1a; Com…

DP358 11MHz 增益带宽轨到轨输出运算放大器

DP358、DP321、DP323、DP324是一款低噪声、低压、低 功耗轨到轨输出运放大器&#xff0c;该系列放大器的增益带宽为 11MHz,压摆率为 8.5V/uS,其中DP323 在掉电工作模式下待机电流小于1uA。该系列放大器可以广泛应用于各种电子产品领域。 主要特性: 轨到轨最大输入输出失调电压…

国标GB28181视频监控EasyGBS国标视频平台分享链接不生效的问题解决方案

EasyGBS平台可提供流媒体接入、处理、转发等服务&#xff0c;支持内网、公网的监控设备通过国标GB/T28181协议进行视频监控直播。平台可拓展性强&#xff0c;部署灵活&#xff0c;可实现的视频能力有&#xff1a;实时直播、视频录像、语音对讲、云存储、检索及回放、告警、级联…

【OpenCV入门】第三部分——绘制图形与文字

文章结构 线段的绘制矩形的绘制圆形的绘制多边形的绘制文字的绘制文字的斜体效果文字的垂直镜像效果在图像上绘制文字 动态绘制图形 线段的绘制 使用 line() 方法可绘制长短不一的、粗细各异的、五颜六色的线段。 img cv2.line(img,pt1,pt2,color,thickness)img&#xff1a;…

苹果使用3D打印技术制造Apple Watch Series 9手表外壳

据彭博社的马克・古尔曼报道&#xff0c;苹果公司正在使用 3D 打印技术来制造即将推出的部分Apple Watch Series 9 的外壳。这种制造工艺可以节省传统数控加工所需的大量金属材料&#xff0c;同时缩短生产时间。这与之前苹果分析师郭明錤的说法相吻合。 苹果公司自2021年推出Ai…

【三等奖方案】小样本数据分类任务赛题「痛!太痛了!」团队解题思路

第十届CCF大数据与计算智能大赛&#xff08;2022 CCF BDCI&#xff09;已圆满结束。大赛官方竞赛平台DataFountain&#xff08;简称DF平台&#xff09;将陆续释出各赛题获奖队伍的方案思路。 本方案为【小样本数据分类任务】赛题的三等奖获奖方案&#xff0c;赛题地址&#xf…

亚马逊自动广告如何投放?这些技巧你了解嘛!

现如今&#xff0c;亚马逊店铺为了能够提升产品的转化率&#xff0c;为了增加产品曝光率&#xff0c;会选择投放站内广告&#xff0c;现在大多数的亚马逊店铺都有在站内投放广告&#xff0c;不然的话要想获取到自然流量实在是太难了。 很多没有投放站内广告的亚马逊店铺&#…

【数据结构】C语言队列(详解)

前言: &#x1f4a5;&#x1f388;个人主页:​​​​​​Dream_Chaser&#xff5e; &#x1f388;&#x1f4a5; ✨✨专栏:http://t.csdn.cn/oXkBa ⛳⛳本篇内容:c语言数据结构--C语言实现队列 目录 一.队列概念及结构 1.1队列的概念 1.2队列的结构 二.队列的实现 2.1头文…

Mybatis 里面的缓存机制

Mybatis 里面设计的二级缓存是用来提升数据的检索效率&#xff0c;避免每次数据的访问都需要去查询数据库。 一级缓存&#xff0c;是 SqlSession 级别的缓存&#xff0c;也叫本地缓存&#xff0c;因为每个用户在执行查询的时 候都需要使用 SqlSession 来执行&#xff0c; 为了避…

案例分享:西河水库安全监测信息化系统实施方案

一、项目概述1.1项目背景西河水库信息化工作已开展多年&#xff0c;但是由于西河水库监测设备都已经老化或者损坏&#xff0c;现有设备已渐渐不能满足新时期西河水库信息化和现代化发展需求。因此&#xff0c;灌区管理局拟在运用现代信息和通信技术手段感测、分析、整合水库运行…

【Git】(六)子模块跟随主仓库切换分支

场景 主仓库&#xff1a;TestGit 子模块&#xff1a;SubModule 分支v1.0 .gitmodules文件 [submodule "Library/SubModule"]path Library/SubModuleurl gitgitee.com:sunriver2000/SubModule.gitbranch 1.0.0.0 分支v2.0 .gitmodules文件 [submodule "Li…

Mapbox-gl 关闭所有Popup,以及关闭按钮出现黑色边框bug

1.官方示例 var popup new mapboxgl.Popup().addTo(map);popup.remove(); 很明显&#xff0c;需要记录popup对象&#xff0c;管理起来比较麻烦。 2.本人采用div的方式关闭所有的popup&#xff0c;在map对象上新增加方法 map.closePopupmapView.popupClear function(){$(&q…

Idea中使用Statistic插件统计工程项目代码量

1. 功能背景 公司要对一个项目进行代码统计&#xff0c;这么多类&#xff0c;总不能让我一个一个数据&#xff0c;于是想到了Statistic插件。让我们一起看看Statistic插件怎么使用吧。 2. Statistic插件 首先需要知道Idea统计项目代码行数&#xff0c;主要是使用Statistic插…

概念解析 | 无线感知的新篇章:异构网络感知的原理与挑战

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:异构网络感知。 无线感知的新篇章:异构网络感知的原理与挑战 Interference Management in HetNets 在当今的无线通信领域,我们面临着一个重大的挑战:如何在有限的频谱资源…

【Redis】Redis 的学习教程(五)之 Redis 事务、持久化、集群

1. 事务 1.1 事务的概述 Redis 事务通过 MULTI 、EXEC、DISCARD、WATCH 几个命令来实现 MULTI&#xff1a;开启事务EXEC&#xff1a;提交事务DISCARD&#xff1a;放弃事务WATCH&#xff1a;为 Redis 事务提供 check-and-set &#xff08;CAS&#xff09;行为 Redis 事务可以…

创业新机会?全球将有36%的员工永久远程办公!

刚刚过去的2020年是极其不平凡的一年&#xff0c;这一年面对的困难&#xff0c;严重程度超出了所有人的预料&#xff0c;很多公司都遇到的困难就是无法按时复工&#xff0c;这对于创业公司而言&#xff0c;无异于生死大考。 为了活下去&#xff0c;很多公司都开启了远程办公的…

欧科云链研究院探析Facebook稳定币发行经历会不会在PayPal重演

引言 作者最近的报告-探析PayPal发行稳定币是否会重蹈Facebook覆辙-近期被英国的金融时报&#xff08;中文版&#xff09;刊登。由于该报告在欧科云链研究院内部反响较好&#xff0c;下面就带大家简单的剖析这篇报告的主要内容。 *这篇文章主要由对比分析&#xff08;已删减&a…

【高阶数据结构】AVL树 {概念及实现;节点的定义;插入并调整平衡因子;旋转操作:左单旋,右单旋,左右双旋,右左双旋;AVL树的验证及性能分析}

AVL树 一、AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明…

定位与轨迹-百度鹰眼轨迹开放平台-学习笔记

1. 百度鹰眼轨迹的主要功能接口 百度的鹰眼轨迹平台&#xff0c;根据使用场景不同&#xff0c;提供了web端、安卓端等各种类型的API与SDK&#xff0c;本文章以web端API为例&#xff0c;介绍鹰眼轨迹的使用。 2. API使用前的准备 使用鹰眼轨迹API&#xff0c;需要两把钥匙&…