Redian新闻
>
浅析SeaweedFS与JuiceFS架构异同

浅析SeaweedFS与JuiceFS架构异同

公众号新闻

SeaweedFS 是一款高效的分布式文件存储系统,最早的设计原型参考了 Facebook 的 Haystack,具有快速读写小数据块的能力。本文将通过对比 SeaweedFS 与 JuiceFS 在设计与功能上的差异,以帮助读者进行更适合自己的选择。

SeaweedFS 系统结构

SeaweedFS 由 3 部分组成,底层存储文件的 Volume Server,用于管理集群的 Master Server,以及一个向上提供更多特性的 Filer 可选组件。

Volume Server 与 Master Server

在系统运作上,Volume Server 与 Master Server 一并服务于文件的存储。Volume Server 专注于数据的写入与读取,而 Master Server 则偏向是一个集群与 Volumes 的管理服务。

在读写数据时,SeaweedFS 的实现与 Haystack 相似,用户创建的一个 Volume 即是一个大磁盘文件(下图的 Superblock)。在此 Volume 中,用户写入的所有文件(下图的 Needle)都会被合并到该大磁盘文件中。

在开始写入数据之前,调用者需要向 SeaweedFS(Master Server)进行写入申请,随后 SeaweedFS 会根据当前的数据量返回一个 File ID(由 Volume ID 与 offset 组成),在写入的过程中,一并被写入的还有基础的元数据信息(文件长度与 Chunk 等信息);

当写入完成之后,调用者需要在一个外部系统(例如 MySQL)中对该文件与返回的 File ID 进行关联保存。在读取数据时,由于 File ID 已经包含了计算文件位置(偏移)的所有信息,因此可以高效地将文件的内容读取出来。

Filer

在上述的底层存储单元之上,SeaweedFS 提供了一个名为 Filer 的组件。通过向下对接 Volume Server 与 Master Server,对外提供丰富的功能与特性(如 POSIX 支持、WebDAV、S3 接口等)。与 JuiceFS 相同,Filer 也需要对接一个外部数据库以保存元数据信息。

为了方便阐述,下文中所指的 SeaweedFS,皆包含了 Filer 组件。

JuiceFS 系统结构

JuiceFS 采用「数据」「元数据」分离存储的架构,文件数据本身会被切分保存在对象存储(如 Amazon S3)当中,而元数据则是会被保存在用户自行选择的数据库里(如 Redis、MySQL)。通过共享同一个份数据库与对象存储,JuiceFS 实现了一个强一致性保证的分布式文件系统,同时还具有「POSIX 完全兼容」、「高性能」等诸多特性。

元数据对比

SeaweedFS 与 JuiceFS 都支持通过外部数据库以存储文件系统的元数据信息。在数据库支持层面,SeaweedFS 支持多达 24 种[1]数据库。JuiceFS 对数据库事务能力要求高(见下文),当前支持了 3 类共 10 种事务型数据库。

原子性操作

为了保证所有元数据操作的原子性,JuiceFS 在实现层面需要使用有事务处理能力的数据库。而 SeaweedFS仅在执行 rename 操作时启用了部分数据库(SQL、ArangoDB 和 TiKV)的事务, 对于数据库的事务能力要求较低。同时,由于Seaweed FS 在 rename 操作中拷贝元数据时,未对原目录或文件进行加锁,可能会导致过程中更新的数据丢失。

变更日志(changelog)

SeaweedFS 会为所有的元数据操作生成变更日志,此日志可被进一步用于数据复制(见下文)、操作审计等功能,而 JuiceFS 则暂未实现此特性。

存储对比

如前文所述,SeaweedFS 的数据存储由 Volume Server + Master Server 实现,支持小数据块的「合并存储」、「纠删码」等特性。而 JuiceFS 的数据存储则是依托于对象存储服务服务,相关的特性也都由用户选择的对象存储提供。

文件拆分

在存储数据时,SeaweedFS 与 JuiceFS 都会将文件拆分成若干个小块再持久化到底层的数据系统中。

SeaweedFS 将文件拆分成 8MB 的块,对于超大文件(超过 8GB),它会将 Chunk 索引也保存到底层的数据系统中。

JuiceFS 则是先拆成 64MB 的 Chunk,再拆成 4MB 的 Object,通过内部一个 Slice 的概念对随机写、顺序读、重复写等性能进行了优化。(详情见读取清求处理流程[2]

分层存储

对于新创建的 Volume,SeaweedFS 会把数据存储在本地,而对于较旧的 Volume,SeaweedFS 支持将他们上传至云端以达到冷热数据的分离[3]。在此方面,JuiceFS 则需要依赖外部的服务。

数据压缩

JuiceFS 支持使用 LZ4 或者 ZStandard 来为所有写入的数据进行压缩,而 SeaweedFS 则是根据写入文件的扩展名、文件类型等信息来选择是否进行压缩。

存储加密

JuiceFS 支持传输中加密(encryption in transit)及静态加密(encryption at rest),在用户开启了静态加密时,需要用户传递一个自行管理的密钥,所有写入的数据都会基于此密钥进行数据的加密。详情见 《数据加密[4]》。

SeaweedFS 同样支持传输中加密与静态加密。在开启了数据加密后,所有写入 Volume Server 的数据都会使用随机的密钥进行加密,而这些对应的随机密钥信息则由维护「metadata」「Filer」进行管理。

访问协议

POSIX 兼容性

JuiceFS 完全兼容 POSIX[5], 而 SeaweedFS 目前只实现了部分的 POSIX 兼容(「Issue 1558」[6] 与 Wiki[7]),功能还持续完善中。

S3 协议

JuiceFS 通过 MinIO S3 网关实现了 S3 网关[8]的功能。它为 JuiceFS 中的文件提供跟 S3 兼容的 RESTful API,在不方便挂载的情况下能够用 s3cmd、AWS CLI、MinIO Client(mc)等工具管理 JuiceFS 上存储的文件。

SeaweedFS 当前支持了约 20 个 S3 API,覆盖了常用的读写查删等请求,对一些特定的请求(如 Read)还做了功能上的扩展,详细见 Amazon-S3-API[9]

WebDAV 协议

JuiceFS 与 SeaweedFS 皆支持 WebDAV 协议。

HDFS 兼容性

JuiceFS 完整兼容 HDFS API[10]。不仅兼容 Hadoop 2.x 和 Hadoop 3.x,还兼容 Hadoop 生态系统中的各种组件。SeaweedFS 则是提供了对 HDFS API 的基础兼容[11],对于部分操作(如 turncate、concat、checksum 和扩展属性等)则尚未支持。

CSI 驱动

JuiceFS[12] 与 SeaweedFS[13] 皆提供了 「Kubernetes CSI Driver」 以帮助用户在 Kubernetes 生态中使用对应的文件系统。

扩展功能

客户端缓存

JuiceFS 有着多种客户端缓存策略,涵盖从元数据到数据缓存的各个部分,允许用户根据自己的应用场景进行调优(详情[14]),而 SeaweedFS 不具备客户端缓存能力。

集群数据复制

对于多个集群之间的数据复制,SeaweedFS 支持「Active-Active」与「Active-Passive」两种异步的复制模式,2 种模式都是通过传递 changelog 再应用的机制实现了不同集群数据间的一致性,对于每一条 changelog,其中会有一个签名信息以保证同一个修改不会被循环多次。在集群节点数量超过 2 个节点的 Active-Active 模式下,SeaweedFS 的一些操作(如重命名目录)会受到一些限制。

JuiceFS 尚未原生支持集群之间的数据同步功能,需要依赖元数据引擎和对象存储自身的数据复制能力。

云上数据缓存

SeaweedFS 可以作为云上对象存储的缓存来使用,支持通过命令手动预热数据。对于缓存数据的修改,会异步同步到对象存储中。JuiceFS 需要将文件分块存储到对象存储中,尚不支持为对象存储中已有的数据提供缓存加速。

回收站

JuiceFS 默认开启回收站[15]功能,会自动将用户删除的文件移动到 JuiceFS 根目录下的 .trash 目录内,保留指定时间后才将数据真正清理。SeaweedFS 暂不支持此功能。

运维工具

JuiceFS 提供了 juciefs stats 以及 juicefs profile 两种子命令,允许用户实时查看当前或回放某一时间段的性能指标。同时,JuiceFS 还对外开发 metrics[16] 接口,用户能够方便地将监控数据接入到 Prometheus 与 Grafana 中。

SeaweedFS 则同时实现了 Push 与 Pull[17] 2种方式对接 Prometheus 与Grafana ,同时提供了 weed shell[18] 的交互式工具方便使用者进行一系列运维工作(如查看当前集群状态、列举文件列表等)。

其它

  • • 在发布时间上,SeaweedFS 于 2015 年 4 月发布,目前累计 stars 为 16.4K,而 JuiceFS 于 2021 年 1 月发布,截止目前累计 7.3K stars。

  • • 在项目上,JuiceFS 与 SeaweedFS 皆采用了对商用更友好的 Apache License 2.0,SeaweedFS 主要由 Chris Lu 个人进行维护,而 JuiceFS 则主要由 Juicedata 公司进行维护。

  • • JuiceFS 与 SeaweedFS 皆采用 Go 语言进行编写。

对比清单


SeaweedFSJuiceFS
元数据多引擎多引擎
元数据操作原子性未保证通过数据库事务保证
变更日志
数据存储包含外部服务
纠删码支持依赖外部服务
数据合并支持依赖外部服务
文件拆分8MB64MB + 4MB
分层存储支持依赖外部服务
数据压缩支持(基于扩展名)支持(全局设置)
存储加密支持支持
POSIX 兼容性基本完整
S3 协议基本基本
WebDAV 协议支持支持
HDFS 兼容性基本完整
CSI 驱动支持支持
客户端缓存不支持支持
集群数据复制双向异步、多模式不支持
云上数据缓存支持(手动同步)不支持
回收站不支持支持
运维工具提供提供
发布时间2015.42021.1
主要维护者个人(Chris Lu)公司(Juicedata Inc)
语言GoGo
开源协议Apache License 2.0Apache License 2.0

关于作者

Ethan

Juicedata 全栈工程师

引用链接

[1] 24 种: https://github.com/seaweedfs/seaweedfs/wiki/Filer-Stores
[2] 读取清求处理流程: https://juicefs.com/docs/zh/community/internals/io_processing
[3] 冷热数据的分离: https://github.com/seaweedfs/seaweedfs/wiki/Tiered-Storage
[4] 数据加密: https://juicefs.com/docs/zh/community/security/encrypt
[5] 完全兼容 POSIX: https://juicefs.com/docs/zh/community/posix_compatibility
[6] 「Issue 1558」: https://github.com/seaweedfs/seaweedfs/issues/1588
[7] Wiki: https://github.com/seaweedfs/seaweedfs/wiki/FUSE-Mount
[8] S3 网关: https://juicefs.com/docs/zh/community/s3_gateway
[9] Amazon-S3-API: https://github.com/seaweedfs/seaweedfs/wiki/Amazon-S3-API
[10] 完整兼容 HDFS API: https://juicefs.com/docs/zh/community/hadoop_java_sdk
[11] 基础兼容: https://github.com/seaweedfs/seaweedfs/wiki/Hadoop-Compatible-File-System
[12] JuiceFS: https://github.com/juicedata/juicefs-csi-driver
[13] SeaweedFS: https://github.com/seaweedfs/seaweedfs-csi-driver
[14] 详情: https://juicefs.com/docs/zh/community/cache_management
[15] 回收站: https://juicefs.com/docs/zh/community/security/trash/
[16] metrics: https://juicefs.com/docs/zh/community/administration/monitoring
[17] Push 与 Pull: https://github.com/seaweedfs/seaweedfs/wiki/System-Metrics
[18] weed shell: https://github.com/seaweedfs/seaweedfs/wiki/weed-shell


END



重温经典老游戏


这里有最新开源资讯、软件更新、技术干货等内容

点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
风向真的开始变了。。。ProtoBuf试用与JSON的比较China’s Soccer Woes Deepen as Naturalized Players Jump Ship提升加密货币交易安全性,日本Web3安全公司「KEKKAI」宣布完成Pre-Seed轮融资|早起看早期Medediting&Medfisher推出临床英语课程,助力您的医学生涯A Female Comedian Gets Praised and Slut-Shamed for STI Set太“huì”了!这份美好生活攻略,打包收好禮字源考浅析 Uniswap V4 可能为 DeFi 带来什么变化IEEE Education Week主题演讲 | 主讲人:IEEE主席Saifur Rahman陈冲:轮到我的时候我该说什么(ZT)西加勒比海游轮 Cozumel Cruise(三)轮船圣诞内装阅读、写作、演讲好素材!TheWeekJunior英文阅读营来了!读名言学英语:youth thinks itself wise just as drunk menCeFi陨落,DeFi崛起IEEE标准协会网络研讨会 | PRODUCT SHOWCASE: IEEE EQ NAVIGATOR[评测]Colorful iGame GeForce RTX 4070 Ti Advanced OC 评测"𝙇𝙚𝙖𝙙 𝙏𝙝𝙚 𝘾𝙝𝙖𝙧𝙜𝙚"广告#创译挑战明尼周末不无聊|SeeUagain(next week) wiz Khalifa下周来mn啦!A Day in a Shanghai Park: See You Next WednesdayiGame GeForce RTX 2080 Advanced OC【无忧买房】Needham独栋别墅出售,高评分学区,近I-95高速和Needham镇中心AWS与Hugging Face合作,降低AI大模型开发成本喷泉的罗马城:集锦喷泉深入剖析SVC HyperSwap双数据中心Chinese University Offers Course to Excel in Civil Service ExamWeb Series Revisits Hostels Serving as Refuge for Migrant Women想写一篇文献计量学分析SCI论文,如何选题?TheWeekJunior阅读营!报名即送10周杂志电子版!庆祝IEEE Education Week | 课程优惠抢先了解GeForce® GTX 1080 WINDFORCE OC 8G浅析三款大规模分布式文件系统架构设计达摩院算法团队招聘(实习/博后/全职):机器学习算法工程师,AI for Time Series与AIOps方向Week Junior 国际经济科技时事阅读营来了!bitter是苦,sweet是甜,bittersweet是又苦又甜...
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。