0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

对比SeaweedFS与JuiceFS在设计与功能上的差异

OSC开源社区 来源:Juicedata 2023-02-16 10:22 次阅读

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

SeaweedFS 系统结构

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

67f1a4b4-ad33-11ed-bfe3-dac502259ad0.png

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 已经包含了计算文件位置(偏移)的所有信息,因此可以高效地将文件的内容读取出来。

681ad474-ad33-11ed-bfe3-dac502259ad0.png

Filer

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

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

JuiceFS 系统结构

6829b336-ad33-11ed-bfe3-dac502259ad0.png

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 语言进行编写。

对比清单

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





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储系统
    +关注

    关注

    2

    文章

    410

    浏览量

    40860
  • volume
    +关注

    关注

    0

    文章

    5

    浏览量

    7843
  • MySQL
    +关注

    关注

    1

    文章

    809

    浏览量

    26565
  • Posix
    +关注

    关注

    0

    文章

    36

    浏览量

    9497

原文标题:浅析SeaweedFS与JuiceFS架构异同

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    三极管和MOS管功能上有什么区别?

    MOS管和三极管功能上有什么区别?这两种元件本身就可以看作一个基本单元,一个独立的器件,就算拆开外壳,用肉眼也找不出什么差别,从工作原理上理解又謷牙诘屈,这次从一个简单的触摸灯电路来感受一下二者功能上的区别。
    发表于 02-21 09:00 588次阅读

    No Output是什么意思? Generation与Compare功能上有什么区别?

    No Output是什么意思? Generation 与 Compare功能上有什么区别?
    发表于 04-07 07:19

    哪里可找到智能门锁功能上开发的公司

    本帖最后由 gk320830 于 2015-3-4 22:59 编辑 那里可找到智能门锁功能上开发的公司
    发表于 09-01 23:10

    LG可卷曲电视画质以及功能上有什么改变吗?

    柔性屏能做什么?LG可卷曲电视有什么特点?LG可卷曲电视画质以及功能上有什么改变吗?
    发表于 06-17 11:54

    请问交流伺服电机和无刷直流伺服电机功能上有什么区别?

    伺服系统是什么?伺服系统的主要作用有哪些?伺服系统主要分为哪几类?对伺服系统的基本要求有哪些? 交流伺服电机和无刷直流伺服电机功能上有什么区别?
    发表于 07-13 08:15

    请问交流伺服电机和无刷直流伺服电机功能上有什么区别?

    伺服电机和步进电机的区别是什么?请问交流伺服电机和无刷直流伺服电机功能上有什么区别?
    发表于 10-08 08:40

    请问交流伺服电机和无刷直流伺服电机功能上有什么区别?

    什么是伺服电机?有几种类型?工作特点是什么?请问交流伺服电机和无刷直流伺服电机功能上有什么区别?
    发表于 10-13 06:01

    怎样基于单片机的计算器功能上加入时钟模式呢

    怎样基于单片机的计算器功能上加入时钟模式呢?
    发表于 02-24 07:05

    请问一下proteus和protel软件仿真功能上的差别在什么地方?

    请问一下proteus和protel软件仿真功能上的差别在什么地方?就是说他们仿真上有没有各自的什么侧重点?哪个的功能强些?
    发表于 04-26 15:43

    RS232与RS485功能上的区别

    RS232与RS485功能上的区别介绍。
    发表于 11-15 11:19 1421次阅读

    8位和32位MCU功能上有什么区别?如何选择?

    该如何对8位以及32位的MCU进行选择?8位和32位MCU功能上仍是互为辅助、各有千秋,这其中的诀窍就在于,需先了解什么样的应用适合什么样的MCU架构。
    的头像 发表于 08-16 17:37 2.2w次阅读

    汽车 LED 前灯形式和功能上的演变

    汽车 LED 前灯形式和功能上的演变
    发表于 03-20 08:04 9次下载
    汽车 LED 前灯<b class='flag-5'>在</b>形式和<b class='flag-5'>功能上</b>的演变

    负载常见的三种形式属性和功能上有什么不同?

    负载常见的三种形式属性和功能上有什么不同?负载常见的三种形式:阻性负载、感性负载、容性负载,三者在其属性、电压/电流关系和功能上有所不同,下面进行详细分析。1、不同的属性:直流和交流纯阻性负载产生
    的头像 发表于 10-11 18:10 3771次阅读
    负载常见的三种形式<b class='flag-5'>在</b>属性和<b class='flag-5'>功能上</b>有什么不同?

    负载常见的三种形式属性和功能上有什么不同?

    负载常见的三种形式属性和功能上有什么不同? 计算机科学中,负载(Load)是指一个系统或设备正在承受的工作量或任务量。常见的负载形式主要包括计算负载、网络负载和存储负载。这三种形式
    的头像 发表于 11-13 16:04 1523次阅读

    6芯M16公头汽车功能上的应用

      德索工程师说道6芯M16公头汽车功能上的应用非常广泛,其多芯设计和优良的电气性能使得它能够满足汽车系统中对多通道、多参数监测的需求,提高系统的集成度和工作效率。以下是关于6芯M16公头汽车
    的头像 发表于 06-21 13:49 309次阅读
    6芯M16公头<b class='flag-5'>在</b>汽车<b class='flag-5'>功能上</b>的应用