存储系统
存储系统解决的核心问题只有一个:数据写进去,断电之后还在,而且找得回来。
但这个”简单”的问题,在规模和可靠性的压力下会迅速变得复杂。单块磁盘有容量上限、性能上限、可靠性上限,分布式存储用网络突破容量、用副本突破可靠性、用并行突破性能——同时引入了一致性、分区容错、运维复杂度等新问题。对象存储的出现重新定义了云时代”存文件”的范式;数据湖的演进让存储和计算的边界变得模糊;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/SAN → 07-对象存储: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)
可靠性
- 02-RAID 与数据冗余:可靠性的工程实现 RAID 0/1/5/6/10 的机制与取舍,软件 RAID(mdadm),RAID 5 的重建风险,Erasure Coding(纠删码)的原理与优势(Reed-Solomon),RAID 与 EC 的适用场景边界
存储协议
- 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 持久化)与其他系列的关联
- 00-hardware-MOC — 物理介质层(HDD/SSD/NVMe 的演进),是存储系统的硬件基础
- 12-存储:持久化的代价 — Linux 视角:write() 与 fsync()、挂载、LVM 操作
- T5-存储专题 — Linux 实操:LVM 扩容、软 RAID、rsync 备份、NFS 配置
- 00-networking-MOC — 存储协议(NFS/iSCSI/S3)依赖网络层,SAN 与网络架构紧密相关
暂存内容
以下文件为原有笔记,后续整理时决定去留:
01-文件系统基础.md— 内容被 01-文件系统:从块到文件的抽象 覆盖02-存储架构概述.md— 内容分散到各篇,以 07-对象存储 和 08-分布式存储 为主