helyim: 纯 Rust 实现的分布式对象存储系统
内容提要
helyim是使用rust重写的seaweedfs,主要设计目标是精简文件元数据信息,支持地域容灾,架构简单易于实现和运维。支持Http文件上传、下载、删除等接口,未来可能实现纠删码、Filer服务、io-uring等功能。使用方法包括启动master服务、volume服务、上传和删除文件。
延伸解读
元数据内存化的设计取舍
helyim 通过合并小文件并去除 POSIX 语义(如文件权限),将元数据精简到可完全存入内存,从而避免获取元数据时的磁盘 IO。这一设计借鉴了 Haystack 和 F4 论文的思路,适合对象存储场景,但意味着它不兼容需要完整文件系统语义的应用。
容灾与高可用机制
helyim 支持 IDC 和机架级别的容灾,Volume 数据可通过 Replica Placement 进行副本放置。元数据服务基于 Openraft 实现 Failover,并配合请求重定向和冗余数据定时删除,提升了集群的可用性与数据可靠性。
当前功能边界与未来方向
目前 helyim 提供 HTTP 文件上传、下载、删除及集群状态查看等基础接口。纠删码和 Filer 服务(以支持 S3、HDFS、Fuse 等代理)被列为高优先级未来功能,io-uring、kernel bypass 和 GPU direct storage 也在规划中,表明项目仍在演进阶段。
Q&A
helyim 是什么?它和 SeaweedFS 有什么关系?
helyim 是使用 Rust 重写的 SeaweedFS,其架构参考了 Facebook 的 Haystack 和 f4 论文。
helyim 的主要设计目标有哪些?
主要设计目标包括:精简文件元数据信息,去掉对象存储不需要的 POSIX 语义(如文件权限);小文件合并成大文件,减小元数据数并完全存在内存中,省去获取元数据的磁盘 IO;支持地域容灾(IDC 容灾和机架容灾);架构简单,易于实现和运维。
helyim 目前支持哪些功能特性?
支持的特性包括:Http 文件上传、下载、删除、查看集群状态等接口;Volume 数据支持 Replica Placement;基于 Openraft 的元数据服务 Failover;冗余数据的定时删除;元数据接口的请求重定向。
helyim 未来计划实现哪些功能?
未来可能实现的功能有:纠删码(高优先级)、Filer 服务(高优先级,以支持 S3、HDFS、Fuse 等 proxy)、io-uring、kernel bypass(RDMA、DPDK、SPDK)以及 GPU direct storage(大概率不做,但会学习相关知识)。
如何快速开始使用 helyim?
使用步骤:1. 启动 master 服务:cargo run --bin helyim master;2. 启动 volume 服务:cargo run --bin helyim volume --port 8080 --folders ./data:7;3. 上传文件:先通过 curl http://localhost:9333/dir/assign 获取文件 ID,再使用 curl -F file=@./sun.jpg http://127.0.0.1:8080/6,16b7578a5 上传;4. 删除文件:curl -X DELETE http://127.0.0.1:8080/6,16b7578a5。更多用法参考 https://github.com/helyim/helyim。
helyim 如何实现地域容灾?
helyim 支持地域容灾,包括 IDC 容灾和机架容灾,通过 Volume 数据支持 Replica Placement 来实现。