当前位置: 首页 > news >正文

Means:基于 .NET 10 打造的开源自部署 S3 兼容对象存储服务

引言

对象存储已经成为现代云原生架构的基石。从 AWS S3 到 MinIO,S3 兼容 API 几乎成了对象存储的"通用语言"。然而在 .NET 生态中,一直缺少一个纯 .NET 原生实现的高质量 S3 兼容存储方案。

Means应运而生——它是一个基于.NET 10 / ASP.NET Core构建的、可自部署的S3 兼容对象存储服务。你可以把它理解为一个 .NET 版的 MinIO:完全兼容 S3 API,支持单节点多盘部署,提供 Web 管理控制台,同时提供 C# 和 TypeScript SDK。


一、为什么需要一个 .NET 原生的对象存储?

  • 统一技术栈:如果你的团队以 .NET 为主,Means 可以无缝融入现有运维体系,无需额外学习 Go/Java 生态的运维工具
  • 深度定制:源码完全开放(MIT),你可以根据自己的业务需求修改存储后端、接入自定义认证、扩展协议
  • .NET 10 性能红利:享受 .NET 10 的原生 AOT、低内存占用和高吞吐能力
  • 自部署、数据主权:数据完全在你自己的基础设施上,满足合规和隐私需求

二、Means 的核心能力

S3 数据面(v1 基线)

Means 已实现了生产级的 S3 协议兼容,覆盖绝大多数常用场景:

能力说明
Bucket 管理ListBuckets / CreateBucket / HeadBucket / DeleteBucket
对象 CRUDPutObject / GetObject / HeadObject / DeleteObject / CopyObject
ListObjectsV2支持 prefix / delimiter / continuation-token / max-keys
Multipart Upload完整实现:initiate → upload part → upload part copy → complete / abort / list parts / list uploads
VersioningBucket 版本控制、object versionId、delete marker、ListObjectVersions
Object Tagging支持 current version 和指定 versionId
Lifecycle过期删除、非当前版本清理、未完成 Multipart 自动中止
Bucket CORSCRUD 配置 + OPTIONS preflight
Bucket Policy基础 Allow/Deny 策略
Bucket Notification预留配置接口
SigV4 预签名 URLGET / PUT / multipart UploadPart
Range 读取支持 206 Partial Content,非法 Range 返回 416

协议兼容细节

  • 同时支持path-stylevirtual-hosted-style地址解析
  • 统一返回 S3 风格XML 响应(列表、错误、复制结果)
  • 支持内容协商压缩(br/gzip),Range 请求下自动禁用压缩
  • PutObject原子写入语义,元数据事务提交后对象对外可见
  • Multipart Upload 严格遵循 S3 规范:partNumber 1-10000,最小 5 MiB,ETag 为md5(concat(part-md5-bytes))-part-count

管理控制台

内置基于React的 Web 管理控制台(/api/consoleJSON API +wwwroot),提供:

  • 🔐 登录/登出/会话管理(Cookie 鉴权)
  • 🪣 Bucket 管理(创建、删除、对象浏览)
  • 📋 Bucket Policy 可视化管理
  • 🔗 预签名上传/下载链接生成
  • 📤 大文件分片上传(默认 5 MiB 起启用 multipart,16 MiB part,3 并发)
  • 🔑 AccessKey 管理(创建、删除、列表)
  • ⚙️ 系统设置(最大上传大小)
  • 📊 审计日志与小时级请求统计看板
  • 🖥️ 集群状态页、节点/磁盘健康页与诊断导出
  • 📈 Prometheus 文本指标导出(/metrics
  • 🔭 可选 OpenTelemetry 链路追踪(OTLP)
  • ⏱️ 后台任务统一管理与手动触发

三、技术架构

整体分层

┌──────────────────────────────────────────┐ │ React 管理控制台 (Vite) │ ├──────────────────────────────────────────┤ │ Console API (/api/console) │ ├──────────────────────────────────────────┤ │ S3 数据面 API (REST / SigV4) │ ├──────────────────────────────────────────┤ │ Means.Protocol.S3 (协议层) │ │ · 地址解析 (path / virtual-hosted) │ │ · SigV4 签名校验 │ │ · S3 XML 序列化/反序列化 │ ├──────────────────────────────────────────┤ │ Means.Core (业务核心) │ ├──────────────────────────────────────────┤ │ 存储后端 (可插拔) │ │ · XlFs (默认,MinIO-inspired) │ │ · SqliteFs (SQLite + filesystem) │ ├──────────────────────────────────────────┤ │ MeansLogDb (元数据引擎) │ │ · Append-only WAL │ │ · Batch atomic commit │ │ · Snapshot / Restore / Recovery │ └──────────────────────────────────────────┘

关键技术选型

层级技术选型
运行时.NET 10 / ASP.NET Core
存储后端XlFs(自研,MinIO-inspired 单节点多盘)、SqliteFs(SQLite + filesystem,legacy/test)
元数据引擎MeansLogDb(自研 WAL + Snapshot 索引引擎)
前端React + TypeScript + Vite + TailwindCSS
SDKC# SDK、TypeScript SDK(browser-safe)、Node SDK
可观测性Prometheus metrics + OpenTelemetry tracing(OTLP)
部署Docker / Docker Compose(单节点 + 多节点实验拓扑)
客户端兼容AWS CLI、boto3、aws-sdk-js、rclone、mc
许可证MIT

自研存储后端 XlFs

XlFs 是 Means 默认的存储引擎,设计灵感来自 MinIO 的 Xl 存储格式,核心特性:

  • 单节点多盘:充分利用多块磁盘的 IO 能力
  • 对象 Manifest:每个对象维护完整的元数据清单
  • Quorum 机制:读写时基于多数派保证数据一致性
  • MeansLogDb:自研的 append-only WAL 元数据索引引擎,支持 batch atomic commit、snapshot/restore、crash recovery
  • 后台任务:heartbeat、disk health、metadata consistency check、storage GC、repair、rebalance、lifecycle、replication worker

四、快速开始

环境要求

  • .NET SDK 10
  • Node.js 20+(仅修改前端时需要)

源码启动

git clone https://github.com/AIDotNet/Means.git cd Means dotnet restore Means.slnx dotnet build Means.slnx dotnet run --project src/Means/Means.csproj --launch-profile http

访问http://localhost:5178,默认控制台账号:meansadmin/meansadmin-local

Docker Compose 启动

单节点(XlFs 存储):

docker compose up -d --build

多节点实验拓扑:

docker compose -f compose.multinode.yaml up -d --build # 访问 http://localhost:5181 / 5182 / 5183

S3 客户端接入

默认 S3 凭证:meansadmin/meansadmin-local-secret。可以直接使用 AWS CLI、rclone、mc 等标准 S3 客户端连接。


五、开发路线图

Means 正在快速迭代中,以下是里程碑计划:

里程碑状态内容
M3✅ 已完成Versioning + Lifecycle
M1🚧 进行中单机生产化 hardening
M2🚧 进行中多副本分布式存储
M4📋 计划中IAM/STS + SSE 加密
M5📋 计划中Replication + Object Lock
M6📋 计划中纠删码(EC)+ 自动 repair/rebalance
M7📋 计划中S3 兼容矩阵全面稳定

当前已完成的核心能力:分布式存储内核(节点注册/心跳/副本写入/修复队列)、MeansLogDb 元数据引擎、Versioning、Lifecycle、Bucket CORS、Object Tagging、后台任务框架、多客户端兼容测试等。


六、为什么选择 Means?

vs. MinIO

对比维度MinIO (Go)Means (.NET)
技术栈Go 语言.NET 10 / C#
开源协议AGPLv3MIT
控制台功能丰富React 管理控制台
SDK官方 SDK 多语言C# / TypeScript / Node
.NET 集成需通过 HTTP/S3 SDK原生 .NET 集成
定制门槛需熟悉 Go 生态对 .NET 团队零门槛

适用场景

  • ✅ .NET 技术栈团队需要自部署对象存储
  • ✅ 希望拥有完全可控的存储源码(MIT 协议)
  • ✅ 需要在对象存储上做深度定制(自定义认证、存储后端、审计)
  • ✅ 边缘部署 / 私有云 / 混合云场景
  • ✅ 学习和研究 S3 协议实现的开发者

结语

Means 是 .NET 生态中一个非常有野心的开源项目——用 C# 实现一个完整的 S3 兼容对象存储。它不仅

http://www.jsqmd.com/news/1067366/

相关文章:

  • BLE 广播 rawBytes 解析说明
  • 二年级下册语文复习1-8单元:口语交际+写话训练(ppt课件)
  • 基于KNN算法的健身会员个性化锻炼与饮食方案推荐研究
  • 90% 运营踩坑:跳过监测直接优化,难怪流量上不去
  • 代码审查与性能诊断实战:用Gemini镜像站对PHP/Java项目进行自动化深度体检
  • 一文读懂主流仓库管理系统,精准选型不踩坑
  • 维铂叁科普知识丨数字防伪印章
  • Agent替人打电话:银企直连支付终态确认的语音问询方案探索
  • 从概念验证到百万QPS商用:3家头部AI OS厂商同步采用的插件生命周期管理模型(含GitHub Star超2.4k的开源参考实现)
  • 网络安全学习笔记
  • 5. 油气开采工程
  • RTKLIB中关于不同的码通道
  • Codex 负责人:下一代 AI,会像私人助理一样替你干活
  • LY62256BSL-45SLI 技术解析:32K×8低功耗SRAM
  • 单模型采样的统计学本质与系统性偏差分析 | 上篇单模型采样的统计学本质与系统性偏差分析 | 上篇
  • 大模型下半场抢人开战!DeepSeek重金扩招Agent配套Harness人才,暴露AI全新发展趋势。
  • 2026 降AI率工具实测对比:公认好用的,科研党救急指南
  • SK海力士营业利润率超70%,与英伟达、台积电结盟能否摆脱“硅周期”?
  • Linux 单用户模式 vs 救援模式的区别
  • 为什么92%的AI中台项目在Adapter层失败?20年架构老兵亲授6个反模式诊断清单与即时修复checklist
  • Advanced RAG实战:基于PDF文件构建RAG知识库
  • 作为宝妈研究者我给孩子选的脑营养不是最贵的是最对的
  • 5分钟快速上手Bongo Cat Mver:让键盘操作变成可爱动画的终极指南
  • 香橙派nomachine远程桌面连接显示无画面的解决办法
  • 如何将iPhone上的联系人AirDrop到iPhone上?
  • 表面等离子共振SPR技术结果解析
  • 硬核科技+柔性创新”2026第三代半导体与柔性电子展会抢先看
  • 【2026奇点智能权威报告】:首次公开XAI for LLM三大可解释性范式演进路径与落地阈值
  • 《图解HTTP》--第5章-与HTTP协作的Web服务器
  • AI原生跨模态学习实战手册(SITS 2026官方基准全解析):从零部署VLM推理服务, latency压至117ms以内