RustFS for dotnet
About RustFS
RustFS
是使用热门安全的 Rust
驱动的 高性能,无限扩容,安全可靠,多云存储,S3 兼容 分布式存储系统。
github
项目地址,https://github.com/rustfs
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
的写入速度。可以说,RustFS
和 MinIO
是全世界速度唯二领先的分布式对象存储产品。在同等配置下,它们的速度远远快于 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
是一个分布式的对象存储,因此可以满足各种需求 - 商用友好:
RustFS
是100%
的开源软件,并且使用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——条带)
架构设计要点
- 一个对象存储在一个
Set
上 - 一个集群划分为多个
Set
- 一个
Set
包含的Drive
数量是固定的,默认由系统根据集群规模自动计算得出 - 一个
Set
中的Drive
尽可能分布在不同的节点上
注意:在设计架构和部署设备前需要注意以上要点。
多云部署
客户在各种云平台上运行 RustFS
有三个原因
RustFS
在混合云或多云部署场景中充当 一致的存储层RustFS
是 Kubernetes 原生的高性能产品,可以在公有云、私有云和边缘云环境中提供可预测的性能。- 在
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
兼容的存储服务进行交互。
gitee
项目地址,https://gitee.com/dolayout/rustfs_dotnetgithub
项目地址,https://github.com/rustfs/rustfs-dotnet-demo
功能概述
本项目主要实现了以下功能:
- 存储桶管理:创建、删除、检查存在性、列出所有存储桶
- 文件管理:上传、下载、删除、列出存储桶中的文件
- 统一的
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
更多信息请查看:
rustfs
官网,https://rustfs.com/dotnet sdk
官网,https://dotnet.microsoft.com/zh-cn/download
使用示例
启动项目
- 使用
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
- 显示页面如下:
接口操作
所有接口遵循 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.cs
和FileManageController.cs
等控制器类Extensions
: 包含控制器扩展方法Handlers
: 包含异常处理相关类Models
: 包含响应模型类Services
: 包含AWS S3
服务实现Settings
: 包含AWS S3
配置设置
错误处理
项目使用 统一的异常处理机制,所有异常都会被转换为标准化 ProblemDetailsResponse
格式返回给客户端。
配置
AWS S3
的连接信息通过 AwsS3Setting
类进行配置,包含服务地址、访问密钥、秘密密钥和区域设置。
许可证
本项目 rustfs-dotnet-demo 遵循 MIT
许可证。
欢迎更多小伙伴前来探索,查看更多:
gitee
项目地址,https://gitee.com/dolayout/rustfs_dotnetgithub
项目地址,https://github.com/rustfs/rustfs-dotnet-demogithub loverustfs
,https://github.com/loverustfs