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

弃用MinIO,拥抱全新一代分布式文件系统RustFS

01 引言

原本想分享一下MinIO,因为之前搭建过,用起来相比FastDFS要好太多。但是最新版本的MinIO动了一些手脚,一时间泄气千层浪,引来万千网友的口诛笔伐。

我们来看看网友整理的时间线:

  • 2021.5.11 MinIO官方宣布服务器协议切换到AGPL v3的许可证
  • 2022.7.19 首次公开指控Nutanix违反开源协议
  • 2023.3.24 指控并撤销weka的软件使用许可证
  • 2024.10 移除开源版本K8s Operator中的集成控制台
  • 2025.5 开源版本删除了WebUI的功能

还依稀记得Redis的协议切换导致网友的不满,其他类似的替代方案迅速崛起,直到Redis 8.0原作者回归,坚持重新开源,这才消停。

MinIO为了将侧重点放在自己的付费产品上,在一定程度上在削弱开源产品的功能。使用者也纷纷担忧起来,很多都在寻找替代方案。

RustFS则在此时迅速崛起,收到很多开发者的青睐。目前已经有8.1kstar了。

我们就一起看看RustFS的庐山真面目吧!

02 RustFS简介

2.1 介绍

RustFS 是一个使用 Rust(全球最受欢迎的编程语言之一)构建的高性能分布式对象存储软件。与 MinIO 一样,它具有简单性、S3 兼容性、开源特性以及对数据湖、AI 和大数据的支持等一系列优势。

此外,与其他存储系统相比,它采用 Apache 许可证构建,拥有更好、更用户友好的开源许可证。由于以 Rust 为基础,RustFS 为高性能对象存储提供了更快的速度和更安全的分布式功能。

官方地址:https://rustfs.com/zh/

GitHub地址:https://github.com/rustfs/rustfs

2.2 特性

  • 高性能:使用 Rust 构建,确保速度和效率。
  • 分布式架构:可扩展且容错的设计,适用于大规模部署。
  • S3 兼容性:与现有 S3 兼容应用程序无缝集成。
  • 数据湖支持:针对大数据和 AI 工作负载进行了优化。
  • 开源:采用 Apache 2.0 许可证,鼓励社区贡献和透明度。
  • 用户友好:设计简单,易于部署和管理。

官方也对比了和MinIO的性能,大约是MinIO的2倍。

03 部署

支持多种部署方式

为了方便,我们直接使用容器部署。

# 拉取镜像
docker pull rustfs/rustfs:latest# 启动镜像
docker run -p 9000:9000 --name rustfs \
###########
-e RUSTFS_ACCESS_KEY=rustfsadmin \
-e RUSTFS_SECRET_KEY=rustfsadmin \
##########
-v /mnt/rustfs/data:/data \
-d rustfs/rustfs

RUSTFS_ACCESS_KEYRUSTFS_SECRET_KEY使用管理页面登录的用户名和密码。默认就是rustfsadmin/rustfsadmin,可以通过这两个参数修改。

3.1 管理界面

直接访问IP + 端口就可以进入后台管理页面。

使用配置的账号登录即可。

进入管理界面之后:

3.2 主要功能

文件浏览器:

在这里可以功能创建存储的桶,以及管理桶内的文件。

策略

配置账号只读、只写等,还可以新建策略。

性能

整个存储空间的报告。

04 Java SDK

4.1 Maven依赖

<dependency><groupId>software.amazon.awssdk</groupId><artifactId>s3</artifactId><version>${latest.version}</version></dependency>

4.2 初始刷客户端

static S3Client s3;
static S3Presigner presigner;
String bucket = "my-bucket";@BeforeAll
static void client() {s3 = S3Client.builder()// RustFS 地址.endpointOverride(URI.create("http://127.0.0.1:9000"))// 可写死,RustFS 不校验 region.region(Region.US_EAST_1)  // 用户名和密码.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("rustfsadmin", "rustfsadmin")))// 关键配置!RustFS 需启用 Path-Style.forcePathStyle(true).build();
}

4.3 创建Bucket

@Test
void createBucket() {try {// 是否存在if (!existBucket(bucket)) {// 创建桶s3.createBucket(CreateBucketRequest.builder().bucket(bucket).build());}System.out.println("Bucket created: " + bucket);} catch (BucketAlreadyExistsException | BucketAlreadyOwnedByYouException e) {System.out.println("Bucket already exists.");}
}boolean existBucket(String bucketName) {try {s3.headBucket(request -> request.bucket(bucketName));} catch (NoSuchBucketException e) {return false;}return true;
}

4.4 上传文件

@Test
void uploadFile() {s3.putObject(// 设置上传文件的要保存的桶和名称PutObjectRequest.builder().bucket(bucket).key("test.png").build(),// 文件的路径Paths.get("image_1750938250722.png"));System.out.println("Uploaded image_1750938250722.png");
}

4.5 查看文件

文件的查看需要使用其他客户端:

// 预览客户端,当然也可以直接用来上传,返回文件地址
S3Presigner presigner = S3Presigner.builder().endpointOverride(URI.create("http://10.100.213.25:9000")).region(Region.US_EAST_1)                .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("rustfsadmin", "rustfsadmin"))).build();

文件查看

@Test
void getFile() {GetObjectRequest getObjectRequest  = GetObjectRequest.builder().bucket(bucket).key("test.png").build();GetObjectPresignRequest signRequest  = GetObjectPresignRequest.builder().getObjectRequest(getObjectRequest)// 设置图片的有效期.signatureDuration(Duration.ofMinutes(15)).build();PresignedGetObjectRequest request = presigner.presignGetObject(signRequest);System.out.println(request.url());
}

还有其他功能就不一一演示了,如分片上传,图片的删除等。

05 小结

总体感觉MinIORustFS差不多,但是小编觉得MinIOAPI用起来可能更舒服一些,可能是因为先入为主吧。在企业开发中软件的升级是慎之又慎的,不会频繁升级软件的,所以已经在用的老版MinIO依然杠杠的。

现在各种云厂商都有自己的文件存储系统,使用云厂商的企业似乎不用操心这些问题。如果做MinIORustFS的选型,你会怎么选呢?


文章转载自:

http://wNIHBzXX.rtmqy.cn
http://lmAbTLgr.rtmqy.cn
http://XWhXvNA8.rtmqy.cn
http://mNQTh38l.rtmqy.cn
http://TdeY4RMY.rtmqy.cn
http://rzrwaCme.rtmqy.cn
http://EJYJFsyV.rtmqy.cn
http://VZebVk1R.rtmqy.cn
http://UgwjZ5d9.rtmqy.cn
http://Cz9yTQke.rtmqy.cn
http://s4L4UTca.rtmqy.cn
http://7u6v2UdD.rtmqy.cn
http://llza5H5s.rtmqy.cn
http://LkI729RX.rtmqy.cn
http://OMXOegxz.rtmqy.cn
http://nTHBPUUm.rtmqy.cn
http://uTjnOado.rtmqy.cn
http://4oYsDwS4.rtmqy.cn
http://iKiIGjGN.rtmqy.cn
http://gP3ef8J7.rtmqy.cn
http://lOFaZwoV.rtmqy.cn
http://ukgRGMYk.rtmqy.cn
http://UdW5kk5u.rtmqy.cn
http://6jt540pY.rtmqy.cn
http://ccQE8xlK.rtmqy.cn
http://KbeO3wfd.rtmqy.cn
http://9A2nSWrI.rtmqy.cn
http://B7oNtTBp.rtmqy.cn
http://rTjQL1Jy.rtmqy.cn
http://zTENc2op.rtmqy.cn
http://www.dtcms.com/a/366503.html

相关文章:

  • 信息化安全性测试中漏洞扫描的定义与核心目的
  • 第四十八篇-Dockker+yusiwen/llama.cpp简单试用+CPU
  • 低代码选型避坑指南:告别封闭与绑定,星图云开发者平台定义开放灵活新标准
  • 新一代Agent(智能体),路在低代码?
  • 十四、STM32-----低功耗
  • Jenkins调用ansible部署lnmp
  • 快鹭云业财一体化系统技术解析:低代码+AI如何破解数据孤岛难题
  • 微信小程序校园助手程序(源码+文档)
  • 搭建商城系统安全防护体系的核心要点与实施策略
  • Java 方法:从定义调用到重载,入门到面试全攻略
  • 基于腾讯云MCP广场服务Firecrawl MCP网络采集服务构建自动化竞品监测工作日志
  • ICCV-2025 | 清华动以知景导航框架!MTU3D:连接视觉定位与探索,实现高效多样的具身导航
  • 论文解读 | Franka 机器人沉浸式远程操作:高斯溅射 VR 赋能的遥操框架研发与应用
  • Linux-xargs-seq-tr-uniq-sort
  • C# FileInfo 类深度解析文件时间属性
  • 强化学习DQN解决Cart_Pole问题
  • Cursor 辅助开发:快速搭建 Flask + Vue 全栈 Demo 的实战记录
  • 【Spring Cloud Alibaba】Sentinel(一)
  • Java开发中的依赖环境管理
  • Ubuntu 使用 Samba 共享文件夹
  • HCIA备考:常见路由协议及特点
  • 【LeetCode热题100道笔记】缺失的第一个正数
  • List<?>和List<Object>区别
  • 【开题答辩全过程】以 基于微信小程序的宠物领养系统为例,包含答辩的问题和答案
  • 近期算法学习记录
  • UE4调试UAT时为何断点不了BuildCookRun的部分代码
  • MySQL 时间函数全解析:从 NOW() 到 UTC_TIMESTAMP() 的深度实践与选择策略
  • vscode launch.json 中使用 cmake tools 扩展的命令获取可执行文件目标文件名
  • Selenium 页面加载超时pageLoadTimeout与 iframe加载关系解析
  • 对话Michael Truell:23岁创立Cursor,与Github Copilot竞争