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

server/2025/2/11 20:33:15/

文章目录

    • 0.简介
    • 1.RAID
      • 1.1 RAID 0
      • 1.2 RAID 1
      • 1.3 RAID 5
      • 1.4 RAID 6
      • 1.5 RAID 10
    • 2.EC(纠删码)
      • 2.1 概念
      • 2.2 原理
    • 3.多副本
    • 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有着更少的空间占用和更高的空间利用率。


http://www.ppmy.cn/server/166850.html

相关文章

rabbitMQ数据隔离

用户管理 点击Admin选项卡,就会呈现rabbitMQ控制台的用户管理界面 Name:sde,也就是用户名Tags:administrator,说明sde用户是超级管理员,拥有所有权限Can access virtual host: /,可…

【Linux网络编程】:网络入门

文章目录 1.网络的发展历程1.1 诞生阶段(20世纪60年代 - 70年代)1.2. 分组交换技术与协议标准化阶段(20世纪70年代 - 80年代)1.3. 局域网与广域网发展阶段(20世纪80年代 - 90年代)1.4. 互联网商业化与普及阶…

计算机网络结课设计:通过思科Cisco进行中小型校园网搭建

上学期计算机网络课程的结课设计是使用思科模拟器搭建一个中小型校园网,当时花了几天时间查阅相关博客总算是做出来了,在验收后一直没管,在寒假想起来了简单分享一下,希望可以给有需求的小伙伴一些帮助 目录 一、设计要求 二、…

互联网企业线上业务拓展与开源AI智能名片2+1链动模式S2B2C商城小程序的创新应用

摘要:随着互联网技术的飞速发展,互联网企业不断探索线上业务的边界,寻求新的增长动力。在互联网初期,面对商业模式和盈利模式的不成熟,国内互联网企业多从借鉴国外成功经验起步,逐步摸索出适合本土市场的线…

Pyqt的QTabWidget组件

1、案例 动态加载tab页面 import sysfrom PyQt6.QtWidgets import * import qt_materialclass Window(QWidget):def __init__(self):super(Window, self).__init__()self.setWindowTitle("Login")self.resize(800, 600)# 存放已加载的页面idself.tab_index_set se…

ubuntu中如何在vscode的终端目录后显示(当前的git分支名) 实测有用

效果展示 配置过程: 在 Ubuntu 中,如果你想在 VS Code 的终端提示符后显示当前的 Git 分支名,可以通过修改 Shell 配置文件(如 ~/.bashrc 或 ~/.zshrc)来实现。以下是具体步骤: 1. 确定使用的 Shell 首…

鸿蒙HarmonyOS NEXT开发:优化复杂UI页面的性能——自定义组件冻结(freezeWhenInactive属性)

文章目录 一、自定义组件冻结1、freezeWhenInactive 二、当前支持的场景1、页面路由2、TabContent3、Navigation4、组件复用 三、限制条件 一、自定义组件冻结 自定义组件冻结功能专为优化复杂UI页面的性能而设计,尤其适用于包含多个页面栈、长列表或宫格布局的场景…

AF3 ExponentialMovingAverage类解读

AlphaFold3 的 ExponentialMovingAverage (EMA) 类,用于维护神经网络模型参数的指数加权移动平均。它可以在训练过程中对模型的参数进行平滑处理,以减缓参数更新的波动,帮助提升模型的泛化能力。 主要功能 EMA 通过对每个参数的移动平均来稳定模型的训练过程。在每一步,参…