JuiceFS 是什么?

JuiceFS 是一个为云端设计的 POSIX 共享文件系统。

  • 云端:采用云服务中的对象存储作为后端,综合性价比极高。
  • POSIX:兼容标准 POSIX 接口,可以像本地文件系统一样挂载使用。
  • 共享:上千台机器同时挂载,高性能并发读写,共享数据。

JuiceFS 核心特性

  1. POSIX 兼容:它可以像本地文件系统一样挂载使用,可以无缝对接大量已有应用,对业务没有侵入性;
  2. 强一致性:所有确认的修改会立即在所有客户端可见,为所有的客户端保证强一致性;
  3. 卓越的性能:低至几毫秒的时延和无限的吞吐量(通过增加客户端数量);
  4. 高可用性:元数据集群通过 Raft 协议实现高可用;
  5. 可扩展:为几十 PB 级数据和几亿级文件数设计,平滑扩容,无运维干预;
  6. 跨云跨区的复制:数据可以像 RAID-1 一样自动复制到不同区甚至不同云平台;
  7. 数据安全:所有文件数据保存在您自己的对象存储中,我们接触不到您的数据,传输过程中也是加密的。
  8. 高性价比:所有数据存储于对象存储,并经过特殊设计和压缩,成本低至 NFS 方案的 1/10。

JuiceFS 为大数据存储而设计,适用于大数据分析、机器学习、数据挖掘、医学与卫星影响、生物基因工程等多领域的文件存储,计算、共享与备份等场景。 同时也满足于大部分使用 NAS 的业务场景。

完全的 POSIX 兼容性让 JuiceFS 对不会对客户的业务带来任何侵入性。可以零成本的替换已有存储方案(如:本地磁盘、NFS、HDFS),同时运维人员不用再为自己存储方案的可用性、扩容等烦恼,专业于业务开发,提升研发生产力。同时运维细节的简化,也让研发团队更容易向 devops 团队转型。

JuiceFS 主体架构

JuiceFS 由两个主要部分组成:

  • JuiceFS 元数据(Metadata)服务:元数据服务是由我们负责运维的一个集群,它们通过 Raft 算法实现高可用并同时保证数据的强一致性。 元数据服务是专为文件系统优化的服务,非常高效和稳定。
  • JuiceFS 挂载客户端:即下图的 jfsmount, 它负责跟元数据服务和对象存储通信,并通过 FUSE 实现 POSIX API。 另外,我们还提供一个脚本 juicefs, 用于 JuiceFS 的授权、挂载等所有操作。
_images/architecture-zh.png

注:元数据(metadata)包含文件名、文件大小、权限组、创建修改时间和目录结构。

当 JuiceFS 挂载到主机时,下图展示了它们是如何工作的:

_images/vm-architecture-zh.png

当您的应用或者工具(可以使用任何语言编写)在使用内置的 API(open, read, write 等)访问数据时,会在底层通过系统调用经过内核中的 VFS 以及 FUSE 模块转发到 jfsmount, 再请求元数据服务或者对象存储完成操作。

JuiceFS 使用场景

JuiceFS 为海量数据存储设计,可以作为很多分布式文件系统和网络文件系统的替代,特别是以下场景:

  • 大数据分析:和本地文件系统相同的访问方法;不会被特殊的 API 侵入业务;与主流计算框架(Spark, Hadoop, Hive等)无缝衔接;无限扩展的存储空间;运维成本几乎为 0;支持高并发,高吞吐,满足高性能的数据分析需求。
  • 共享工作区:没有 VPC 限制,可以在任意主机挂载;没有客户端并发读写限制;POSIX API 兼容已有的数据流和脚本操作。
  • 容器集群内的共享卷存储:持久存储并与容器生存期独立;强一致性保证数据正确;接管数据存储需求,保证服务的无状态化。
  • 数据备份:POSIX 是运维工程师最友好的接口;无限平滑扩展的存储空间;跨云跨区自动复制;挂载不受 VPC 限制,方便所有主机访问;快照(snapshot)可用于快速恢复和数据验证。

JuiceFS 数据隐私

JuiceFS 的用户文件数据以私有格式保存在用户自有的对象存储中,仅对用户各主机客户端可见。用户对象存储的访问凭据不会提交到 JuiceFS 后端服务,因此也无法被除用户之外的任何一方访问。