前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JuiceFS 源码阅读-上

JuiceFS 源码阅读-上

作者头像
用户1260683
发布于 2021-07-20 02:19:19
发布于 2021-07-20 02:19:19
2.2K00
代码可运行
举报
运行总次数:0
代码可运行

JuiceFS 源码阅读-上

最近研究文件系统,把近期比较火的JuiceFS代码翻出来看了一下,研究为啥其性能要比CephFS要好。

背景知识

参考资源:https://mp.weixin.qq.com/s/HvbMxNiVudjNPRgYC8nXyg

FUSE 是一个用来实现用户态文件系统的框架,这套 FUSE 框架包含 3 个组件:

  • 内核模块 fuse.ko :用来接收 vfs 传递下来的 IO 请求,并且把这个 IO 封装之后通过管道发送到用户态;
  • 用户态 lib 库 libfuse :解析内核态转发出来的协议包,拆解成常规的 IO 请求;
  • mount 工具 fusermount ;

背景:一个用户态文件系统,挂载点为 /tmp/fuse ,用户二进制程序文件为 ./hello ;当执行 ls -l /tmp/fuse 命令的时候,流程如下: IO 请求先进内核,经 vfs 传递给内核 FUSE 文件系统模块; 内核 FUSE 模块把请求发给到用户态,由 ./hello 程序接收并且处理。处理完成之后,响应原路返回;

JuiceFS架构简介

JuiceFS 由三个部分组成:

  1. JuiceFS 客户端:协调对象存储和元数据存储引擎,以及 POSIX、HadoopKubernetes、S3 Gateway 等文件系统接口的实现;
  2. 数据存储:存储数据本身,支持本地磁盘、对象存储;
  3. 元数据引擎:存储数据对应的元数据,支持 RedisMySQLSQLite 等多种引擎;

JuiceFS 依靠 Redis 来存储文件的元数据。Redis 是基于内存的高性能的键值数据存储,非常适合存储元数据。与此同时,所有数据将通过 JuiceFS 客户端存储到对象存储中。

任何存入 JuiceFS 的文件都会被拆分成固定大小的 "Chunk",默认的容量上限是 64 MiB。每个 Chunk 由一个或多个 "Slice" 组成,Slice 的长度不固定,取决于文件写入的方式。每个 Slice 又会被进一步拆分成固定大小的 "Block",默认为 4 MiB。最后,这些 Block 会被存储到对象存储。与此同时,JuiceFS 会将每个文件以及它的 Chunks、Slices、Blocks 等元数据信息存储在元数据引擎中。

使用 JuiceFS,文件最终会被拆分成 Chunks、Slices 和 Blocks 存储在对象存储。因此,你会发现在对象存储平台的文件浏览器中找不到存入 JuiceFS 的源文件,存储桶中只有一个 chunks 目录和一堆数字编号的目录和文件。不要惊慌,这正是 JuiceFS 高性能运作的秘诀!

补充一下源码中,每个blocks的命名规则定义,也就是最终存储在对象存储系统中的对象key名称。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func (c *rChunk) key(indx int) string {
    if c.store.conf.Partitions > 1 {
        return fmt.Sprintf("chunks/%02X/%v/%v_%v_%v", c.id%256, c.id/1000/1000, c.id, indx, c.blockSize(indx))
    }
    return fmt.Sprintf("chunks/%v/%v/%v_%v_%v", c.id/1000/1000, c.id/1000, c.id, indx, c.blockSize(indx))
}

从命名规则里面也能看出,数据是支持按partition进行分区存储的,也就是说最终存储数据的bucket可以是多个,这样有助于提高并发能力,特别是AWS S3每个bucket是有TPS性能上限的。

JuiceFS文件系统golang抽象接口组成

文件系统定义核心数据结构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type FileSystem struct {
    conf   *vfs.Config
    reader vfs.DataReader
    writer vfs.DataWriter
    m      meta.Meta
    logBuffer chan string
}

下图为个人理解所画的抽象接口结构图

  • 整个JuiceFS文件系统实现主要拆分为VFS抽象实现和相关的config配置管理两大部分。
  • 任意文件File操作都涉及到数据和元数据两部分内容,因此代码中包含数据处理相关的DataReader和DataWriter两个抽象接口,用来处理数据的读取和写入两类请求。而元数据抽象出Meta一个数据库相关的接口,基于这个接口目前官方实现了dbMeta也就是兼容SQL相关的元数据实现,以及redisMeta实现(基于redis)。从性能表现来看,redis比MySQL性能要好3~5倍左右。具体可以参考这个
  • 所有的数据读写操作都要和本地缓存进行交互(Chunk->Slice->block(page)三个层级进行管理),缓存目前主要实现了基于本地文件系统diskStore和基于内存缓存cacheStore(堆空间)两种类型。数据写入和读取最终都是由对应的缓存模块同步到远程的ObjectSotrage。
  • config主要负责对本地缓存、元数据引擎连接信息等相关的配置。

JuiceFS支持的数据列表:

https://github.com/juicedata/juicefs/blob/main/docs/zh_cn/databases_for_metadata.md

JuiceFS元数据redis与MySQL性能对比测试:

https://github.com/juicedata/juicefs/blob/main/docs/en/metadata_engines_benchmark.md

下图是源码中对ChunkStore的抽象接口定义,通过NewReader和NewWriter生成对应的Reader读取抽象和Writer抽象,实现数据的读写相关原子接口。

任何厂家的对象存储产品,只要实现下面的接口抽象,即可实现与JuiceFS的对接。

数据读取抽象接口

下图是数据读取抽象接口的继承组合关系

最终的数据读取关联到rChunk这个struct的相关method方法。

数据写入抽象接口

下图是数据写入抽象接口的继承组合关系

最终的数据读取关联到wChunk这个struct的相关method方法。

小节

至此,基本理清了JuiceFS的基本构架和核心数据结构,下节开始对其读写具体接口流程进行剖析。

打个小广告,团队持续招聘存储开发和运维同学,感兴趣的可以看看之前公众号网易游戏招聘相关内容。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Ceph对象存储方案 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AI训练存储方案选谁?DeepSeek 3FS与JuiceFS的全面对比
近期,DeepSeek 开源了其文件系统 Fire-Flyer File System (3FS),这一举措让文件系统这一已有70多年历史的技术再次成为焦点。在AI领域,企业需要处理大量非结构化数据,如文本、图像和视频,同时面临数据量的急剧增长,分布式文件系统因此成为AI训练中不可或缺的存储技术。
福大大架构师每日一题
2025/03/24
3200
AI训练存储方案选谁?DeepSeek 3FS与JuiceFS的全面对比
从青铜到王者系列:深入浅出理解DeepSeek 3FS (2)从内核到用户态文件系统的设计之路
从青铜到王者系列:深入浅出理解DeepSeek 3FS (2)从内核到用户态文件系统的设计之路
早起的鸟儿有虫吃
2025/04/11
980
从青铜到王者系列:深入浅出理解DeepSeek 3FS (2)从内核到用户态文件系统的设计之路
分布式文件系统:JuiceFS 技术架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-90ZtG0tw-1687771442157)(https://juicefs.com/docs/zh/assets/images/juicefs-arch-new-ab6339cb1408945cc9b70dc091c523c5.png)]
Freedom123
2024/03/29
7520
分布式文件系统:JuiceFS 技术架构
FUSE,从内核到用户态文件系统的设计之路
FUSE(Filesystem in Userspace)是一个允许用户在用户态创建自定义文件系统的接口,诞生于 2001 年。FUSE 的出现大大降低了文件系统开发的门槛,使得开发者能够在不修改内核代码的情况下实现创新的文件系统功能。JuiceFS 就是基于 FUSE 构建的高性能分布式文件系统,充分发挥了 FUSE 的灵活性和扩展性。
深度学习与Python
2025/03/03
990
FUSE,从内核到用户态文件系统的设计之路
JuiceFS 新手必知 24 问
JuiceFS 是一个创新性的软件产品,很多初次尝试的小伙伴对产品和用法感到很多疑惑,所以为了帮助大家快速理解并上手 JuiceFS,我们整理了24个关于 JuiceFS 经典的问题答案,相信经过这 24 问,大家对 JuiceFS 会有更清晰的认识,使用上也会更加得心应手。
Juicedata
2022/09/19
1K0
浅析 SeaweedFS 与 JuiceFS 架构异同
SeaweedFS 是一款高效的分布式文件存储系统,最早的设计原型参考了 Facebook 的 Haystack,具有快速读写小数据块的能力。本文将通过对比 SeaweedFS 与 JuiceFS 在设计与功能上的差异,以帮助读者进行更适合自己的选择。
Juicedata
2023/03/08
1.6K0
浅析 SeaweedFS 与 JuiceFS 架构异同
JuiceFS 专为云上大数据打造的存储方案
JuiceFS 是一款面向云原生设计的高性能共享文件系统,在 Apache 2.0 开源协议下发布。提供完备的 POSIX 兼容性,可将几乎所有对象存储接入本地作为海量本地磁盘使用,亦可同时在跨平台、跨地区的不同主机上挂载读写。
小石头
2022/11/10
2K0
JuiceFS 专为云上大数据打造的存储方案
干货 | JuiceFS 在携程海量冷数据场景下的实践
作者简介 妙成,携程云原生研发工程师,主要从事Elasticsearch、JuiceFS的研发运维,关注分布式数据库、NoSQL。 小峰, 携程云原生研发工程师,主要专注于数据库容器化领域,对分布式存储有浓厚兴趣。 一、摘要 携程的冷数据规模在 10PB+,包括备份数据、图片语音训练数据和日志数据等,存储方案主要是本地磁盘和GlusterFS。在实际使用中这些方案遇到了不少痛点: GlusterFS 在单目录下文件众多时,ls命令速度很慢;  受疫情期间机器采购周期的制约,无法灵活地根据实际需求弹性扩缩容
携程技术
2022/08/25
6060
干货 | JuiceFS 在携程海量冷数据场景下的实践
分布式文件系统:JuiceFS 技术比对
Alluxio(/əˈlʌksio/)是大数据和机器学习生态系统中的数据访问层。最初作为研究项目「Tachyon」,它是在加州大学伯克利分校的 AMPLab 作为创建者 2013 年的博士论文创建的。Alluxio 于 2014 年开源。
Freedom123
2024/03/29
1.1K0
分布式文件系统:JuiceFS 技术比对
JuiceFS 元数据引擎选型指南
文件系统是我们常见的存储形式,内部主要由数据和元数据两部分组成。其中数据是文件的具体内容,通常会直接展现给用户;而元数据是描述数据的数据,用来记录文件属性、目录结构、数据存储位置等。一般来说,元数据有非常鲜明的特点,即占用空间较小,但访问非常频繁。
Juicedata
2022/10/28
7790
基于 JuiceFS 构建高校 AI 存储方案:高并发、系统稳定、运维简单
中山大学的 iSEE 实验室(Intelligence Science and System) Lab)在进行深度学习任务时,需要处理大量小文件读取。在高并发读写场景下,原先使用的 NFS 性能较低,常在高峰期导致数据节点卡死。此外,NFS 系统的单点故障问题也导致一旦数据节点宕机,该机器上的数据将完全不可用。扩容问题同样棘手,每增加一台数据节点,就需要在所有计算节点上进行多次挂载。而新增的数据节点由于数据量较小,并不能有效分担读写压力。
深度学习与Python
2024/07/26
2100
基于 JuiceFS 构建高校 AI 存储方案:高并发、系统稳定、运维简单
AI 场景存储优化:云知声超算平台基于 JuiceFS 的存储实践
云知声是一家专注于语音及语言处理的技术公司。Atlas 超级计算平台是云知声的计算底层基础架构,为云知声在 AI 各个领域(如语音、自然语言处理、视觉等)的模型迭代提供训练加速等基础计算能力。Atlas 平台深度学习算力超过 57 PFLOPS(5.7 亿亿次/秒,是的你没有看错,是亿亿次]
Juicedata
2022/06/30
1.4K0
AI 场景存储优化:云知声超算平台基于 JuiceFS 的存储实践
百亿级小文件存储,JuiceFS 在自动驾驶行业的最佳实践
自动驾驶是最近几年的热门领域,专注于自动驾驶技术的创业公司、新造车企业、传统车厂都在这个领域投入了大量的资源,推动着 L4、L5 级别自动驾驶体验能尽早进入我们的日常生活。
Juicedata
2021/12/10
1.1K0
百亿级小文件存储,JuiceFS 在自动驾驶行业的最佳实践
基于 JuiceFS 搭建 Milvus 分布式集群
贾晶晶,Zilliz 数据工程师 & 高昌健,Juicedata 解决方案架构师,十年互联网行业从业经历,曾在知乎、即刻、小红书多个团队担任架构师职位,专注于分布式系统、大数据、AI 领域的技术研究。
Zilliz RDS
2021/06/25
1.3K0
如何利用 JuiceFS 的性能工具做文件系统分析和调优
JuiceFS 是一款面向云原生环境设计的高性能 POSIX 文件系统,在 AGPL v3.0 开源协议下发布。作为一个云上的分布式文件系统,任何存入 JuiceFS 的数据都会按照一定规则拆分成数据块存入对象存储(如 Amazon S3),相对应的元数据则持久化在独立的数据库中。这种结构决定了 JuiceFS 的存储空间可以根据数据量弹性伸缩,可靠地存储大规模的数据,同时支持在多主机之间共享挂载,实现跨云跨地区的数据共享和迁移。
Juicedata
2021/12/10
7630
如何利用 JuiceFS 的性能工具做文件系统分析和调优
元数据性能大比拼:HDFS vs S3 vs JuiceFS
元数据是存储系统的核心大脑,元数据性能对整个大数据平台的性能和扩展能力至关重要。尤其在处理海量文件的时候。在平台任务创建、运行和结束提交阶段,会存在大量的元数据 create,open,rename 和 delete 操作。因此,在进行文件系统选型时,元数据性能可谓是首当其冲需要考量的一个因素。
Juicedata
2022/11/16
1.8K0
元数据性能大比拼:HDFS vs S3 vs JuiceFS
韩国国民搜索 NAVER:为 AI 平台引入存储方案 JuiceFS
AiSuite 是 NAVER 开发者所使用的人工智能平台,它支持 NAVER 的各种服务的开发和运维。
Juicedata
2023/12/28
4210
韩国国民搜索 NAVER:为 AI 平台引入存储方案 JuiceFS
JuiceFS CSI Driver 的最佳实践
文章根据 Juicedata 工程师朱唯唯,在云原生 Meetup 杭州站所作主题演讲《JuiceFS CSI Driver 的最佳实践》整理而成。
Juicedata
2021/12/10
1.1K0
JuiceFS CSI Driver 的最佳实践
云端共享文件系统 JuiceFS 在 2021 年选择开源
今天,云原生分布式文件系统官方公众号 Juicedata果汁数据科技发布消息称 JuiceFS 已经开源了!
用户7454708
2023/05/09
4480
云端共享文件系统 JuiceFS 在 2021 年选择开源
如何借助 JuiceFS 为 AI 模型训练提速 7 倍
海量且优质的数据集是一个好的 AI 模型的基石之一,如何存储、管理这些数据集,以及在模型训练时提升 I/O 效率一直都是 AI 平台工程师和算法科学家特别关注的事情。不论是单机训练还是分布式训练,I/O 的性能都会显著影响整体 pipeline 的效率,甚至是最终的模型质量。
Juicedata
2021/12/10
8510
如何借助 JuiceFS 为 AI 模型训练提速 7 倍
推荐阅读
相关推荐
AI训练存储方案选谁?DeepSeek 3FS与JuiceFS的全面对比
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验