JuiceFS 对比 SeaweedFS
SeaweedFS 与 JuiceFS 皆是开源的高性能分布式文件存储系统,但二者存在诸多设计区别与功能差异,本章将会详述他们的区别和各自适用场景,帮助你的团队进行技术选型。
SeaweedFS 和 JuiceFS 都采用了对商用更友好的 Apache License 2.0,但 JuiceFS 分为社区版和企业版,企业版提供多种交付形式,例如私有部署和云服务。JuiceFS 企业版使用自研的闭源元数据引擎,其客户端则与社区版大量共享代码。你可以通过下表速查两者的关键特性对比,然后在本文中选取感兴趣的话题详细阅读。
JuiceFS 和 SeaweedFS 对比一览
对比项 | 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 |
SeaweedFS 技术架构
系统由 3 部分组成:
- Volume Server,用于底层存储文件
- Master Server,用于管理集群
- Filer,一个向上提供更多特性的可选组件
Volume Server 与 Master Server 一并构成文件存储服务:
- Volume Server 专注于数据的写入与读取
- Master Server 负责管理集群与 Volumes
在读写数据时,SeaweedFS 的实现与 Haystack 相似,用户创建的文件系统(Volume)实际上是一个大磁盘文件,也就是下图的 Superblock。在此 Volume 中,用户写入的所有文件都会被合并到该大磁盘文件中,借用 Haystack 的术语,每一个文件都是“一根针”,needle。
SeaweedFS 中数据写入和读取流程:
- 在开始写入数据之前,客户端向 Master Server 发起写入申请。
- SeaweedFS 根据当前的数据量返回一个 File ID,这个 ID 由 <volume id, file key, file cookie> 三部分构成。在写入的过程中,一并被写入的还有基础的元数据信息(文件长度与 Chunk 等信息)。
- 当写入完成之后,调用者需要在一个外部系统(例如 MySQL)中对该文件与返回的 File ID 进行关联保存。
- 在读取数据时,由于 Volume 的索引信息已被加载入内存,可以通过 File ID 直接获取文件位置(偏移)的所有信息,因此可以高效地将文件的内容读取出来。
在上述的底层存储服务之上,SeaweedFS 提供了一个名为 Filer 的组件,他对接 Volume Server 与 Master Server,对外提供丰富的功能与特性,如 POSIX 支持、WebDAV、S3 API。与 JuiceFS 相同,Filer 也需要对接一个外部数据库以保存元数据信息。