RustFS for .NET 演示项目深度解析:构建 S3 兼容的分布式存储应用

发布于:2025-07-27 ⋅ 阅读:(19) ⋅ 点赞:(0)

About RustFS

RustFS 是使用热门安全的 Rust 驱动的 高性能,无限扩容,安全可靠,多云存储,S3 兼容 分布式存储系统。

github-rustfs


RustFS 简介

RustFS 是一款简单、高效、分布式的对象存储,也是一种高效、开源、自由的对象存储解决方案。它 100% 兼容 S3 协议,使用 Apache2 许可证发行的开源软件。

rustfs

RustFS 使用目前全世界最受欢迎的、内存安全的语言 Rust 语言编写,是由全世界优秀的工程师参与并贡献的一款对于 商用友好分布式对象存储产品

RustFS 是 MinIO 对象存储的首选开源平替,使用商用友好的开源协议。


架构理念与存储速度

  • 云原生的分布式存储架构

MinIO 提出的架构理念极大地方便了全球的用户和推广了 亚马逊 S3 协议。所有的节点均为等层级关系的节点,极大地简化了架构设计并且不用担心元数据丢失,一条命令即可启动。不失优雅、简单、可靠,而 RustFS 采用了和 MinIO 一样的架构设计,整体的速度取决于存储节点的网络和硬盘的速度。

  • 传统的分布式存储架构

传统的分布式存储架构中必须存在:Master 节点、MetaData 节点和 Data Node 节点。而这种模式设计,让用户的部署非常复杂。同时,如果没有丰富的分布式存储的管理经验,一旦元数据丢失,数据会出现丢失的风险。典型的代表 Ceph

  • 两种架构理念的PK

经过 RustFS官方评测RustFS 可以达到 323 GB/s 的读取和 183 GB/s 的写入速度。可以说,RustFSMinIO 是全世界速度唯二领先的分布式对象存储产品。在同等配置下,它们的速度远远快于 Ceph

说明:RustFS 即将从商业应用正式向开源,向全球进行发布,帮助全世界降低存储成本、提升数据安全。


RustFS 价值观与愿景

  • 价值观:帮助全人类提升数据安全、降低存储成本
  • 愿景:全世界每一个 个人 AI Agent 都可以使用 RustFS 来存储数据

操作系统和 CPU 支持

你几乎可以在任何 CPU 和操作系统上运行 RustFS不论是 Linux、Unix、Windows、MacOS、FreeBSD、Docker、甚至是边缘网关上,您都可以运行 RustFS

CPU 架构支持X86、ARM 等多种 CPU 架构。

RustFS 特征

  • S3 兼容100% 兼容 S3 协议,优秀的兼容性与大数据、数据湖、备份软件、图像处理软件、工业生产软件兼容
  • 分布式RustFS 是一个分布式的对象存储,因此可以满足各种需求
  • 商用友好RustFS100% 的开源软件,并且使用 Apache v2.0 许可证发行,因此是商用友好的
  • 快速Rust 这一门开发语言的性能无限接近于 C 语言 的速度,因此 RustFS 的性能非常强劲
  • 安全RustFS 使用内存安全的语言 Rust 编写,因此是 100% 安全的
  • 跨平台RustFS works on Windows, macOS, and Linux
  • 可扩展RustFS 支持自定义插件,因此可以满足各种需求
  • 可定制:由于开源的特性,你可以自定义各种插件,因此可以满足各种需求
  • 云原生RustFS 支持 Docker/Podman 等方式部署,可在云原生环境下快速部署

RustFS 架构组成

RustFS 是一个分布式对象存储系统,类似于众所周知的 AWS S3。作为 MinIO 的平替产品,RustFS 参考了 MinIO 的简洁、轻量、可扩展、优雅的架构。

对象可以是文档、视频、PDF 文件等。为了存储对象,MinIO 提供了一个可扩展、灵活且高效的解决方案来存储、访问和管理数据。它与 AWS S3 API 的兼容性使得与基于 AWS S3 的应用程序无缝集成。

  • 架构图如下:

rustfs架构

这是 RustFS 的基本架构,分布式网格是一种使用多个节点执行单个任务的计算机架构。节点通过网络相互连接,这使得它们能够相互通信。

一致性设计

分布式和单机模式下,所有读写操作都严格遵守 read-after-write 一致性模型。

RustFS 重要概念
  • Object(对象):存储到 RustFS 的基本对象,如文件、字节流等任何数据
  • Bucket(桶):用来存储 Object 的逻辑空间。每个 Bucket 之间的数据是相互隔离的。对于客户端而言,就相当于一个存放文件的顶层文件夹
  • Drive(磁盘):即存储数据的磁盘,在 RustFS 启动时,以参数的方式传入。RustFS 中所有的对象数据都会存储在 Drive 里
  • Set(集合):即一组 Drive 的集合,分布式部署根据集群规模自动划分一个或多个 Set,每个 Set 中的 Drive 分布在不同位置。一个对象存储在一个 Set 上(有地方也将 Set 的组合称之为 Strips——条带)
架构设计要点
  1. 一个对象存储在一个 Set
  2. 一个集群划分为多个 Set
  3. 一个 Set 包含的 Drive 数量是固定的,默认由系统根据集群规模自动计算得出
  4. 一个 Set 中的 Drive 尽可能分布在不同的节点上

注意:在设计架构和部署设备前需要注意以上要点。


多云部署

客户在各种云平台上运行 RustFS 有三个原因

  • RustFS 在混合云或多云部署场景中充当 一致的存储层
  • RustFSKubernetes 原生的高性能产品,可以在公有云、私有云和边缘云环境中提供可预测的性能。
  • EKS 上运行 RustFS 可以控制软件堆栈,并具有 避免云锁定所需的灵活性

RustFS 在所有主要的 Kubernetes 平台(阿里云 ACK、Tanzu、Azure、GCP、腾讯云 TKE)上提供 可移植的高性能对象存储系统

在公有云上,RustFS 与各家云平台(比如:腾讯云 TKE )服务原生集成,从而更轻松地将自己的大规模多租户对象存储即服务运行。

🤞✌️ RustFS 是 AWS S3 存储即服务的完全替代品

rustfs-object-storage

AWS S3 不同,RustFS 使应用程序能够跨多云和混合云基础设施进行扩展,而无需昂贵的软件重写或专有集成。由于 RustFS 是容器化和 Kubernetes 原生的,因此可以在这些平台上推出,而无需专业技能来操作大规模存储基础设施。


RustFS for .NET 演示

rustfs_dotnet 这是一个使用 RustFS 技术实现的 .NET S3 演示项目,展示了如何在 .NET 环境中与 S3 兼容的存储服务进行交互。


功能概述

本项目主要实现了以下功能:

  • 存储桶管理:创建、删除、检查存在性、列出所有存储桶
  • 文件管理:上传、下载、删除、列出存储桶中的文件
  • 统一的 API 响应格式 ApiResponse
  • 异常处理中间件

主要特性

  • 使用 AWS S3 兼容的 API 进行对象存储操作
  • 清晰的错误处理和响应格式
  • 模块化的代码结构
  • 支持异步操作

API 规范

所有 API 都遵循统一的响应格式,包含以下字段:

  • Success: 操作是否成功
  • Code: HTTP 状态码
  • Message: 操作结果描述
  • Data: 返回数据(如果有)

环境说明

  • 安装 .NET9 SDK 9.0.7 及最新版本,命令查看环境信息:
dotnet --info
  • 本地安装 Docker 环境,启动 RustFS 容器服务:
# 拉取镜像
docker pull rustfs/rustfs:latest
# 启动容器
docker run -d \
  --name rustfs \
  -p 9000:9000 \
  -v /data:/data \
  rustfs/rustfs:latest

更多信息请查看:


使用示例

启动项目
  • 使用 cmd/powershell/pwsh 终端运行以下命令:
# 克隆项目
git clone https://gitee.com/dolayout/rustfs_dotnet.git
# 进入项目根目录
cd rustfs_dotnet
# 还原 nuget 包
dotnet restore
# 运行项目
dotnet run -c Release -p ./src/rustfs_dotnet_s3_demo
  • 浏览器输入地址:
http://localhost:5073/scalar/v1
  • 显示页面如下:

rustfs-dotnet-scalar

接口操作

所有接口遵循 REST ful API 风格,部分接口介绍如下:

  • 创建存储桶
POST /api/bucket/{bucketName}
  • 上传文件
POST /api/file/upload/{bucketName}/{key}
Form-data: file=@local_file_path
  • 下载文件
GET /api/file/download/{bucketName}/{key}
  • 删除文件
DELETE /api/file/{bucketName}/{key}

项目结构

示例项目完整目录结构如下:

└─src
    └─rustfs_dotnet_s3_demo
        ├─Controllers
        ├─Extensions
        ├─Handlers
        ├─Middlewares
        ├─Models
        ├─Properties
        ├─Services
        └─Settings
  • Controllers: 包含 BucketManageController.csFileManageController.cs 等控制器类
  • Extensions: 包含控制器扩展方法
  • Handlers: 包含异常处理相关类
  • Models: 包含响应模型类
  • Services: 包含 AWS S3 服务实现
  • Settings: 包含 AWS S3 配置设置

错误处理

项目使用 统一的异常处理机制,所有异常都会被转换为标准化 ProblemDetailsResponse 格式返回给客户端。


配置

AWS S3 的连接信息通过 AwsS3Setting 类进行配置,包含服务地址、访问密钥、秘密密钥和区域设置。


许可证

本项目 rustfs-dotnet-demo 遵循 MIT 许可证。


欢迎更多小伙伴前来探索,查看更多:


网站公告

今日签到

点亮在社区的每一天
去签到