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

RustFS for dotnet

About RustFS

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


RustFS 简介

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

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

一致性设计

分布式和单机模式下,所有读写操作都严格遵守 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 存储即服务的完全替代品

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 及最新版本,命令查看环境信息:
bash 复制代码
dotnet --info
  • 本地安装 Docker 环境,启动 RustFS 容器服务:
bash 复制代码
# 拉取镜像
docker pull rustfs/rustfs:latest
# 启动容器
docker run -d \
  --name rustfs \
  -p 9000:9000 \
  -v /data:/data \
  rustfs/rustfs:latest

更多信息请查看:


使用示例

启动项目
  • 使用 cmd/powershell/pwsh 终端运行以下命令:
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
  • 浏览器输入地址:
bash 复制代码
http://localhost:5073/scalar/v1
  • 显示页面如下:
接口操作

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

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

项目结构

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

bash 复制代码
└─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 许可证。


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