JuiceFS:把对象存储变成 POSIX 盘的云原生分布式文件系统

存储
开源
云原生
Kubernetes
HDFS
2026/9/30
·

阅读时间: 大约 10 分钟

JuiceFS:把对象存储变成 POSIX 盘的云原生分布式文件系统

JuiceFS 官方技术架构:客户端同时对接对象存储与元数据引擎,提供 FUSE/S3/Hadoop SDK/CSI 等多种接入

对象存储便宜、弹性大,但 S3 那种”key-value”接口不是文件系统:没有目录树、没有 POSIX 语义、不能随机改写,直接挂给 Spark 或训练任务用非常痛苦。JuiceFS 要解决的就是这个落差——它是 Juicedata(杭州果汁数据科技)在 Apache 2.0 下开源的分布式文件系统,把几乎任意对象存储包装成一个”像本地盘一样”、可被上千台服务器同时挂载读写的 POSIX 文件系统。本文基于 juicefs.com 官方文档,拆解它的架构、分层与官方自己标注的性能口径。

一、背景动机:对象存储不好用,HDFS 太贵

大数据与 AI 训练时代,团队普遍面临一个矛盾:数据量是 PB 级、EB 级的,存本地盘或高性能 NAS 成本扛不住;对象存储(S3、OSS、MinIO)便宜又弹性,但应用(Spark、Presto、PyTorch、脚本)习惯的是文件系统语义。HDFS 能顶上,但运维重、扩容慢、成本高。JuiceFS 的思路是:数据继续丢给便宜的对象存储,另起一个元数据层把它拼成文件系统,用分布式缓存补性能。

二、是什么:三段式架构

按官方文档,JuiceFS 文件系统由三部分组成:

  1. 客户端(Client):所有文件读写、碎片合并、回收站过期删除都在客户端发生,需要同时跟对象存储和元数据引擎打交道。接入方式非常多——FUSE 挂载(POSIX)、Python SDK(原生 fsspec,接 Ray)、Windows 客户端、Hadoop Java SDK(直接替代 HDFS)、Kubernetes CSI 驱动、S3 网关、WebDAV;
  2. 数据存储(Data Storage):文件被切块后存进对象存储,支持几乎所有公有云对象存储,以及 Ceph、MinIO、OpenStack Swift 等私有部署;
  3. 元数据引擎(Metadata Engine):存文件名、大小、权限、目录结构、文件锁等,以及”文件数据的索引”(Chunk 分配与引用计数)。官方支持 Redis、TiKV、MySQL/MariaDB、PostgreSQL、SQLite 多引擎,可按场景选择。

三、技术机制:Chunk / Slice / Block

一个文件由多个 Chunk 组成(每 Chunk 最大 64MB),Chunk 内由 Slice 承载连续写入,最终持久化为 Block

JuiceFS 不把原文件整个塞进对象存储,而是做了三层切分:

  • Chunk:每个文件由一个或多个 Chunk 组成,每个 Chunk 最大 64MB。读写按文件偏移定位 Chunk,只要文件总长度不变,Chunk 切分就固定;
  • Slice:一次连续写入就是一个 Slice,隶属于某个 Chunk、不跨 Chunk 边界,因此也不超过 64MB;flush 时 Slice 才持久化;
  • Block:真正落对象存储的物理单元,默认最大 4MB,flush 时把 Slice 进一步拆成 Block、多线程并发写以提升吞吐。

这就是为什么你在对象存储桶里看不到原始文件,只有一个 chunks 目录和一堆数字编号对象——那些就是 Block,它们与元数据引擎里的索引共同拼回原文件。再加上客户端的分布式多级缓存(内存 + 磁盘)应对数据热点,性能被”喂”起来。

四、关键数据:官方口径

下表数字均来自官网与文档自述:

项目官方口径
开源协议Apache 2.0(社区版)
单卷规模数百 PB、千亿文件、万级客户端
自研元数据服务每秒上百万请求、百微秒级时延
Chunk / Block 大小Chunk 最大 64MB;Block 默认最大 4MB
协议兼容POSIX、HDFS API、S3 网关、WebDAV
压缩LZ4、Zstandard
吞吐官方称”近乎无限”,但括注”取决于对象存储规模”
代表客户(官网展示)MiniMax、阶跃星辰、地瓜机器人、小米、乾象投资、百图生科
客户案例数字小米缓存平均吞吐 200 GB/s、降本约 90%;阶跃星辰 10000+ 客户端;地瓜机器人单目录管理 1.2 亿文件

五、评测方法与口径偏差

这是最需要保持清醒的部分:

  • “百万 QPS、百微秒”是自研元数据服务的数字,对应的是 Juicedata 云服务/企业版的分布式元数据引擎,不是你拿社区版挂个 Redis 就能拿到的指标。社区版用 Redis/TiKV 当元数据引擎时,元数据性能直接受限于该引擎本身的能力与部署方式;
  • “近乎无限吞吐”有前提:文档自己括注”取决于对象存储规模”——数据面吞吐天花板在对象存储,缓存只是把热点读加速,写吞吐最终仍受 S3/OSS 限制;
  • 客户案例数字是各家自报:“200 GB/s""降本 90%""7 倍启动加速”都是厂商与客户联合宣传口径,硬件规模、负载类型、对比基准(和谁比)未公开,不可直接外推;
  • “强一致性”有定义:官方称”确认的文件修改会在所有服务器上立即可见”,但跨客户端、跨缓存失效的具体一致性语义(是否 close-to-open)需结合文档细节核对。

六、适用 / 不适用场景

适用: 想把 S3/OSS 当 POSIX 盘挂载、给 Spark/Presto/Hive 当数据底座;Kubernetes 里需要共享文件存储(CSI);AI/ML 训练数据集的统一挂载与团队共享;替代运维沉重的 HDFS、降低 TCO。

不适用: 需要极低延迟随机小 IO、且数据量小到没必要上对象存储的场景;对元数据性能要求极高、但又只愿用 SQLite/单实例 Redis 的场景(元数据引擎会先成为瓶颈);强依赖某些罕见 POSIX 边缘语义、未经兼容性验证的 legacy 系统。

七、客观分析:优势与局限

优势:

  1. 架构简洁、解耦干净:数据面(对象存储)与元数据面(可换引擎)独立扩缩,运维心智负担远低于 HDFS/Ceph;
  2. 多协议一套存储:POSIX/HDFS/S3/WebDAV 同时可用,迁移现有应用几乎不改代码;
  3. 云原生友好:CSI 驱动、跨云跨区复制、存算分离,天然适配 K8s 与混合云;
  4. Apache 2.0、社区活跃,AI 训练领域落地案例多。

局限(官方自认或隐含):

  1. 元数据引擎选型即性能上限:用 Redis 要自己扛高可用与持久化,用 TiKV/MySQL 又各有取舍,没有免费的午餐;
  2. 小文件是软肋:千亿文件意味着元数据引擎里有海量索引项,小文件元数据开销大,官网客户案例里”数十亿小文件”正是需要自研元数据服务才能扛住的;
  3. 写吞吐受对象存储制约,缓存只加速读热点,不能突破 S3 写带宽;
  4. 数据不进桶里”裸存”:多了一层切分与索引,排障、跨工具直接读桶都不如原生对象存储直观;
  5. 企业级高性能(百万 QPS 元数据)在商业版,纯社区版要自己承担元数据扩展。

八、它意味着什么 / 谁该关注

JuiceFS 代表了分布式文件系统的一个主流方向:不再自己造盘,而是把对象存储当无限后端,用一个聪明的元数据层 + 缓存去补 POSIX 性能。对正在从 HDFS 迁出、或要给 AI 训练平台做统一数据底座的团队,它是当下最值得评估的开源选项之一。但落地前必须想清楚元数据引擎怎么选、小文件比例多高、写吞吐能否被对象存储接住——不能被”近乎无限""百万 QPS”这类宣传口径带着走。

参考来源