14,715
stars
+89+102+218
1,350
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions
README
JuiceFS 是一款高性能 POSIX 文件系统,针对云原生环境特别优化设计,在 Apache 2.0 开源协议下发布。使用 JuiceFS 存储数据,数据本身会被持久化在对象存储(例如 Amazon S3),而数据所对应的元数据可以根据场景需求被持久化在 Redis、MySQL、TiKV 等多种数据库引擎中。 JuiceFS 可以简单便捷的将海量云存储直接接入已投入生产环境的大数据、机器学习、人工智能以及各种应用平台,无需修改代码即可像使用本地存储一样高效使用海量云端存储。 📺 视频:什么是 JuiceFS? 📖 文档:快速上手指南 核心特性 1. POSIX 兼容:像本地文件系统一样使用,无缝对接已有应用,无业务侵入性; 2. HDFS 兼容:完整兼容 HDFS API,提供更强的元数据性能; 3. S3 兼容:提供 S3 网关 实现 S3 协议兼容的访问接口; 4. 云原生:通过 Kubernetes CSI 驱动 可以很便捷地在 Kubernetes 中使用 JuiceFS; 5. 多端共享:同一文件系统可在上千台服务器同时挂载,高性能并发读写,共享数据; 6. 强一致性:确认的修改会在所有挂载了同一文件系统的服务器上立即可见,保证强一致性; 7. 强悍性能:毫秒级的延迟,近乎无限的吞吐量(取决于对象存储规模),查看性能测试结果; 8. 数据安全:支持传输中加密(encryption in transit)以及静态加密(encryption at rest),查看详情; 9. 文件锁:支持 BSD 锁(flock)及 POSIX 锁(fcntl); 10. 数据压缩:支持使用 LZ4 或 Zstandard 压缩数据,节省存储空间。 --- 架构 | 开始使用 | 进阶主题 | POSIX 兼容性 | 性能测试 | 支持的对象存储 | 谁在使用 | 产品路线图 | 反馈问题 | 贡献 | 社区 | 使用量收集 | 开源协议 | 致谢 | FAQ --- 架构 JuiceFS 由三个部分组成: 1. JuiceFS 客户端:协调对象存储和元数据存储引擎,以及 POSIX、Hadoop、Kubernetes、S3 Gateway 等文件系统接口的实现; 2. 数据存储:存储数据本身,支持本地磁盘、对象存储; 3. 元数据引擎:存储数据对应的元数据,支持 Redis、MySQL、SQLite 等多种引擎; !JuiceFS Architecture JuiceFS 依靠 Redis 来存储文件的元数据。Redis 是基于内存的高性能的键值数据存储,非常适合存储元数据。与此同时,所有数据将通过 JuiceFS 客户端存储到对象存储中。了解详情 !Data structure diagram 任何存入 JuiceFS 的文件都会被拆分成固定大小的 "Chunk",默认的容量上限是 64 MiB。每个 Chunk 由一个或多个 "Slice" 组成,Slice 的长度不固定,取决于文件写入的方式。每个 Slice 又会被进一步拆分成固定大小的 "Block",默认为 4 MiB。最后,这些 Block 会被存储到对象存储。与此同时,JuiceFS 会将每个文件以及它的 Chunks、Slices、Blocks 等元数据信息存储在元数据引擎中。了解详情 !How JuiceFS stores your files 使用 JuiceFS,文件最终会被拆分成 Chunks、Slices 和 Blocks 存储在对象存储。因此,你会发现在对象存储平台的文件浏览器中找不到存入 JuiceFS 的源文件,存储桶中只有一个 chunks 目录和一堆数字编号的目录和文件。不要惊慌,这正是 JuiceFS 高性能运作的秘诀! 开始使用 创建 JuiceFS,需要以下 3 个方面的准备: 1. 准备 Redis 数据库 2. 准备对象存储 3. 下载安装 JuiceFS 客户端 请参照 快速上手指南 立即开始使用 JuiceFS! 命令索引 请点击 这里 查看所有子命令以及命令行参数。 容器 JuiceFS 可以为 Docker、Podman 等容器化技术提供持久化存储,请查阅 文档 了解详情。 Kubernetes 在 Kubernetes 中使用 JuiceFS 非常便捷,请查看 这个文档 了解更多信息。 Hadoop Java SDK JuiceFS 使用 Hadoop Java SDK 与 Hadoop 生态结合。 进阶主题 - Redis 最佳实践 - 如何设置对象存储 - 缓存 - 故障诊断和分析 - FUSE 挂载选项 - 在 Windows 中使用 JuiceFS - S3 网关 请查阅 JuiceFS 文档中心 了解更多信息。 POSIX 兼容性测试 JuiceFS 通过了 pjdfstest 最新版所有 8813 项兼容性测试。 All tests successful. Test Summary Report ------------------- /root/soft/pjdfstest/tests/chown/00.t (Wstat: 0 Tests: 1323 Failed: 0) TODO passed: 693, 697, 708-709, 714-715, 729, 733 Files=235, Tests=8813, 233 wallclock secs ( 2.77 usr 0.38 sys + 2.57 cusr 3.93 csys = 9.65 CPU) Result: PASS 除了 pjdfstest 覆盖的那些 POSIX 特性外,JuiceFS 还支持: - 关闭再打开(close-to-open)一致性。一旦一个文件写入完成并关闭,之后的打开和读操作保证可以访问之前写入的数据。如果是在同一个挂载点,所有写入的数据都可以立即读。 - 重命名以及所有其他元数据操作都是原子的,由 Redis 的事务机制保证。 - 当文件被删除后,同一个挂载点上如果已经打开了,文件还可以继续访问。 - 支持 mmap - 支持 fallocate 以及空洞 - 支持扩展属性 - 支持 BSD 锁(flock) - 支持 POSIX 记录锁(fcntl) 性能测试 基础性能测试 JuiceFS 提供一个性能测试的子命令来帮助你了解它在你的环境中的性能表现: !JuiceFS Bench 顺序读写性能 使用 fio 测试了 JuiceFS、EFS 和 S3FS 的顺序读写性能,结果如下: !Sequential Read Write Benchmark 上图显示 JuiceFS 可以比其他两者提供 10 倍以上的吞吐,详细结果请看这里。 元数据性能 使用 mdtest 测试了 JuiceFS、EFS 和 S3FS 的元数据性能,结果如下: !Metadata Benchmark 上图显示 JuiceFS 的元数据性能显著优于