存储是一种使系统能够临时或永久保留数据的机制。本主题在系统设计中涉及较少,但是,对一些常见类型的存储技术有一个基本的了解非常重要,这些技术可以帮助我们微调存储组件。让我们讨论一些重要的存储概念:
RAID
RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)是一种在多个硬盘或固态驱动器(SSD)上存储相同数据的方法,以在驱动器发生故障时保护数据。
RAID有不同的级别,并非所有级别都以提供冗余为目标。让我们讨论一些常用的RAID级别:
-
RAID 0:也称为条带(Striping),数据在阵列中的所有驱动器上均匀分布。
-
RAID 1:也称为镜像(Mirroring),一组数据的精确副本至少包含在两个驱动器中。如果一个驱动器出现故障,其他驱动器仍然可以工作。
-
RAID 5:带奇偶校验的条带。需要使用至少3个驱动器,跨多个驱动器(如RAID 0)对数据进行分散读写,但也具有跨驱动器分布的奇偶校验。
-
RAID 6:带双奇偶校验的条带。RAID 6与RAID 5类似,但奇偶校验数据写入两个驱动器。
-
RAID 10:RAID 0和RAID 1的条带和镜像相结合。它通过镜像辅助驱动器上的所有数据,同时在每组驱动器上使用条带来加快数据传输,从而提供安全性。
比较
让我们比较一下不同 RAID 级别的特征:
| 特征 | RAID 0 | RAID 1 | RAID 5 | RAID 6 | RAID 10 |
|---|---|---|---|---|---|
| 描述 | Striping | Mirroring | Striping with Parity | Striping with double parity | Striping and Mirroring |
| 最小磁盘数 | 2 | 2 | 3 | 4 | 4 |
| 读性能 | 高 | 高 | 高 | 高 | 高 |
| 写性能 | 高 | 中 | 高 | 高 | 中 |
| 成本 | 低 | 高 | 低 | 低 | 高 |
| 容错 | 无 | 单驱动故障 | 单驱动故障 | 双驱动故障 | 每个子阵列中最多有一个磁盘故障 |
| 容量利用率 | 100% | 50% | 67%-94% | 50%-80% | 50% |
卷
卷(Volume)是磁盘或磁带上的固定存储量。卷作为术语通常用作存储本身的同义词,但单个磁盘可能包含多个卷,或者一个卷跨越多个磁盘。
文件存储
文件存储是一种解决方案,将数据存储为文件,并将其作为分层目录结构呈现给最终用户。主要优点是提供了一个用户友好的解决方案来存储和检索文件。要在文件存储中查找文件,需要文件的完整路径。它经济且易于构造,通常在硬盘上使用,这意味着它们在用户看来和硬盘上完全相同。
例子:Amazon EFS、Azure files、Google Cloud Filestore 等。
块存储
块存储将数据划分为块(chunk),并将其作为单独的块存储。每个数据块都有一个唯一的标识符,这允许存储系统将较小的数据块放在最方便的地方。
块存储还将数据与用户环境解耦,允许数据跨多个环境。这将创建数据的多个路径,并允许用户快速检索数据。当用户或应用程序从块存储系统请求数据时,底层存储系统重新组合数据块并将数据呈现给用户或应用。
例子:Amazon EBS
对象存储
对象存储也称为基于对象的存储,它将数据文件分解为称为对象的片段。然后,它将这些对象存储在单个存储库中,该存储库可以分布在多个网络系统中。
例子:Amazon S3、Azure Blob Storage、Google Cloud Storage
NAS
NAS(网络附属存储)是连接到网络的存储设备,允许授权网络用户从中央位置存储和检索数据。NAS设备是灵活的,这意味着当我们需要额外的存储时,我们可以增加现有的存储。它速度更快,成本更低,提供了现场公共云的所有好处,让我们完全控制。
HDFS
Hadoop 分布式文件系统(HDFS)是一种设计用于在商用硬件上运行的分布式文件系统。HDFS具有高度容错性,设计用于部署在低成本硬件上。HDFS提供对应用程序数据的高吞吐量访问,适用于具有大数据集的应用程序。它与现有的分布式文件系统有许多相似之处。
HDFS设计用于在大型集群中跨机器可靠存储大文件。它将每个文件存储为一系列块,文件中除最后一个块外的所有块大小相同。并复制文件的块以实现容错。