飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

SeaweedFS 与 JuiceFS 的设计和特性

时间:2023-06-09  作者:电脑狂魔  

SeaweedFS是一种高效的分布式文件存储系统,其灵感来自 Facebook 的 Haystack。它擅长对小数据块进行快速读写操作。JuiceFS是一个云原生分布式文件系统,以低成本提供海量、弹性、高性能的存储。

本文旨在比较 SeaweedFS 和 JuiceFS 的设计和功能,帮助用户在选择文件存储系统时做出明智的决定。比较将侧重于它们的体系结构、元数据存储、数据存储、访问协议和扩展功能。为了汇总信息,将在文章末尾提供一个表格。

架构比较

SeaweedFS 架构

SeaweedFS由三部分组成:

  • 卷服务器在底层存储文件。

  • 主服务器管理集群。

  • 一个可选的文件管理器组件,向上提供更多的功能。

SeaweedFS 架构

SeaweedFS 架构 

卷服务器和主服务器

在系统运行中,卷服务器和主服务器都用于文件存储:

  • 卷服务器专注于数据读写操作。

  • 主服务器主要用作集群和卷的管理服务。

在数据访问方面,SeaweedFS 实现了与 Haystack 类似的方法。SeaweedFS 中用户创建的卷对应于一个大磁盘文件(下图中的 Superblock)。在此卷中,用户写入的所有文件(图中的针)都合并到大磁盘文件中。

SeaweedFS中的数据读写流程:

  1. 在写入操作之前,调用者向 SeaweedFS(主服务器)请求写入分配。 

  2. SeaweedFS 根据当前数据量返回一个File ID(由Volume ID 和offset 组成)。在写入过程中,文件长度和块详细信息等基本元数据信息也与数据一起写入。 

  3. 写入完成后,调用者需要将文件与返回的File ID关联起来,并将这个映射存储在外部系统中,比如MySQL。 

  4. 在读取数据时,由于文件 ID 已经包含了计算文件位置(偏移量)所需的所有信息,因此可以高效地检索文件内容。

卷服务器

卷服务器 

文件管理器

在上面提到的底层存储单元之上,SeaweedFS 提供了一个名为 filer 的组件。通过与卷服务器和主服务器集成,它提供了广泛的外部功能和特性,例如 POSIX 支持、WebDAV 和 S3 接口。与 JuiceFS 类似,filer 也需要集成外部数据库来存储元数据信息。

请注意,在以下文本中,SeaweedFS 包含文件管理器组件。

JuiceFS 架构

下图是社区版JuiceFS 的架构:

JuiceFS 架构

JuiceFS 架构

JuiceFS 由三个组件组成:

  • JuiceFS 客户端,所有文件 I/O 都在其中发生。 

  • 数据存储器存储文件数据。

  • 元数据引擎存储文件元数据。

JuiceFS 采用了数据和元数据存储分离的架构:

  • 文件数据被拆分并存储在对象存储系统中,例如 Amazon S3。

  • 元数据存储在用户选择的数据库中,例如 Redis 或 MySQL。

JuiceFS 通过共享同一个数据库和对象存储,实现了强一致的分布式文件系统,同时提供了完整的 POSIX 兼容性和高性能等特性。

元数据存储比较 

在元数据存储方面,SeaweedFS 和 JuiceFS 都支持使用外部数据库来存储文件系统的元数据信息。在数据库支持方面,SeaweedFS 最多支持24 个不同的数据库。JuiceFS 对数据库事务能力要求很高,目前支持三大类 10 个事务数据库。

原子操作

为了保证所有元数据操作的原子性,JuiceFS 在实现层面依赖于具有事务处理能力的数据库。相比之下,SeaweedFS 在 Rename 操作时只使用部分数据库(SQL、ArangoDB、TiKV)的事务,对数据库事务能力的要求较低。此外,在 Rename 操作期间,SeaweedFS 不会在元数据复制过程中锁定原始目录或文件,这可能会导致该过程中所做的更新数据丢失。

变更日志

SeaweedFS 为所有元数据操作生成变更日志,可以进一步用于数据复制和操作审计等功能。不过 JuiceFS 目前还没有实现这个功能。

存储比较

前面提到,SeaweedFS通过卷服务器和主服务器实现数据存储,支持小数据块的“组合存储”和“纠删码”等特性。

另一方面,JuiceFS 依赖对象存储服务进行数据存储,相关特性由用户选择的对象存储提供。

文件分割

SeaweedFS 和 JuiceFS 都将文件拆分成更小的块,然后再将它们持久化到底层数据系统中。SeaweedFS 将文件拆分为 8 MB 的块。对于非常大的文件(超过 8 GB),它还会将块索引保存到底层数据系统。

JuiceFS 首先将文件拆分为 64 MB 的块,这些块进一步划分为 4 MB 的对象。它通过切片的内部概念优化随机写入、顺序读取和重复写入的性能。有关详细信息,请参阅数据处理工作流程。

分层存储

对于新创建的卷,SeaweedFS 在本地存储数据。对于老卷,支持上传到云端,实现冷热数据分离。在这方面,JuiceFS 依赖于外部服务。

数据压缩

JuiceFS 支持对所有写入的数据使用 LZ4 或 ZStandard 进行压缩,而 SeaweedFS 根据文件扩展名和文件类型等因素来决定是否压缩数据。

存储加密

JuiceFS 支持传输中加密和静态加密。当启用静态加密时,用户需要提供一个自我管理的密钥,所有写入的数据都使用这个密钥进行加密。有关详细信息,请参阅数据加密。

SeaweedFS 还支持传输中加密和静态加密。启用数据加密后,写入卷服务器的所有数据都使用随机密钥加密。相应的密钥信息由维护元数据的文件管理器管理。

访问协议比较

POSIX 兼容性

JuiceFS完全兼容 POSIX,而 SeaweedFS 支持与 POSIX 的基本兼容(参见Issue 1558和Wiki),目前还在完善中。

S3协议

JuiceFS 利用 MinIO S3 网关提供S3 网关功能。它提供与 S3 兼容的 RESTful API,允许用户使用 s3cmd、AWS CLI 和 MinIO Client (mc) 等工具管理存储在 JuiceFS 中的文件,即使直接挂载不方便。

SeaweedFS 支持大约 20 个 S3 API,涵盖读取、写入、搜索和删除请求等常见操作。它还具有针对特定请求(如读取)的扩展功能。有关详细信息,请参阅Amazon-S3-API。

WebDAV协议

JuiceFS 和 SeaweedFS 都支持 WebDAV 协议。

HDFS 兼容性

JuiceFS 提供与 HDFS API 的完全兼容。它支持 Hadoop 2.x 和 Hadoop 3.x,以及 Hadoop 生态系统中的各种组件。 

SeaweedFS 提供与 HDFS API 的基本兼容性。它不支持某些操作,如截断、连接、校验和以及扩展属性。

CSI驱动程序

JuiceFS和SeaweedFS都提供了 Kubernetes CSI 驱动,帮助用户在 Kubernetes 生态中使用相应的文件系统。

扩展功能比较

客户端缓存

JuiceFS 提供了多种客户端缓存策略,涵盖元数据和数据缓存。它允许用户根据他们的应用场景进行优化。但是,SeaweedFS 没有客户端缓存功能。

集群数据复制

SeaweedFS 支持 Active-Active 和 Active-Passive 两种异步复制模式,用于多个集群之间的数据复制。这些模式通过应用带有签名的变更日志来防止重复修改,从而确保不同集群数据之间的一致性。在超过两个集群节点的Active-Active模式下,SeaweedFS对目录重命名等操作有一定的限制。

JuiceFS 本身不支持集群间的数据复制。它依赖于元数据引擎和对象存储本身的数据复制能力。

基于云的数据缓存

SeaweedFS 可用作基于云的对象存储的缓存,并支持通过命令手动缓存预热。修改后的缓存数据异步同步回对象存储。

JuiceFS 将文件分块存储在对象存储中,不对对象存储中已有的数据提供缓存加速。

垃圾

JuiceFS 默认开启Trash功能,自动将删除的文件移至 JuiceFS 根目录下的“.trash”目录,并保留指定时间后永久删除。

但是,SeaweedFS 不支持此功能。

运维工具

JuiceFS 提供了juicefs stats和juicefs profile子命令,允许用户查看特定时间段的实时性能指标和回放性能指标。此外,JuiceFS 提供了一个指标接口,可以方便地将监控数据与 Prometheus 和 Grafana 集成。

SeaweedFS 实现了Push 和 Pull方法来与 Prometheus 和 Grafana 集成。它还提供了用于执行各种维护任务的交互式工具weed shell,例如检查当前集群状态和列出文件目录。

其他比较

  • 从发布日期来看,SeaweedFS 于 2015 年 4 月发布,目前已积累 域名 star,而 JuiceFS 于 2021 年 1 月发布开源版本,截至目前已积累 域名 star。

  • JuiceFS 和 SeaweedFS 均采用 Apache License 2.0,对商业用途友好。SeaweedFS 主要由 Chris Lu 个人维护,而 JuiceFS 主要由 Juicedata 公司维护。

  • JuiceFS 和 SeaweedFS 都是使用 Go 编程语言实现的。

作为结论的比较表

SeaweedFS

JuiceFS

Metadata engine

Multi-engine

Multi-engine

Atomicity of metadata operations

Not guaranteed

Guaranteed through database transactions

Changelogs

Yes

No

Data storage

Included

Reliance on external services

Code correction

Supported

Reliance on external services

Data merge

Supported

Reliance on external services

File splitting

8 MB

64 MB + 4 MB

Tiered storage

Supported

Reliance on external services

Data compression

Supported (extension-based)

Supported (global settings)

Storage encryption

Supported

Supported

POSIX compatibility

Basic

Full

S3 protocol

Basic

Basic

WebDAV protocol

Supported

Supported

HDFS compatibility

Basic

Full

CSI driver

Supported

Supported

Client cache

Not supported

Supported

Cluster data replication

Bidirectional asynchronous, multi-mode

Not supported

Cloud-based data caching

Supported(manual synchronization)

Not supported

Trash

Not supported

Supported

Operation and maintenance tools

Provided

Provided

Release date

April 2015

January 2021

Maintainer

Individually (Chris Lu)

By company (Juicedata)

Language

Go

Go

Open source protocol

Apache License 2.0

Apache License 2.0


湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。