Ceph(统一存储)
在刚刚聊完存储的“性能鄙视链”(Weka > CPFS > NAS)之后,你问到 CephFS,这是一个极其精准且绕不开的开源基础设施硬核话题。
如果用一句话来定位:Weka 是极其昂贵的“超级跑车”,而 Ceph 则是云计算世界里最强悍、最普及的“开源航空母舰”。 几乎所有自建的私有云(比如 OpenStack)和大量的 K8s 集群,底层都在依靠它。
要搞懂 CephFS,我们必须先把视角拉高,看看它背后的整个 Ceph 存储生态。
💡 架构师硬核拆解:Ceph 的“大一统”帝国
Ceph 的野心极大,它的设计哲学是“统一存储 (Unified Storage)”。在一个标准的数据中心里,你以前可能需要买 EMC 的阵列做块存储,买 NetApp 做 NAS 文件存储,再搭个 MinIO 做对象存储。
而 Ceph 说:我全都要。你只需要搭这一个底座,我能同时提供这三种服务。
Ceph 的最底层是一个坚不可摧的分布式对象存储集群,叫做 RADOS (Reliable Autonomic Distributed Object Store)。在这个底座之上,Ceph 提供了三个不同的“大门”(接口)供上层调用:
- RBD (RADOS Block Device - 块存储): 把存储池虚拟成一块块生硬盘,直接挂载给虚拟机或 K8s 的 Pod。
- RGW (RADOS Gateway - 对象存储): 提供兼容 AWS S3 的 API,用来存海量图片和视频(就像我们上一节聊的超级仓库)。
- CephFS (Ceph File System - 文件存储): 这就是你问的主角! 它是搭建在 RADOS 之上,提供传统 POSIX 目录树(文件夹结构)的分布式文件系统。
🔍 深入 CephFS:它是怎么工作的?
相比于单节点的传统 NAS,CephFS 是真正的分布式架构。如果你把 GPU 客户端比作买家,CephFS 的内部有两个核心工种:
1. OSD (Object Storage Daemon) - “搬砖的库管”
你的物理服务器上插了 100 块硬盘,就会有 100 个 OSD 进程。它们只负责极其机械的工作:把数据块存进去,或者读出来。它们不管这个文件叫什么名字,也不管它在哪个文件夹里。
2. MDS (Metadata Server) - “图书管理员”
这就是我们在上一节聊 CPFS 时提到的元数据服务器。
- 当你的算法脚本想读取
/data/train/image1.png时。 - 客户端会先去找 MDS 问:“这个文件放在哪些 OSD 库管那里?”
- MDS 查阅自己的内存树,告诉你:“数据被切成了 3 块,分别在 OSD-5, OSD-12 和 OSD-45 那里。”
- 客户端拿到地址后,直接绕过 MDS,并发向这三个 OSD 请求数据。
3. 核心黑科技:CRUSH 算法
一般的分布式系统(如 HDFS)需要一个庞大的中心节点来记录“哪个数据存在哪块硬盘上”。当数据达到 PB 级,这个记录表会撑爆内存。
Ceph 极其硬核地抛弃了记录表,采用 CRUSH 算力寻址。客户端只要知道集群的拓扑公式,直接通过算 Hash 就能得出数据存放的物理位置,彻底消灭了数据寻址的单点瓶颈。
⚖️ CephFS 在 AI 算力集群里的战力评估
把 CephFS 放到咱们之前的“竞技场”里,它的表现如何?
- 对抗传统 NAS:完全碾压。 因为它是多 OSD 并发读写的,吞吐量(GB/s)可以轻松堆到 NAS 的几十倍。而且没有单点故障。
- 对抗 CPFS (Lustre) / Weka:存在明显的性能代差。
- 内核税沉重: Ceph 默认走的是极其消耗 CPU 的 Linux TCP/IP 内核协议栈(虽然现在也支持了基于 DPDK/SPDK 的加速,但配置极其复杂,且不如 Weka 那种原生 Kernel-Bypass 纯粹)。
- MDS 瓶颈依然存在: 虽然 CephFS 支持配置多个 MDS(Active-Active 模式)来分摊元数据压力,但在面对 AI 视觉预训练的“几亿张碎小图片极高并发读写”时,MDS 的锁竞争和 CPU 依然会成为瓶颈,导致 GPU 饿死。
总结选型:如果你在搭建一个 10 台以内机器的小型 AI 实验室,或者预算有限,用开源的 K8s 插件 Rook-Ceph 一键拉起一个 CephFS 给各种容器做共享目录,是性价比极高、极其优雅的架构。但如果你面对的是成百上千张 H200 组成的顶级大模型训练网,CephFS 的延迟和吞吐就略显吃力了。
你们目前的 K8s 集群,是打算自己用物理硬盘从头搭建开源的 Rook-Ceph 存储底座,还是打算直接购买公有云厂商现成的高性能存储服务呢?
