写点什么

历时四年,分布式文件系统 JuiceFS 正式开源

2021 年 1 月 12 日

历时四年,分布式文件系统 JuiceFS 正式开源

1 月 11 日, Juicedata 果汁数据科技官方账号宣布 JuiceFS 正式开源,这是一个为海量数据设计的分布式文件系统,使用对象存储来做数据持久化,避免重复造轮子,还能大大降低工程复杂度,让开发者专注解决元数据和访问协议部分的难题。 

云原生分布式文件系统 JuiceFS 正式开源

 

1 月 11 日, Juicedata 果汁数据科技官方账号宣布 JuiceFS 正式开源,这是一个云原生分布式文件系统,经过了四年的持续迭代和累计几千万小时的线上考验。Davies(刘洪清,Juicedata 创始人、TGO 鲲鹏会会员)在文中表示:

 

JuiceFS 的创新架构更符合云原生的发展趋势,我们一开始就以 SaaS 的形式将它提供给公有云的客户,让客户分钟级就可以获得 PB 级企业文件存储服务。同时,我们也和行业优秀的对象存储厂商一起服务私有云客户。

 

GitHub 地址:https://github.com/juicedata/juicefs

 

2020 年 2 月份,Davies 曾在接受 TGO 采访时聊起了一路创办 Juicedata 的故事(可阅读:《离开 Facebook 与百万美元后,他的技术故事才刚刚开始 | TGO 深焦》)。Davies 在清华硕士毕业后即加入豆瓣成为早期员工,并研发了国内最早的开源 KV 存储 Beansdb 和 DPark ( Python clone of Spark );2013 年他加入 Facebook 总部负责 HDFS 方面的研发,2014 年加入 Databricks,帮助 Spark SQL 实现了上百倍的性能提升。2017 年,似乎是顺利成章,在大数据领域摸爬滚打了近十年的 Davies,开始了与几个伙伴的创业之旅。

 

“创业太艰难了,对一个团队的要求太全面了。你不能犯任何错误,要竭尽全力,然后要借助所有可能借助的力量,还要借助偶然的机遇才可能成功……(我)觉得这个事情是非常难的,还是不要创业。”

 

话虽如此,但创业似乎对 Davies 有种奇妙的吸引力。

 

在他长达 13 年的职业生涯中,居然有近 12 年身在创业企业。2016 年,正是在硅谷创业企业 Databricks 任职期间,他萌生了创业的想法。

 

时值 Davies 负责为 Databricks 的存储层提速,虽然 AWS 已有相关的存储方案,但问题很多,且迟迟无法解决。于是,他提议,自研新的存储方案,系统性地解决问题。

不过,在当时的 Databricks,从架构师到管理层,几乎全部认为风险太大,无人支持 Davies 的提议。Davies 说:“当时, CTO (注:Matei Zaharia,Apache Spark 作者)亲口对我说:‘存储这不是我们擅长的事情,能不碰尽量不要碰。’“

 

在 Databricks 否决 Davies 的技术方案后,大概 Matei Zaharia 也没有想到,这个中国来的工程师颇有“美式英雄主义”精神。他不但没有放弃,反而用业余时间单枪匹马地写了个原型出来。之后,Davies 回忆道:“我找了一些朋友的公司去试用,发现效果也可以,所以我在想既然有这么不错的东西,就不能埋没它。”

 

2017 年,Davies 在美国远程敲定了国内的投资和早期客户,叫上当时也在创业的苏锐,共同创立了 Juicedata,并将产品命名为 JuiceFS。

 

经过了四年的历练,整个团队最终决定将 JuiceFS 正式开源。Davies 表示:在创业之初,我们认为 SaaS 可以为用户提供最佳的体验,同时让我们更快地迭代产品,决定优先把 SaaS 做好。经过 4 年的持续迭代和积累,JuiceFS 已经在几十家科技企业的大数据、AI、容器平台、归档、备份等场景中形成最佳实践, SaaS 使用量也持续快速增长,并且在过去的 2020 年首次实现了盈亏平衡。我们相信找到了可持续发展的模式,有信心保障 JuiceFS 的长期运营。


此外,Davies 等人也发现闭源的基础软件会限制使用者对它的深度理解,不利于服务更多人,依靠 SaaS 产品的收入支撑和开源社区的力量或许可以让 JuiceFS 走得更远。

为什么我们需要新的文件系统?

 

文件系统是计算机中一个非常重要的组件,为存储设备提供一致的访问和管理方式。在不同的操作系统中,文件系统会有一些差别,但也有一些共性几十年都没怎么变化:

 

  • 数据是以文件的形式存在,提供 Open、Read、Write、Seek、Close 等 API 进行访问;

  • 文件以树形目录进行组织,提供原子的重命名(Rename)操作改变文件或者目录的位置。

 

文件系统提供的访问和管理方法支撑了绝大部分的计算机应用,Unix 的“万物皆文件”的理念更是凸显了它的重要地位。文件系统的复杂性使得它的可扩展性未能跟得上互联网的高速发展,极大简化了的对象存储及时填补了空缺得以快速发展起来。因为对象存储缺乏树状结构也不支持原子重命名操作,跟文件系统有很大的差别,本文暂不讨论。

 

绝大多数文件系统都是单机的,在单机操作系统内为一个或者多个存储设备提供访问和管理。随着互联网的高速发展,单机文件系统面临很多的挑战:

 

  • 共享:无法同时为分布在多个机器中的应用提供访问,于是有了 NFS 协议,可以将单机文件系统通过网络的方式同时提供给多个机器访问。

  • 容量:无法提供足够空间来存储数据,数据只好分散在多个隔离的单机文件系统里。

  • 性能:无法满足某些应用需要非常高的读写性能要求,应用只好做逻辑拆分同时读写多个文件系统。

  • 可靠性:受限于单个机器的可靠性,机器故障可能导致数据丢失。

  • 可用性:受限于单个操作系统的可用性,故障或者重启等运维操作会导致不可用。

  • 随着互联网的高速发展,这些问题变得日益突出,涌现出了一些分布式文件系统来应对这些挑战。

 

如今,我们耳熟能详的分布式文件系统有 GlusterFS、CephFS、GFS 以及 HDFS 等,每种方案各有优劣(详细对比可阅读《分布式文件系统架构对比》一文),JuiceFS 与这些相比的差异性在于更加适合云原生的环境。

 

具体而言,GFS、HDFS 和 MooseFS 都是针对自建机房这种软硬件环境设计的,将数据的可靠性和节点可用性合在一起用多机多副本的方式解决。但是在公有云或者私有云的虚拟机里,块设备已经是具有三副本可靠性设计的虚拟块设备,如果再通过多机多副本的方式来做,会导致数据的成本居高不下(实际上是 9 个拷贝)。

 

于是,整个团队针对公有云,改进 HDFS 和 MooseFS 的架构,设计了 JuiceFS,架构如下图所示:

 


JuiceFS 使用公有云中已有的对象存储来替换 DataNode 和 ChunkServer,实现一个完全弹性的 Serverless 的存储系统。公有云的对象存储已经很好地解决了大规模数据的安全高效存储,JuiceFS 只需要专注元数据的管理,也大大降低了元数据服务的复杂度(GFS 和 MooseFS 的 master 要同时解决元数据的存储和数据块的健康管理)。团队也对元数据部分做了很多改进,从一开始就实现了基于 Raft 的高可用。要真正提供一个高可用高性能的服务,元数据的管理和运维仍然是很有挑战的,元数据是以服务的形式提供给用户。因为 POSIX 文件系统 API 是应用最最广泛的 API,团队基于 FUSE 实现了高度 POSIX 兼容的客户端,用户可以通过一个命令行工具把 JuiceFS 挂载到 Linux 或者 macOS 中,像本地文件系统一样快速访问。

 

上图中右边虚线部分是负责数据存储和访问的部分,涉及用户的数据隐私,它们是完全在客户自己的账号和网络环境中,不会跟元数据服务接触。Juicedata 没有任何方法接触到客户的内容(元数据除外,请不要把敏感内容放到文件名里)。

 

上图中蓝色项目主要是给大数据场景使用的,实现的是 POSIX 的子集,而绿色的则是 POSIX 兼容的文件系统。

 

他们中以 GFS 为代表的元数据和数据分离的系统设计能够有效平衡系统的复杂度,有效解决大规模数据的存储问题(通常也都是大文件),有更好的可扩展性。这个架构下支持元数据的分布式存储的 Colossus 和 WarmStorage 更是具有无限的可扩展能力。

 

JuiceFS 作为后来者,学习了 MooseFS 实现分布式 POSIX 文件系统的方式,也学习了 Facebook 的 WarmStorage 等元数据和数据彻底分开的思路,希望为公有云或者私有云等场景下提供最好的分布式存储体验。JuiceFS 通过将数据存储到对象存储的方式,有效避免了使用以上分布式文件系统时的双层冗余(块存储的冗余和分布式系统的多机冗余)导致的成本过高问题。JuiceFS 还支持所有的公有云,不用担心某个云服务锁定,还能平滑地在公有云或者区之间迁移数据。

为开源做好准备,架构再升级

 

借助对象存储的帮助,JuiceFS 已经大大降低了分布式文件系统的复杂度,元数据管理是它最核心的问题。JuiceFS 的 SaaS 使用的元数据引擎,是专为文件系统打造的数据库,整个团队已经积累了丰富的运维经验,仍然如履薄冰。如果开源的话,让社区用户自己运维仍然会是一个大的挑战和负担,一旦运维失误导致数据丢失,后果非常严重。

 

带着这个问题,团队将元数据服务改造为支持多引擎的插件式架构,可以利用已有的开源数据库实现元数据存储。这样可以更灵活地适应不同场景,根据场景的规模、性能和成本需求,选用不同的元数据实现。这是 JuiceFS 的架构再升级,为未来的发展翻开新的篇章。

 

至于为什么选用 Redis 作为第一个开源存储引擎,是因为该引擎:

 

  • 是全内存的,可以满足元数据的低延时和高 IOPS 要求;

  • 支持乐观事务,能够满足文件系统元数据操作的原子性要求;

  • 有丰富的数据结构,易于实现文件系统的诸多 API;

  • 有着非常广泛的社区和成熟的生态,运维 Redis 不会是一个问题;

  • 在各个云上都有托管的服务,在云上使用会更简单;

 


未来,团队还会增加 SQL 数据库、TiKV 等支持事务的 KV 数据库支持。

未来规划

 

最近几年,数据库领域发生了一件有趣的事情:当 NoSQL 数据库在满足了数据的快速增长后,它在一致性、访问便捷性和管理能力方面的不足逐渐显露,把这些复杂性转嫁到了业务系统和运维上,开始被人诟病。同时, SQL 数据库也有了长足的进展,已经能够满足现在的数据规模需求,经过全面的对比分析后,大家又在回归 SQL 数据库,曾经的 NoSQL 运动也逐渐显出颓势。

 

估计类似的事情也会发生在非结构数据领域。对象存储在媒体文件等场景取得了巨大的成功,但当人们以为它就是未来的存储形态,开始推广到更大范围时,它牺牲掉的树形目录结构、可修改性、元数据性能、一致性等等,变成了一只只拦路虎,影响它在其他场景的使用效果。

 

团队坚信文件系统是最好的管理非结构化数据的方式,对象存储只适用于某些简单场景。分布式文件系统一直是基础软件中难啃的骨头,JuiceFS 通过对文件系统中元数据和数据的独立抽象,大大减低了系统复杂度,使得文件系统能够借助这些年来对象存储和分布式数据库的进展,管理超大规模的数据。同时,复杂度的降低可以让更多的开发者参与进来,未来更多的应用也会建立在文件系统接口之上。

 

团队将通过开源社区的相互协作,一方面为各个应用提供更好的存储支持,也会在底层存储引擎和对象存储上加深协作,一起推动文件存储的快速发展,打造未来数据生态的坚实底座。

 

消息来源:

 

https://mp.weixin.qq.com/s/asUFtorMB1pcOwhNvlDyKw

2021 年 1 月 12 日 11:068220

评论 2 条评论

发布
用户头像
"分布式文件系统"这个帽子扣的太大了,元数据管理系统而已。
2021 年 01 月 18 日 12:04
回复
用户头像
国内互联网需要这样的公司
2021 年 01 月 13 日 10:43
回复
没有更多了
发现更多内容

MySQL为Null会导致5个问题,个个致命!

王磊

MySQL MySQL使用

被砍伤的技术VP | 法庭上的CTO(24)

赵新龙

CTO 法庭上的CTO

总结2020:5个月出版两本书,日更公众号是一种怎样的体验?

冰河

程序员 程序人生 年终总结

散布消极言论被开除的总监 | 法庭上的CTO(25)

赵新龙

CTO 法庭上的CTO

图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应

李先生

DevOps 运维 HTTP SRE

盘点2020 | YourBatman 2020年感悟关键词:科比、裁员、管理层、活着

YourBatman

裁员 盘点2020 科比 管理层 活着

NoahTenet诺亚信条软件系统APP开发

开發I852946OIIO

系统开发

IPFS云算力挖矿系统开发详解案例及源码

系统开发咨询1357O98O718

云算力挖矿系统开发详解 云算力APP系统软件开发 云算力模式系统开发源码 云算力软件系统开发定制

公安警务报警系统,二维码一键定位报警

t13823115967

二维码定位报警系统开发 微警务 二维码定位

互联网大厂有哪些分库分表的思路和技巧?

冰河

分布式数据库 分库分表 分布式存储 数据一致性 数据同步

生产环境全链路压测建设历程 23:FAQ 3、4 适配改造,目标压力

数列科技杨德华

全链路压测 七日更

智慧警务大数据可视化分析平台建设解决方案

WX13823153201

盘点2020 | 2021,Begin Again !

大导演

前端进阶训练营 盘点2020

CKLC挖矿矿机系统开发案例介绍

系统开发咨询1357O98O718

CKLC挖矿矿机系统软件开发 CKLC挖矿矿机系统开发 CKLC挖矿矿机APP系统开发

10次面试,2份offer —— 大龄程序员 2020 求职记录

escray

面试经历 架构师训练营第 1 期 101次面试

时空大数据与智能技术的时代共舞,百度地图给2020的答案

脑极体

犯”集资诈骗罪“、二审判6年的CTO | 法庭上的CTO(21)

赵新龙

CTO 法庭上的CTO

母鸡下蛋实例:多线程通信生产者和消费者wait/notify和condition/await/signal条件队列

叫练

多线程与高并发 Wait lock 线程互斥 await

智慧社区综合应用平台搭建,社区管理解决方案

t13823115967

智慧社区管理平台开发 智慧平安社区平台建设

IPFS挖矿系统开发详情案例

系统开发咨询1357O98O718

IPFS云算力挖矿系统开发 IPFS算力挖矿软件系统开发

年末了,放个大招,力软.net/java新产品附赠服务器,不容错过

力软.net/java开发平台

Java .net 服务器

架构师训练营第一周作业

Mark

鸟枪换炮,利用python3对球员做大数据降维(因子分析得分),为C罗找到合格僚机

刘悦的技术博客

Python 数据分析 特征选择 降维

IPFS挖矿矿机系统开发方案丨IPFS挖矿矿机源码案例

系统开发咨询1357O98O718

IPFS云算力挖矿系统开发 IPFS算力挖矿系统开发搭建

SpringCloudGateway(一) 概览

Java SpringcloudGateway

5G与4G的差别及应用

anyRTC开发者

人工智能 android AI 5G WebRTC

侵犯著作权、判刑两年半的 CTO |法庭上的CTO(22)

赵新龙

CTO 法庭上的CTO

ArrayList源代码分析

肥鱼先生

Spring cloud Gateway(二) 一个Http请求的流程解析

Java 网关

开设赌场的CTO | 法庭上的CTO(23)

赵新龙

CTO 法庭上的CTO

为了搞清楚类加载,竟然手撸JVM!

小傅哥

JVM 小傅哥 类加载 生命周期 加载机制

历时四年,分布式文件系统 JuiceFS 正式开源-InfoQ