存储可靠性:从基于磁盘的RAID到分布式纠删码(EC),多副本

文章目录

    • 0.简介
    • 1.RAID
      • [1.1 RAID 0](#1.1 RAID 0)
      • [1.2 RAID 1](#1.2 RAID 1)
      • [1.3 RAID 5](#1.3 RAID 5)
      • [1.4 RAID 6](#1.4 RAID 6)
      • [1.5 RAID 10](#1.5 RAID 10)
    • 2.EC(纠删码)
      • [2.1 概念](#2.1 概念)
      • [2.2 原理](#2.2 原理)
    • 3.多副本
    • [4. 总结和优缺点比较](#4. 总结和优缺点比较)

0.简介

在选择数据存储方案时,一个绕不开的话题就是数据存储的可靠性(面对故障时的应对能力),本文对磁盘的RAID技术和现在分布式存储常用的纠删码(EC)和多副本的原理和优缺点进行详细的介绍。

1.RAID

RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。RAID技术主要分为几种不同的级别,以下是其不同级别及其特点的介绍:

1.1 RAID 0

RAID 0 又称为Striping(条带化),条带化意思是把各个磁盘的相同偏移量的一块空间横向进行分割,从而形成一块逻辑存储空间。数据按照条带来进行写入,即一条写满后再写下一条。一个卷可以有很多条条带组成。条带的划分应该的磁盘配置初级就完成。条带包含扇区(或块)的个数叫条带长度;每个磁盘内包含属于这个条带的扇区(或块)的个数叫条带深度。引入条带的原因是要解决单个磁盘一次只能同时并发一个IO和保证数据完整性。提高并发是通过条带的方式可以让多个磁盘一起协同完成任务来实现的,其结构如下,该层级一块磁盘破坏,数据完整性就被破坏了。

1.2 RAID 1

RAID 1 又称为Mirroring(镜像),它将数据完全复制到两个或多个磁盘上。这种方式提供了最高的数据安全性,但成本最高,并且存储效率只有50%(即,如果使用了两个磁盘,实际可用存储空间只有一个磁盘的容量),其读写特点也很明显,读快,写慢。

1.3 RAID 5

RAID 5结合了条带化和分布式奇偶校验。数据被分散到多个磁盘上,同时校验信息也被存储在这些磁盘上。如果任何一个磁盘出现故障,数据可以从其他磁盘和校验信息中恢复。RAID 5在性能和成本之间提供了较好的平衡。

1.4 RAID 6

与RAID 5类似,但提供了两个磁盘的容错能力。它使用两种不同方式的奇偶校验,因此可以承受两个磁盘的同时故障。

1.5 RAID 10

RAID 10又称为RAID 1+0,它是RAID 1和RAID 0的组合。数据先被镜像到两个磁盘组,然后这些组再被条带化。这种方式提供了非常高的性能和容错能力,但成本也相对较高。

2.EC(纠删码)

2.1 概念

EC纠删码(Erasure Coding)是一种高级数据保护技术,也称为纠删编码或前向纠错(FEC)编码。它主要用于分布式存储系统中,以提高数据的可靠性和存储效率。

2.2 原理

类似于RAID5中的思路,增加校验码来保证数据存储的可靠性,下面先来看一个4+2编码解码以及故障恢复的流程。

1)chunk:将数据进行分片,上图分成了四个片。

2)encode:根据四个数据分片,生成两个校验分片,也就是4+2结构。

3)故障:4+2允许坏两个片,图中是d2和c1损坏。

4)decode:根据剩余的四个片计算出原始块。

5)re-encode:根据原始块重新分成四个数据块并计算出校验块。

6)replace:将损坏的块进行替换。

上面比较关键的就是如何生成校验码和恢复数据,主要利用可逆矩阵去实现。

3.多副本

多副本比较容易理解,就是多份数据,类似于RAID1,其结构如下:

4. 总结和优缺点比较

以上介绍了从单机到分布式的数据可靠性保证方式,单机可以通过磁盘组合(RAID)的方式保证可靠性同时提高并发,而分布式可以通过多节点存储的方式(EC)或多副本去保证数据可靠性,其都能看到RAID的影子,只是将其扩展到多节点。

而两种分布式的方式而言,多副本有着更好的并发和对节点故障数量容忍更好;EC有着更少的空间占用和更高的空间利用率。

相关推荐
闪电悠米3 小时前
黑马点评-Redis 消息队列-03_stream_consumer_group
开发语言·数据库·redis·分布式·缓存·junit·lua
z落落7 小时前
C# 事件(Event)+自定义带参数事件例子
开发语言·分布式·c#
我是一颗柠檬8 小时前
【Java项目技术亮点】分库分表+数据路由策略:单表5000万后的架构升级方案
java·开发语言·分布式·架构
半夜修仙9 小时前
RabbitMQ中如何保证消息的可靠性传输
java·分布式·中间件·rabbitmq·github·java-rabbitmq
小二·11 小时前
Redis 7 分布式缓存架构实战
redis·分布式·缓存
zhuhai_xigedian11 小时前
源网荷储一体化 vs 传统供用电模式:差异、优势与转型路径
大数据·人工智能·分布式·系统架构·能源
凯源智能13 小时前
屋顶分布式光伏箱变远程测控实战:宝鸡法士特项目高效交付解析
分布式
Amy1870211182314 小时前
东南亚智慧物流园区的“隐形守护者”:有源滤波柜如何驯服变频器5/7次谐波
分布式·能源
闪电悠米15 小时前
黑马点评-Redis 消息队列-04_stream_seckill_order
数据库·redis·分布式·缓存·oracle·junit·lua
HLAIA光子15 小时前
分布式锁与事务:你的微服务可能根本不需要它们
分布式·后端·微服务