存储系统

存储系统解决的核心问题只有一个:数据写进去,断电之后还在,而且找得回来。

但这个”简单”的问题,在规模和可靠性的压力下会迅速变得复杂。单块磁盘有容量上限、性能上限、可靠性上限,分布式存储用网络突破容量、用副本突破可靠性、用并行突破性能——同时引入了一致性、分区容错、运维复杂度等新问题。对象存储的出现重新定义了云时代”存文件”的范式;数据湖的演进让存储和计算的边界变得模糊;Kubernetes 的普及把存储系统带进了容器编排的时代。

这个系列关注存储系统的架构层:文件系统如何组织数据、分布式系统如何权衡一致性与可用性、现代云存储如何设计接口和扩展性。物理介质的演进(HDD/SSD/NVMe)见 00-hardware-MOC,Linux 视角的文件系统操作见 12-存储:持久化的代价


一、目录

本系列共 11 篇文章,分两层:基础层(01-06)覆盖存储原理,前沿层(07-11)覆盖云原生存储范式。

50-storage/
├── 00-storage-MOC.md                                          ← 本文件

├── ── 基础层(01-06)──────────────────────────────────────── # 存储原理,稳定十年以上
├── 01-文件系统:从块到文件的抽象.md                           ← inode / Journaling / Copy-on-Write / VFS
├── 02-RAID 与数据冗余:可靠性的工程实现.md                    ← RAID 0/1/5/6/10 / Erasure Coding / 重建风险
├── 03-存储协议:DAS、NAS 与 SAN.md                            ← NFS / SMB / iSCSI / 光纤通道 / 选型指南
├── 04-存储性能:IOPS、吞吐与延迟.md                           ← 顺序 vs 随机 / I/O 队列深度 / fio 基准测试
├── 05-数据可靠性:复制、校验与恢复.md                         ← Checksum / WAL / 复制模型 / 3-2-1 备份
├── 06-数据库存储引擎:B-Tree 与 LSM Tree.md                   ← 读写权衡 / 写入放大 / Compaction 策略

└── ── 前沿层(07-11)──────────────────────────────────────── # 云原生与现代存储范式
    ├── 07-对象存储:S3 模型如何统治了云存储.md                 ← 扁平命名空间 / S3 API 事实标准 / R2·MinIO
    ├── 08-分布式存储:Ceph 的设计哲学.md                      ← CRUSH / RADOS 一致性模型 / Rook on K8s
    ├── 09-云原生存储:Kubernetes 的 CSI 与存储模型.md         ← PV·PVC·StorageClass / CSI 规范 / Longhorn
    ├── 10-数据湖与湖仓一体:Iceberg、Delta Lake 与 Parquet.md ← 列式存储 / 表格式 / 计算存储分离
    └── 11-存储即服务:云存储产品的选型与对比.md               ← AWS S3 / Cloudflare R2 / 冷热分层 / 自托管对比

概念线索

线索一:持久化的每一步都有代价

内存快但断电即失,磁盘慢但数据持久。RAID 提升可靠性但增加写放大,副本提升可用性但消耗三倍存储,Erasure Coding 节省空间但增加计算开销,对象存储牺牲 POSIX 语义换取无限扩展。存储系统里没有免费的午餐,每一个可靠性和性能的提升都在其他维度付出代价。

贯穿文章:02-RAID 与数据冗余05-数据可靠性07-对象存储09-数据湖与湖仓一体

线索二:三种存储抽象,各有其适用场景

  • 块存储:裸块设备,没有文件概念,最灵活,数据库直接用(SATA 磁盘、EBS)
  • 文件存储:POSIX 文件树,目录 + 文件名,最符合人类直觉(NFS、SMB、本地文件系统)
  • 对象存储:扁平命名空间,Key-Value,无限扩展,HTTP 接口,云原生(S3、GCS、R2)

这三种抽象不是演化关系,是面向不同场景的不同取舍。理解它们的边界,是选型的基础。

贯穿文章:01-文件系统:从块到文件的抽象03-存储协议:DAS/NAS/SAN07-对象存储:S3 模型如何统治了云存储

线索三:分布式带来的根本性复杂

单机存储是确定性的:写进去就在,读出来就是写进去的那个值。一旦跨机器,就要面对:网络分区怎么办?两个副本数据不一致怎么办?写了一半节点挂了怎么办?CAP 定理不是选择题,是现实约束——分布式存储的所有设计决策,本质上都是在 Consistency、Availability、Partition Tolerance 三者之间划定边界。

贯穿文章:05-数据可靠性08-分布式存储:Ceph 的设计哲学09-数据湖与湖仓一体

线索四:数据局部性决定性能

缓存能工作,是因为程序倾向于反复访问同一批数据(时间局部性)和相邻的数据(空间局部性)。对象存储把数据放在统一的存储池里,但计算需要把数据搬到 CPU 旁边才能处理——数据移动的成本随规模增长变得不可接受。数据湖、计算存储分离、Pushdown 下推,都是在试图解决”计算在哪里,数据就应该在哪里”这个问题。

贯穿文章:04-存储性能07-对象存储09-数据湖与湖仓一体

线索五:接口即标准,S3 是新的 POSIX

POSIX 文件接口(open/read/write/close)统治了单机存储三十年。云时代,S3 API 成了对象存储的事实标准——不只是 AWS S3 实现了它,Ceph、MinIO、Cloudflare R2、Google GCS 都兼容 S3 API。选择 S3 接口,意味着工具链、SDK、生态系统全部可以复用,这是接口作为护城河的典型案例。

贯穿文章:07-对象存储10-存储即服务08-分布式存储:Ceph 的设计哲学


基础层

存储系统的核心原理,稳定十年以上。

文件系统

  • 01-文件系统:从块到文件的抽象 inode 模型与数据/元数据分离,块分配策略,目录结构,日志(Journaling)保证崩溃一致性,Copy-on-Write(btrfs/ZFS),VFS 统一接口,主流文件系统对比(ext4/xfs/btrfs/ZFS)

可靠性

存储协议

  • 03-存储协议:DAS、NAS 与 SAN 三种存储架构的本质差异,NFS 与 SMB 的工作机制与适用场景,iSCSI(块存储走以太网),光纤通道(Fibre Channel)在企业存储中的角色,协议选型指南

存储性能

  • 04-存储性能:IOPS、吞吐与延迟 三个性能维度的定义与关系,顺序 vs 随机访问的本质差异,I/O 队列深度,存储缓存的工作机制(Write-back vs Write-through),fio 基准测试方法,性能瓶颈定位思路

数据可靠性

  • 05-数据可靠性:复制、校验与恢复 数据损坏的来源(位翻转、磁盘静默错误),Checksum 与端到端数据完整性,Write-Ahead Logging(WAL)的作用,数据复制模型(同步 vs 异步),点对时间恢复(PITR),备份策略(3-2-1 规则)

存储引擎

  • 06-数据库存储引擎:B-Tree 与 LSM Tree 为什么数据库需要自己管理存储,B-Tree:读优化,适合点查询(InnoDB/PostgreSQL),LSM Tree:写优化,适合高吞吐写入(RocksDB/LevelDB/Cassandra),两种引擎的 Write Amplification 分析,Compaction 策略,各自适用场景

前沿层

当前社区的主流范式与演进方向,随时间持续更新。

对象存储

  • 07-对象存储:S3 模型如何统治了云存储 对象存储与文件存储、块存储的根本差异,S3 的设计决策(扁平命名空间、HTTP 接口、最终一致性的历史),S3 API 成为事实标准的原因,Multipart Upload、Presigned URL、Versioning、生命周期策略,主流实现对比(AWS S3/Cloudflare R2/MinIO/Ceph RGW)

分布式存储

  • 08-分布式存储:Ceph 的设计哲学 Ceph 的三个存储接口(块/文件/对象)统一在一套后端,CRUSH 算法(数据分布不需要中心目录),RADOS 的一致性模型,OSD/Monitor/MDS 的职责分工,Ceph 的使用场景与运维复杂度,与 Rook 在 Kubernetes 上的集成

云原生存储

  • 09-云原生存储:Kubernetes 的 CSI 与存储模型 PersistentVolume / PersistentVolumeClaim / StorageClass 的设计意图,CSI(Container Storage Interface)规范,主流 CSI 插件(Rook-Ceph、Longhorn、OpenEBS),StatefulSet 的存储需求,Volume Snapshot,云厂商的块存储产品(EBS/GCE PD/Azure Disk)与对象存储挂载

数据湖

  • 10-数据湖与湖仓一体:Iceberg、Delta Lake 与 Parquet 数据湖的起源(Hadoop HDFS + Hive),列式存储格式 Parquet 的设计(压缩、谓词下推),数据湖的痛点(无事务、无 Schema 演进),表格式(Table Format)的出现:Apache Iceberg / Delta Lake / Apache Hudi,湖仓一体(Lakehouse)的概念,Catalog 层(Glue、Hive Metastore、Project Nessie),计算引擎与存储分离(Spark/Trino/Flink 读写 S3)

存储即服务

  • 11-存储即服务:云存储产品的选型与对比 AWS S3 的设计演进(一致性模型的变化历史),Cloudflare R2(无出口费用的 S3 兼容存储),Google Cloud Storage,Azure Blob Storage,冷热分层(S3 Standard / Infrequent Access / Glacier),选型维度(成本/性能/合规/地理分布),自托管 vs 托管的权衡(MinIO vs S3)

阅读路径

路径一:从零理解存储系统

01(文件系统,最熟悉的存储抽象)
  → 02(RAID,可靠性的工程实现)
  → 03(存储协议,本地到网络)
  → 04(性能,如何量化和分析)
  → 05(数据可靠性,保证数据不丢)
  → 06(存储引擎,数据库底层)

路径二:云存储与现代架构

07(对象存储,S3 模型)
  → 11(存储即服务,云产品选型)
  → 08(Ceph,自托管分布式存储)
  → 09(云原生存储,Kubernetes 集成)

路径三:数据工程方向

06(存储引擎,理解 LSM/B-Tree)
  → 07(对象存储,数据湖的基础设施)
  → 10(数据湖与湖仓,数据平台架构)
  → 11(云存储选型,成本与性能权衡)

路径四:存储可靠性与运维

02(RAID 与数据冗余)
  → 05(数据可靠性,WAL 与备份)
  → 08(Ceph,分布式存储的运维复杂度)
  → 09(云原生存储,Kubernetes 持久化)

与其他系列的关联


暂存内容

以下文件为原有笔记,后续整理时决定去留: