juicefs - JuiceFS 是建立在 Redis 和 S3 之上的分布式 POSIX 文件系统。

Created at: 2021-01-08 17:39:46
Language: Go
License: Apache-2.0

JuiceFS Logo

特拉维斯 CI 状态 GitHub 工作流状态 Go 报告 英文文档 加入松弛

JuiceFS是在Apache License 2.0下发布的高性能POSIX文件系统,专为云原生环境而设计。通过JuiceFS存储的数据将保留在对象存储(例如Amazon S3)中,并且相应的元数据可以根据场景和要求保留在Redis,MySQL和TiKV等各种数据库引擎中。

借助 JuiceFS,海量云存储可以直接连接到生产环境中的大数据、机器学习、人工智能和各种应用平台。无需修改代码,海量云存储可以像本地存储一样高效使用。

📺 视频什么是JuiceFS?

📖 文档快速入门指南

突出特点

  1. 完全兼容 POSIX:用作本地文件系统,与现有应用程序无缝对接,而不会破坏业务工作流。
  2. 完全兼容Hadoop:JuiceFS的Hadoop Java SDK与Hadoop 2.x和Hadoop 3.x以及Hadoop生态系统中的各种组件兼容。
  3. S3 兼容:JuiceFS 的 S3 网关提供 S3 兼容接口。
  4. Cloud Native:提供了一个 Kubernetes CSI 驱动程序,以便在 Kubernetes 中轻松使用 JuiceFS。
  5. 可共享:JuiceFS是一个共享文件存储,可以由数千个客户端读取和写入。
  6. 强一致性:确认的修改将立即在使用同一文件系统挂载的所有服务器上可见。
  7. 出色的性能:延迟可以低至几毫秒,并且吞吐量几乎可以无限扩展(取决于对象存储的大小)。测试结果
  8. 数据加密:支持传输中和静态数据加密(有关详细信息,请参阅指南)。
  9. 全局文件锁:JuiceFS 支持 BSD 锁(植绒)和 POSIX 记录锁 (fcntl)。
  10. 数据压缩:JuiceFS支持LZ4Z标准来压缩所有数据。

架构|入门|高级主题 |POSIX 兼容性|性能基准|支持的对象存储|谁在使用|路线图|报告问题|贡献|社区|使用情况跟踪|许可证|鸣谢 |常见问题


建筑

JuiceFS由三部分组成:

  1. JuiceFS Client:协调对象存储和元数据存储引擎,以及POSIX、Hadoop、Kubernetes和S3网关等文件系统接口的实现。
  2. 数据存储:存储数据,支持各种数据存储介质,例如本地磁盘,公共或私有云对象存储以及HDFS。
  3. 元数据引擎:存储包含文件名、文件大小、权限组、创建修改时间、目录结构等信息的相应元数据,支持不同的元数据引擎,如 Redis、MySQL、SQLite 和 TiKV。

JuiceFS Architecture

JuiceFS可以将文件系统的元数据存储在Redis上,这是一种快速,开源,内存中的键值数据存储,特别适合存储元数据;同时,所有数据都将通过JuiceFS客户端存储在对象存储中。了解更多信息

JuiceFS 存储格式

存储在JuiceFS中的每个文件都以固定大小拆分为“Chunk”,默认上限为64 MiB。每个块由一个或多个“切片”组成,切片的长度因文件的写入方式而异。每个切片由大小固定的“块”组成,默认情况下为4 MiB。这些块最终将存储在对象存储中;同时,文件及其块、切片和块的元数据信息将通过 JuiceFS 存储在元数据引擎中。了解更多信息

JuiceFS 如何存储你的文件

使用JuiceFS时,文件最终将被拆分为块,切片和块并存储在对象存储中。因此,存储在JuiceFS中的源文件无法在对象存储平台的文件浏览器中找到;相反,存储桶中只有一个块目录和一堆数字编号的目录和文件。不要惊慌!这只是JuiceFS高性能操作的秘诀!

开始

在开始之前,请确保你拥有:

  1. 用于元数据存储的 Redis 数据库
  2. 用于存储数据块的对象存储
  3. JuiceFS 客户端已下载并安装

请参考快速入门指南,立即开始使用JuiceFS!

命令参考

请查看命令参考中的所有命令行选项。

Kubernetes

在 Kubernetes 上使用 JuiceFS 也非常容易。请在此处找到更多信息。

Hadoop Java SDK

如果你想在Hadoop中使用JuiceFS,请查看Hadoop Java SDK

高级主题

有关更多信息,请参阅 JuiceFS 文档中心

兼容性

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还提供:

  • 接近开放的一致性。一旦文件被写入并关闭,它保证在下面打开和读取中查看写入的数据。在同一挂载点内,可以立即读取所有写入的数据。
  • 重命名和所有其他元数据操作都是原子的,由 Redis 事务保证。
  • 从同一装入点取消链接后,打开的文件仍可访问。
  • Mmap(使用 FSx 测试)。
  • 用打孔支撑进行跌落。
  • 扩展属性 (xattr)。
  • BSD锁(植绒)。
  • POSIX record locks (fcntl).

性能基准

基本基准测试

JuiceFS 提供了一个子命令,可以运行一些基本的基准测试,以帮助你了解它在环境中的工作原理:

果汁FS长凳

吞吐量

fio还在JuiceFS,EFSS3FS上执行了顺序读/写基准测试。

顺序读写基准测试

上面的结果图显示,JuiceFS可以提供比其他两个多10倍的吞吐量(查看更多详细信息)。

元数据 IOPS

mdtest已经在JuiceFS,EFSS3FS上执行了一个简单的mdtest基准测试

元数据基准测试

结果表明,JuiceFS 可以提供比其他两个元数据 IOPS 多得多的元数据 IOPS(查看更多详细信息)。

分析性能

JuiceFS 的根目录中有一个虚拟文件,用于显示文件系统操作的所有详细信息及其所花费的时间,例如:

.accesslog

$ cat /jfs/.accesslog
2021.01.15 08:26:11.003330 [uid:0,gid:0,pid:4403] write (17669,8666,4993160): OK <0.000010>
2021.01.15 08:26:11.003473 [uid:0,gid:0,pid:4403] write (17675,198,997439): OK <0.000014>
2021.01.15 08:26:11.003616 [uid:0,gid:0,pid:4403] write (17666,390,951582): OK <0.000006>

每行的最后一个数字是当前操作所花费的时间(以秒为单位)。你可以直接使用它来调试和分析性能问题,或尝试监视实时统计信息。请运行或参考此处以了解有关此子命令的更多信息。

./juicefs profile /jfs
./juicefs profile -h

支持的对象存储

  • 亚马逊 S3
  • 谷歌云存储
  • Azure Blob Storage
  • 阿里云对象存储服务 (OSS)
  • 腾讯云对象存储 (COS)
  • 七牛云对象存储(古都)
  • 清斯特对象存储
  • Ceph RGW
  • 最小值
  • 本地磁盘
  • 雷迪斯

JuiceFS支持几乎所有的对象存储服务。了解更多

谁在使用

JuiceFS已准备好生产,并在生产中被数千台机器使用。此处已收集并记录了用户列表。此外,JuiceFS有几个与其他开源项目集成的合作项目,我们在这里进行了记录。如果你也在使用JuiceFS,请随时告诉我们,欢迎你与大家分享你的具体经验。

存储格式稳定,所有未来版本都将支持。

路线图

  • 支持 FoundationDB 作为元数据引擎
  • 目录配额
  • 用户和组配额
  • 快照
  • 一次写入,多次读取 (WORM)

报告问题

我们使用 GitHub 问题来跟踪社区报告的问题。如有任何问题,你也可以联系社区。

贡献

感谢你的贡献!有关详细信息,请参阅 CONTRIBUTING.md

社区

欢迎加入讨论Slack频道,与JuiceFS团队成员和其他用户联系。

使用情况跟踪

JuiceFS默认收集匿名使用数据,以帮助我们更好地了解社区如何使用JuiceFS。仅报告核心指标(例如版本号),不包括用户数据和任何其他敏感数据。相关代码可以在此处进行编辑。

你还可以通过命令行选项轻松禁用报告:

--no-usage-report

juicefs mount --no-usage-report

许可证

JuiceFS在Apache License 2.0下开源,参见LICENSE

捐赠

JuiceFS的设计灵感来自Google File SystemHDFSMooseFS。感谢他们的出色工作!

常见问题

为什么 JuiceFS 不支持 XXX 对象存储?

JuiceFS支持许多对象存储。请先查看此列表。如果你要使用的对象存储与 S3 兼容,则可以将其视为 S3。否则,请尝试报告问题。

是否可以将 Redis 集群用作元数据引擎?

是的。由于 v1.0.0 Beta3 JuiceFS 支持使用 Redis Cluster 作为元数据引擎,但需要注意的是,Redis Cluster 要求一个事务中所有操作的密钥必须位于同一个哈希槽中,因此 JuiceFS 文件系统只能使用一个哈希槽。

有关详细信息,请参阅“Redis 最佳实践”。

JuiceFS和XXX有什么区别?

有关详细信息,请参阅“与他人比较”。

有关更多常见问题解答,请参阅完整列表

随着时间的推移,观星者

随着时间的推移,观星者