Storage
常见 storage 类型与 RAID
Storage 是让系统存储数据(临时或永久)的机制。系统设计里通常不会深挖 storage,但理解常见存储方式有助于我们更好地设计存储组件。下面是一些关键概念:
RAID
RAID(Redundant Array of Independent Disks)把相同数据存到多块硬盘或 SSD 上,以在磁盘故障时保护数据。
RAID 有不同 level,并非所有 level 都以冗余为目标。常见 RAID levels:
- RAID 0:striping,把数据均匀分布到多个 disks。
- RAID 1:mirroring,至少两块盘保存完整副本,一块坏了仍能工作。
- RAID 5:striping + parity,至少 3 块盘,数据分条带分布,同时写入 parity。
- RAID 6:striping + double parity,类似 RAID 5 但写入双 parity。
- RAID 10:RAID 0 + RAID 1,既 stripe 又 mirror,既有性能也有冗余。
Comparison
| Features | RAID 0 | RAID 1 | RAID 5 | RAID 6 | RAID 10 |
|---|---|---|---|---|---|
| Description | Striping | Mirroring | Striping with Parity | Striping with double parity | Striping and Mirroring |
| Minimum Disks | 2 | 2 | 3 | 4 | 4 |
| Read Performance | High | High | High | High | High |
| Write Performance | High | Medium | High | High | Medium |
| Cost | Low | High | Low | Low | High |
| Fault Tolerance | None | Single-drive failure | Single-drive failure | Two-drive failure | Up to one disk failure in each sub-array |
| Capacity Utilization | 100% | 50% | 67%-94% | 50%-80% | 50% |
Volumes
Volume 是 disk 或 tape 上一个固定的存储单位。它经常被当成 storage 的同义词,但一块 disk 可以包含多个 volumes,一个 volume 也可以跨多个 disks。
File storage
File storage 以文件形式存储数据,并以层级目录结构对外提供访问。优点是对用户友好,定位文件时需要完整路径。它成本低、结构清晰,通常在硬盘上实现。
Example: Amazon EFS, Azure Files, Google Cloud Filestore
Block storage
Block storage 把数据拆成 blocks(chunks)并单独存储。每个 block 都有唯一 ID,storage 系统可以把 block 放在最合适的位置。它还把数据与应用环境解耦,让数据分布在不同环境中,从而更快被读取。
当应用请求数据时,底层存储会把 blocks 重新组装成完整数据再返回。
Example: Amazon EBS
Object Storage
Object storage(也叫 object-based storage)把文件拆成 objects,再存进一个统一 repository,这个 repository 可以分布在多台网络节点上。
Example: Amazon S3, Azure Blob Storage, Google Cloud Storage
NAS
NAS(Network Attached Storage)是接入网络的存储设备,让授权用户从中心位置存取数据。NAS 可扩展、速度快、成本较低,并且可以在本地提供类似 public cloud 的体验,同时保持完全控制。
HDFS
Hadoop Distributed File System (HDFS) 是运行在通用硬件上的分布式文件系统。它高 fault-tolerant,适合低成本硬件,并提供高 throughput 访问,适合大规模数据集。
HDFS 会把大文件拆成 blocks,除最后一个 block 外大小相同,并复制多个副本以提升容错。