从架构到特性:JuiceFS 企业版首次全面解析

2023-06-06
高昌健

大多数用户是通过社区版初次接触 JuiceFS,企业版对大家来说可能比较陌生。与其他开源项目不同的是,JuiceFS 企业版比社区版更早发布,社区版的架构设计大量参考了企业版。对 JuiceFS 用户而言,这意味着社区版具有更加稳定的特性。

JuiceFS 企业版有哪些特别的功能和服务?和社区版的差异和相同之处又是什么?今天,借助这篇文章我们将详细为大家介绍,以此帮助用户根据自身需求选择适合的版本。

JuiceFS 发展历程
JuiceFS 发展历程

企业版于 2017 年左右发布,是一个依托于公有云的 SaaS 服务,经过多年的企业客户服务考验;社区版于 2021 年年初在 GitHub 上发布。截至 2023 年 3 月份,JuiceFS 企业版已经迭代到了 4.9 版本并正式发布。

社区版在 2022 年开源 1 周年的时候正式发布了 1.0 版本,这也是 JuiceFS 社区版的第一个长期维护(LTS)版本,目前 1.1 版本正在积极准备中,即将在今年发布。

01-JuiceFS 企业版和社区版的异同

为什么在企业版之外,推出社区版?

定制更灵活:云上分布式文件系统是一种相对较新的产品,面对着不断产生的不同类型的用户需求,开源这种方式可以让用户可以根据自己的需求进行更加灵活的定制,加快产品落地的进程。

同时,我们对开源版本的架构进行了改进。用户可以根据自己的场景选择适合的数据库作为 JuiceFS 的元数据引擎。社区版目前支持多种成熟的数据库,例如 Redis、MySQL、TiKV 等,这些数据库都有很好的生态系统支持。这意味着技术人员可以利用这些成熟的数据库满足特定需求,并与 JuiceFS 完美结合,为他们提供最佳的使用体验。

开放和信任:通过开源这种方式,用户可以更清晰地了解 JuiceFS 的内部工作原理,进而根据自己的场景需求去使用它。这里值得一提的是,JuiceFS 社区版使用的开源许可协议是 Apache 2.0。一些大型企业可能会对 GPL、AGPL 等协议有所顾虑,但 Apache 2.0 是业界公认更为开放的许可协议。我们希望通过选择开放的代码和许可协议,为用户带来更多信心和保障。

迭代更高效:社区版可以让更多的用户参与进来,加速产品迭代。大家的意见经过评估后,如果我们认为这些需求可以放在整个社区版中供大家使用,而不需要每个公司自行定制,那么这些相对通用和重要的需求就会变成官方维护或开发的特性。

企业版和社区版的相同点

首先,一致的用户体验。这不仅表现在外观上,社区版和企业版在底层实现上也实现了代码级的复用。

其次,两个版本均支持元数据的导入和导出功能,因此可以实现在社区版和企业版之间迁移元数据。这意味着,对于正在使用社区版的用户,如果想要使用企业版,可以将元数据从社区版导出,并导入到企业版中进行迁移,反之亦然。

第三,两个版本都已经支持了超过 30 种成熟的对象存储。

第四,在存储规模上无论是企业版还是社区版,都可以承载百亿级文件以及百 PB 级数据。对于正在使用社区版的用户,想要达到百亿级文件规模,目前最成熟的方案是使用 TiKV 作为元数据引擎。

第五,社区版和企业版都支持多种访问方式,例如 POSIX、HDFS、CSI 驱动、S3、WebDAV 等。

第六,社区版和企业版都提供了本地数据和元数据的缓存来加速访问,以及相应的缓存预热功能。

第七,两个版本还提供了多种数据安全功能,如回收站、数据加密、数据克隆(即将在社区版 v1.1 中发布)。

最后一个共通点是一些企业级需求,如目录配额、目录用量统计。当文件系统的文件量增长到百亿级别时,企业可能需要定期统计目录的使用情况,以更好地管理文件系统并清理不必要的数据,因此快速对目录进行用量统计是一个很重要的功能。目录配额对于多租户平台的企业来说也非常有用,可以限制不同目录的容量和文件数量。这些功能在企业版中一直存在,而社区版将在 v1.1 中发布。

企业版和社区版的差异

定位:

  • 企业版:面向海量文件、高性能应用场景的分布式文件系统,适用场景如 AI 模型训练、大数据平台分布式计算、高性能计算。
  • 社区版:面向通用场景的分布式文件系统,易于维护和使用,方便定制化,适合热衷参与开源社区建设的团队。

架构:

  • 企业版:为了支撑海量数据存储及高性能访问,在架构上企业版与社区版的最大差异是采用了自研的分布式元数据引擎和分布式缓存。在下文中都会详细介绍。
  • 社区版:用户可根据需求选择合适的数据库作为元数据引擎,社区版暂不支持分布式缓存。

此外,企业版还在以下几个方面提供了一些区别于社区版的特性:

  • 易用性:企业版提供了图形化的管理和运维平台,不论是云服务还是私有部署都可以使用,方便用户更好地维护和使用 JuiceFS。
  • 多云和混合云架构:利用企业版的文件系统镜像功能,帮助用户在不同的云之间或云与机房之间进行自动的数据复制。这样,应用无论处于哪个环境,都能快速访问所需的数据。
  • 用户认证和权限管理:企业版支持 Kerberos、Ranger、POSIX ACL、访问令牌多种认证和权限管理方式。访问令牌是 JuiceFS 企业版独有的功能,可通过令牌统一验证或管理挂载点权限。每个令牌对应读或写操作权限,还可以基于特定IP段实现精细化的权限控制。
  • 数据安全:企业版提供了基于 Raft 日志的数据恢复功能,类似于时间机器的概念。用户可以利用日志记录来还原过去任意时间文件系统的状态,恢复被误修改或误更新的数据,实现数据修复。此外,企业版还提供了集中式的客户端操作审计功能,能够帮助企业对每个客户端的任意操作进行审计,加强企业数据安全。

迭代周期:

  • 企业版:大约每季度发布一个大版本(如 4.9 → 4.10)
  • 社区版:大约每年发布一个大版本(如 1.0 → 1.1),每季度发布一个补丁版本(如 1.0.1 → 1.0.2),同时长期维护一个 LTS 版本。

02- JuiceFS 企业版详解

JuiceFS 企业版架构

JuiceFS 企业版架构
JuiceFS 企业版架构

企业版的架构和社区版非常相似,都由元数据引擎、数据存储以及客户端这三个部分组成。最大的差异在于企业版中的元数据引擎是自研的分布式存储,它是基于 Raft 共识算法实现,因此其中包含了类似 Leader 和 Follower 这样的角色。对于客户端这一部分,在不同的场景下可能会使用不同的客户端,例如 POSIX、Java SDK、CSI 驱动、S3 网关等。

每个客户端内部都会有本地的元数据缓存和一个分布式数据缓存,这样不同的客户端就可以共同组成一个缓存组,形成一个缓存集群,从而可以缓存更多的数据。

单分区元数据引擎架构

单分区架构
单分区架构

这是单分区元数据引擎的内部架构。在生产环境中,元数据集群至少需要三个节点。这里有一个 Leader 角色和两个 Follower 角色。无论是 Leader 还是 Follower ,元数据都保存在内存中。客户端的读写请求都由 Leader 节点处理,Follower 节点不直接参与请求处理。因此,读取和写入元数据的请求响应都会非常快速。

当 Leader 节点出现故障,比如宕机或网络问题,剩余的两个 Follower 节点会重新选举出一个新的 Leader,然后客户端会自动切换到新的 Leader。整个切换过程很快,通常在秒级别内完成。

为了保持元数据的持久性,每个节点上的元数据修改日志以及内存快照都会写入本地磁盘。因此,元数据在内存中有三个副本,并且在本地磁盘上也有三个副本。同时,JuiceFS 云服务还会定期将这些元数据复制到集群外的其他地方,进一步保证数据的可靠性。

通常来说,我们建议在单分区架构里面存储大概 1~2 亿量级的文件。随着数据量以及文件量级的增长,整个集群的维护成本可能会逐渐变高,因此需要将单分区架构扩展为多分区架构。

多分区元数据引擎架构

如果需要更大的存储规模,例如几十亿甚至上百亿级别的存储需求,可以升级到多分区架构。与单分区架构类似,每个 Raft Group 仍然由一个 Leader 和两个 Follower 组成,只不过不同组的节点之间能够互相感知和通信。

多分区架构
多分区架构

同一个文件系统中不同目录的元数据会均匀地分布到不同的分区中,其中既有自动数据均衡的策略,用户也可以通过手动迁移某些目录的元数据的方式来进行手动数据均衡。

JuiceFS 企业版核心特性

分布式缓存

以模型训练场景为例,在一个模型训练集群中,每个节点都带有内存和 GPU 资源,并挂载了 JuiceFS 文件系统,GPU 节点通过本地的 JuiceFS 客户端获取数据。每个 GPU 节点的内存和磁盘中可能都有一些缓存数据,如果本地缓存未命中,则会访问缓存集群这一层。

JuiceFS 分布式缓存架构示意
JuiceFS 分布式缓存架构示意

缓存集群是一个分布式缓存层,由 JuiceFS 客户端实现。为了满足计算层对于大规模数据吞吐的需求,缓存集群需要配置高网络带宽和高性能、大容量的存储设备(如 NVMe SSD)。如果缓存请求没有在缓存集群这一层命中,请求最终将落到对象存储来获取原始数据。在这个过程中,无论是训练集群还是缓存集群,都需要与 JuiceFS 的元数据服务进行通信。

与传统的文件系统或分布式存储相比,JuiceFS 的分布式缓存有以下几个优势:

首先,高效的热数据管理和访问。JuiceFS 的缓存集群是一个独立的单副本集群,可以动态扩缩容,并且与计算集群和对象存储相互独立。因此,我们将缓存集群定位于需要高性能访问热数据的存储场景。用户可以根据需求灵活配置集群规模、节点磁盘容量和网络带宽等参数,以确保缓存集群能够满足训练集群对热数据访问性能的需求。需要注意的是,通常情况下缓存集群并不会缓存对象存储中的所有数据,因为高性能存储的成本较高,企业需要平衡性能和成本。

其次,多级缓存加速提高训练效率。缓存的读取流程是由快到慢、多级访问,包括内存、本地缓存盘、独立缓存集群等。因此,在训练节点、缓存节点和对象存储之间,都存在多级缓存的访问层级。不论哪一级的缓存命中,都能立即响应读取请求。

文件系统镜像

文件系统镜像功能主要用于需要使用多云或混合云的场景。该功能的主要目的是自动将某个文件系统复制到一个或多个区域,例如复制到异地机房、从公共云复制到私有云或从私有云复制到公共云。

复制不仅仅是一对一的关系,也可以是一对多的关系,因此用户可以配置一个或多个镜像集群,帮助用户更快地将数据复制到不同的地域和环境中,以满足可能存在的异地协作或任务调度需要。

JuiceFS 文件系统镜像功能架构图
JuiceFS 文件系统镜像功能架构图

一旦有新的数据写入,就会立即开始同步,确保在最短的时间内同步到一个异地的存储中。架构图左边是原始区域,用户把数据通过 JuiceFS 客户端写入原始区域后,原始区域的元数据和对象存储中的数据会异步复制到镜像区域的元数据集群和对象存储中。这样在镜像区域的客户端就能够直接通过本地的镜像文件系统访问 JuiceFS。

JuiceFS 镜像功能读取过程
JuiceFS 镜像功能读取过程

当镜像区域的客户端需要读取数据时,首选的数据源是当前区域的对象存储。但如果由于网络延迟等原因,原始区域对象存储中的数据还没有复制到镜像区域,客户端也可以直接从原始区域获取数据,以确保应用程序能够正常访问到数据。不过,从备用数据源获取数据的效率肯定不如从首选数据源获取高。

数据安全

JuiceFS 企业版提供多种类型、多种维度的方式来保障企业的数据安全,具体包括:

首先,在 JuiceFS 控制台中,提供了基于访问令牌的权限控制能力。用户可以通过令牌限制使用该令牌的用户或团队的读写权限,例如只能访问特定的子目录或只能在特定 IP 地址范围访问,以及允许的操作类型等等,以多维度的方式限制权限。

其次,在大数据场景中,JuiceFS 的 Hadoop SDK 可以与 Kerberos 和 Ranger 集成,以对接企业内部的用户认证和权限管理系统。

第三点是基于元数据集群的 Raft 日志的数据恢复功能,从而避免数据误更新。

最后,JuiceFS 能够集中收集所有客户端的操作并进行审计,审计功能基于 JuiceFS 的访问日志实现。

Web 控制台

8

JuiceFS 企业版提供了一个 web 界面的控制台,用户可以通过这个控制台管理 JuiceFS 元数据集群以及文件系统。用户可以创建文件系统,并查看文件系统的基本信息,包括文件系统中的目录结构、文件名等等。如果是私有部署企业版,还可以通过控制台管理 JuiceFS 的元数据集群。在上图中,可以看到元数据集群的一些基本信息,例如节点的 IP 地址。

9

如上图所示,用户可以通过 JuiceFS 控制台管理元数据集群。在控制台上,用户可以查看版本号、角色(例如服务、热备、冷备节点)、CPU、内存、以及存储在文件系统中的文件数量和数据大小等基本信息。此外,用户还可以通过控制台进行一些运维操作,例如升级、重启、查看日志以及元数据服务的日志等。

企业版交付形式

云服务

JuiceFS 云服务类似于公有云上的开箱即用服务,可在全球主流公有云上直接使用。由 Juicedata 提供全托管服务,主要托管元数据引擎,而对象存储由用户自行在云上创建和使用。整个服务的流程和体验都可以实现开箱即用。我们在云服务上提供了 99.95% 的 SLA 保证。在费用方面,JuiceFS 与其他主流的云存储产品类似,采用弹性容量计费模式。这意味着用户存储在 JuiceFS 中的数据量决定了相应的费用。JuiceFS 全托管的云服务是一个多租的环境,文件量在一亿左右或更小的应用场景,推荐直接用云服务。

私有部署

如果企业需要存储更大量的数据或追求更高的性能,那么私有部署更为合适。私有部署可以在云上私有 VPC 中部署,也可以在线下的机房进行部署。如果选择在线下的机房进行私有部署,一个非常重要的前提是必须有对象存储。JuiceFS 企业版本身并不包括对象存储。

从用户体验上来说,私有部署和云服务基本上是相同的。在私有部署控制台中,我们提供更多的管理功能,例如创建和运维元数据集群。

在私有部署环境中,JuiceFS 组件都是完全私有部署在用户的环境中,包括元数据引擎。因此,在运维方式方面用户有两种选择。一种是由用户自己运维,Juicedata 提供一个平台让用户可以比较轻松地运维整个 JuiceFS 集群,同时提供技术支持。另一种选择是授权给 Juicedata 代为运维,例如把一些与 JuiceFS 相关的机器的权限开放给 Juicedata。

在计费方式方面,除了与云服务相同的弹性容量计费模式,私有部署还有一个固定容量计费模式。用户可以选择固定容量并获得一个许可证授权。

10

03- JuiceFS 企业版 4.9 介绍

新增特性

JuiceFS 企业版 4.9 引入了一些新的特性,最大的变化是新增了很多之前企业版没有的子命令,比如 gateway、sync、stats、load。社区版的用户应该对这些命令比较熟悉,因为这些命令在社区版里面早已提供了。现在在企业版 4.9 里面,也使用了很多社区版已经有的命令来对齐功能。

另外一个对齐社区版功能的特性是支持使用多个 bucket 来存储数据。这个功能在社区版中早已存在。一般来说,一个文件系统可能只会对应一个对象存储 bucket。但如果单个 bucket 的存储有限制,比如容量限制或者 QPS 限制等,可能无法满足应用的读写需求。这时,可以用一个文件系统对应多个 bucket,来保证数据能够均匀地分布到不同的 bucket 上。这样,底层的读写带宽或吞吐量就是多个 bucket 的聚合能力,可以更好地实现外部存储的横向扩展。

此外,企业版还有一些独有的功能和改进。例如,可以从控制台上查看每个客户端的挂载参数,这是一个非常有用的功能,管理员可以通过这个功能方便地排查问题。例如,管理员可能想知道某个文件系统被挂载到了哪些节点上,以及每个节点挂载时使用了哪些参数,因为使用不同的参数可能会影响不同的行为。

其次,Java SDK 进行了一些改进,其中包括支持配置 Kerberos 用户映射规则,这对于需要使用 Kerberos 的用户来说是一个很大的进步。此外,SDK 还支持为 Hadoop 应用程序配置独立的缓存集群。

性能及稳定性优化

除了新特性外,还有一些性能和稳定性方面的优化。其中比较重要的是,优化了元数据缓存的性能和内存使用,这个优化实际上加速了元数据的访问。特别是在企业版中,相比社区版,缓存的元数据更多,并且还能保证元数据缓存的一致性。

第二个改进是减少了分布式缓存的读放大问题。分布式缓存可以加速读取性能,但有时可能会导致读放大,4.9 版本进一步优化这个问题。

最后一个改进是数据镜像同步的容错能力。容错非常重要,尤其是在同步大量数据到多个镜像区域时,稳定性和容错能力就显得尤为重要。因此,在 4.9 版本中,我们改进了整体镜像数据同步的容错能力。

04- 企业版的近期规划

第一:外部存储导入并支持缓存加速。许多企业都有大量的存量数据存在外部存储中,如果无法直接快速地将其导入到 JuiceFS 中,则需要先复制数据,这对于某些场景来说并不方便。因此,在 JuiceFS 企业版中,我们最近支持从外部存储导入数据,并同时支持享受 JuiceFS 企业版独有的功能,如缓存加速和分布式缓存等。该功能已经实现,并处于内测阶段。

第二:支持多挂载云盘。这意味着云盘不再局限于单个虚拟机的挂载,而可以在多个虚拟机之间进行共享。一些公有云平台已经支持多挂载云盘的特性,允许多个虚拟机同时挂载同一个云盘,实现存储的共享。

这个功能对于对性能有极致要求的场景非常有帮助,特别是小文件的读写性能。通过将小文件的读写操作完全在高性能云盘上完成,可以实现更高效的数据操作。相比于对象存储,高性能云盘在延迟和整体存储性能方面都有更大的优势。因此,在某些对性能有极端要求的场景中,使用多挂载云盘是非常合适的选择。需要注意的是,该功能目前仍处于内测阶段,正在进一步完善和测试中。

第三:支持 RDMA(RoCE 网络)。这个特性很多用户都提到过,希望利用这些最新的技术,在更好的网络环境或网络硬件下提高网络请求的访问效率。目前,这项功能还在开发中。

直播回顾(欢迎在B站关注 JuiceFS,活动资料都会第一时间发布)

相关博客

极限挑战:使用 Go 打造百亿级文件系统的实践之旅

2024-02-02
本文介绍了 JuiceFS 在设计元数据引擎时所做的关键决策,并详细介绍了内存池、自主管理小块内存、压缩空闲目录以及优化小文件格式这 4 个内存优化手段。

JuiceFS 企业版 5.0 新特性速览

2023-11-17
新版本首先带来了几个重要的新功能:支持共享块设备;把文件从分块格式合并还原成完整文件进行存储的“转存”功能;以及导入对象存储已有数据缓存支持。此外,还着重改善了分布式缓存相关的易用性和可观测性,相信…