一个商业存储系统,为了实现故障容错需要有数据冗余技术。当组成存储系统的部件(包括但不限于硬盘)出现故障时,由于存在冗余,仍然可以从其它部件完整读取数据,从而不会因为故障造成数据丢失。

通常衡量数据冗余技术的指标为数据冗余率、检错能力、纠错能力和纠删能力,定义如下:

数据冗余率:冗余后的数据容量/原始数据容量x100%
检错:能识别数据差错
纠错:能纠正数据差错
纠删:能纠错而且能删除超过纠错能力的数据

数据冗余技术分为如下几个级别:

入门级:多副本

一般人对数据冗余技术的理解就是多存几份副本,一份丢了还有其它,副本越多越不容易丢。多副本确实是一种常用的数据冗余技术,最简单但数据冗余率的代价也最高,常见的三副本存储的数据冗余率高达300%,如果要10副本则数据冗余率为1000%。

多副本不仅数据冗余率高,而且但检错纠错能力弱,无纠删能力,还有脑裂(破坏数据一致性)风险。例如,两副本模式下,如果两份数据不一致,能够检错(知道数据有差错),但不能纠错(不知道哪份是对的),这时候就称为脑裂,就相当于一个人闹神经病一样,左脑和右脑打架。在三副本模式下,可以多数判决,具备1位的纠错能力(如果只有1位数据错,可以纠正),但不具备2位的纠错能力。

当采用三副本模式时,数据可靠性大约为11个9(年化99.999999999%)。

常规级:RAID

这是企业级存储最常用的数据冗余技术。RAID是Redundant Arrays of Independent Drives的缩写,有“独立磁盘构成的具有冗余能力的阵列”之意,也称为磁盘阵列,简称盘阵,是用多块磁盘组成一个存储池的技术。

不同的RAID模式采取不同的数据冗余方式,常见的有:

  1. RAID0:无冗余,只是简单将多块盘绑一起视为一块大硬盘,任何一块盘出现故障都会导致数据丢失。
  2. RAID1:镜像(Mirror)模式,相当于双副本,每次写数据都将相同数据写到两块硬盘上。
  3. RAID5:N+1冗余,即每个RAID组冗余一块盘。RAID5允许坏一块盘而不丢数据,即一个RAID组坏一块盘时可以从其它盘完整恢复数据。数据冗余率为(N+1)/Nx100%,有较弱的检错能力,无纠错能力,无纠删能力,数据可靠性大约4个9(99.99%)。
  4. RAID6: N+2冗余,即每个RAID组冗余2块盘。RAID6允许坏2块盘而不丢数据,即一个RAID组即使同时坏了2块盘也可以从其它盘完整恢复数据。数据冗余率为(N+2)/Nx100%,有较弱的检错能力,较弱的纠错能力,无纠删能力,数据可靠性大约7个9(99.99999%)。

高级:N+M纠删码

纠删码(Erasure Code)是一种前向纠错的分组差错控制编码,例如RS编码、BCH编码、LDPC编码等。纠删码可以用N+M来表示,即将数据用该算法编码成N+M个数据分片(Shard),每个数据分片1/N大小,只需要其中N个数据分片就能用对应的译码算法还原数据。也就是说,最多允许M个数据分片丢失也能保障数据不会丢。

纠删码会带来一定的计算开销和元数据开销,但是数据冗余率低,只有(N+M)/Nx100%,可靠性却接近M副本。例如9+3冗余的数据冗余率只有133%,但可靠性却与3副本相当,而3副本的数据冗余率高达300%,仅仅硬盘的成本就是9+3冗余编码的2倍还要多。

不仅数据冗余率低,纠删码还具备强大的检错、纠错和纠删能力,是各存储系统工程实现的理想目标。

顶级:LRC码

数据冗余编码起源于通信领域,当把一大块数据切成很多数据包来逐次传输时,这些数据包在过程中可能会出现错误或者干脆整个数据包被丢掉。为了解决这一问题,可以将原始数据帧编码成带冗余的新数据帧再进行传输。目的节点接收到足够多的数据帧后,便可解码得到原始的数据帧。比如网络的延时/丢包,就可以通过数据冗余编码得到解决。

长期以来,存储领域一直沿用的是通讯领域的纠删码,直到最近几年,学术界开始认识到存储领域与通讯领域的数据容错的需求有些差异,开始研究存储专用的数学编码。

同样是数据容错需求,在存储领域和在通讯领域有什么差异呢?原来,通讯领域的数据是实时传输的,如果传输的数据出现超出纠错能力的错误,可以丢弃后让源端重发数据包,但在存储领域,就不存在重发的机会了,因为读取数据的时候可能已经是几年以后了,到时万一发现了数据错误,也不能重新存了。为了防止数据在存储过程中逐年累计错误(即Silent Data Corruption)最终超出纠错能力,存储系统需要不断验证数据是否正确(即心跳监测)并且重建(Rebuild)错误的数据。通信是没有重建需求的(可以用重发来代替),所以通信领域使用的纠删码就没有针对重建需求的优化设计,而存储领域需要针对重建需求进行优化,这就诞生了LRC(Locally Repairable Code)编码。

在存储系统的数据重建过程中,痛点在于重建时的系统消耗很大。N+M的纠删码在重建一块盘时需要读取N块盘的数据,不仅带宽流量要有N倍的消耗,重建工程中整个存储系统的性能也将大幅下降。随着单块盘的容量越来越大,重建的时间也越来越长,重建过程对系统性能的影响也越来越大。

LRC编码着重解决存储的数据重建开销,通过适度增加一定的冗余可以大大降低重建时的开销。例如,YTFS采用的YTLRC编码方案中,与RS等传统纠删码编码方案相比,仅仅将数据冗余率从110%提高到128%,不仅检错、纠错和纠删能力有一定提升,而且数据重建的开销有一个数量级的下降。

专为存储设计的LRC编码相关推荐

  1. 【转载】看懂通信协议:自定义通信协议设计之TLV编码应用

    0. TLV 相关资料 最近研究了TLV的相关知识点,收集部分资料如下所示: 学习TLV数据结构 通信协议之序列化 看懂通信协议:自定义通信协议设计之TLV编码应用 TLV编解码Java实现 我的开源 ...

  2. 专为UI设计而生,上海道宁与Sketch为广大UI设计师带来更好的设计工具

    在整个设计领域 PS始终是最主流设计软件 拥有着全面而强大的功能 却也造就了其 复杂而又繁琐的操作 对于深耕UI设计行业的设计师们 上海道宁获得授权的Sketch 无疑是更受欢迎的软件 简洁高效的操作 ...

  3. 论设计,需求和编码三者的关系

    设计本身也要有"源"才行,凭空出现的设计那不过是空想,也是不符合实际需要的.没有一个设计可以满足所有需求,因此设计本身就要根据"需求"源头来做. 第一,先有需求 ...

  4. 怎么看到方法内引用方法的注释_开门就看到餐厅,玄关怎么设计?试试这3个方法,专为小户型设计...

    没有玄关很正常,没有鞋柜却不行.现在有很多小户型的房子,都是进门就见客餐厅,这让很多户主感到了忧愁和烦恼.毕竟既想要出门方便,又不想影响餐厅的氛围,这才是大部分户主的真正诉求.那么鞋柜能够跟餐边柜相搭 ...

  5. 7张图揭晓RocketMQ存储设计的精髓

    简介:RocketMQ 作为一款基于磁盘存储的中间件,具有无限积压能力,并提供高吞吐.低延迟的服务能力,其最核心的部分必然是它优雅的存储设计. RocketMQ 作为一款基于磁盘存储的中间件,具有无限 ...

  6. 【虚拟化实战】存储设计之七Block Size

    作者:范军 (Frank Fan)新浪微博:@frankfan7   微信:GetToCloud 在实战存储设计之六Latnecy我们介绍Latency过高的原因和一些建议.本文重点分析Block S ...

  7. Kafka#4:存储设计 分布式设计 源码分析

    https://sites.google.com/a/mammatustech.com/mammatusmain/kafka-architecture/4-kafka-detailed-archite ...

  8. Service Team在索引表CRMD_ORDER_INDEX中的存储设计

    本文介绍Service Team在索引表CRMD_ORDER_INDEX中的存储设计 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  9. EventStore文件存储设计

    背景 ENode是一个CQRS+Event Sourcing架构的开发框架,Event Sourcing需要持久化事件,事件可以持久化在DB,但是DB由于面向的是CRUD场景,是针对数据会不断修改或删 ...

  10. MaxCompute 存储设计

    简介: 存储策略该怎么设计 写这篇存储规划的文章主要是想告诉大家该如何给存储做一个规划,在关系数据库的时代存储昂贵且珍惜,掰手指头花钱是存储规划的常态.但是到了大数据时代大家又立即就都变成印美元的美国 ...

最新文章

  1. Qt Linguist 界面语言翻译
  2. Java Swing:JPanel添加边框
  3. Android app按三层架构+MVC整理(重构)代码可行吗
  4. Scrapy框架的学习(5.scarpy实现翻页爬虫,以及scrapy.Request的相关参数介绍)
  5. Vue 教程第九篇—— 动画和过度效果
  6. Mongoose 索引、Mongoose 内置 CURD 方 法、扩展 Mongoose Model 的静态方法和 实例方法
  7. mysql是小型数据库_mysql小型数据库
  8. 3-4numpy聚合操作和arg(索引)运算和排序
  9. thinkphp框架学习笔记(1)
  10. FFMPEG结构体分析:AVCodec
  11. thinkphp3.2.3 d方法调用自定义模型_啥?Android 11 不能自定义 Toast 了?
  12. Unity3D学习1--Unity基础
  13. 上古八大姓氏,来看看有没有你的姓氏?
  14. 郑州互联网公司和生活成本
  15. 一个人最大的本事,是能控制自己的情绪
  16. Revit初试水之点击按钮打开网页
  17. RPLIDAR A2 rviz显示雷达数据教程
  18. 修改Windows Server2003/SQL Server2005的密码后金和C6软件的配置
  19. ubuntu 内网机器访问外网
  20. 计算机excel新课导入,Excel导入文本文件的技巧

热门文章

  1. 基于nvidia的ffmpeg编解码加速
  2. 2020-11-11 对象与类
  3. 小试牛刀——搭建一个周报管理系统
  4. linux显示器复制模式,屏幕扩展模式、复制模式与合并模式
  5. 软件项目需求分析报告模板
  6. 最精确的噪音测试软件,关于噪音测试App的选择与使用
  7. kitti2bag将KITTI原始数据转换为rosbag
  8. 《21天学通Java(第6版)》—— 导读
  9. 三种短链接生成源码-iApp源码
  10. 2019最新麦子学院web前端开发工程师(全套)