越野之路苹果版
488.5M · 2025-09-12
原本想分享一下MinIO
,因为之前搭建过,用起来相比FastDFS
要好太多。但是最新版本的MinIO
动了一些手脚,一时间掀起千层浪,引来万千网友的口诛笔伐。
我们来看看网友整理的时间线:
MinIO
官方宣布服务器协议切换到AGPL v3
的许可证Nutanix
违反开源协议weka
的软件使用许可证K8s Operator
中的集成控制台WebUI
的功能还依稀记得Redis
的协议切换导致网友的不满,其他类似的替代方案迅速崛起,直到Redis 8.0
原作者回归,坚持重新开源,这才消停。
而MinIO
为了将侧重点放在自己的付费产品上,在一定程度上在削弱开源产品的功能。使用者也纷纷担忧起来,很多都在寻找替代方案。
RustFS
则在此时迅速崛起,收到很多开发者的青睐。目前已经有8.1k
的star
了。
我们就一起看看RustFS
的庐山真面目吧!
RustFS
简介RustFS
是一个使用 Rust
(全球最受欢迎的编程语言之一)构建的高性能分布式对象存储软件。与 MinIO
一样,它具有简单性、S3 兼容性、开源特性以及对数据湖、AI 和大数据的支持等一系列优势。
此外,与其他存储系统相比,它采用 Apache
许可证构建,拥有更好、更用户友好的开源许可证。由于以 Rust
为基础,RustFS
为高性能对象存储提供了更快的速度和更安全的分布式功能。
官方地址:rustfs.com/zh/
GitHub地址:github.com/rustfs/rust…
官方也对比了和MinIO
的性能,大约是MinIO
的2倍。
支持多种部署方式
为了方便,我们直接使用容器部署。
# 拉取镜像
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_KEY
和RUSTFS_SECRET_KEY
使用管理页面登录的用户名和密码。默认就是rustfsadmin/rustfsadmin
,可以通过这两个参数修改。
直接访问IP + 端口
就可以进入后台管理页面。
使用配置的账号登录即可。
进入管理界面之后:
文件浏览器:
在这里可以功能创建存储的桶,以及管理桶内的文件。
策略
配置账号只读、只写等,还可以新建策略。
性能
整个存储空间的报告。
Java SDK
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>${latest.version}</version>
</dependency>
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();
}
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;
}
@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");
}
文件的查看需要使用其他客户端:
// 预览客户端,当然也可以直接用来上传,返回文件地址
S3Presigner presigner = S3Presigner.builder()
.endpointOverride(URI.create("http://10.10*0.2**13.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());
}
还有其他功能就不一一演示了,如分片上传,图片的删除等。
总体感觉MinIO
和RustFS
差不多,但是小编觉得MinIO
的API
用起来可能更舒服一些,可能是因为先入为主吧。在企业开发中软件的升级是慎之又慎的,不会频繁升级软件的,所以已经在用的老版MinIO
依然杠杠的。
现在各种云厂商都有自己的文件存储系统,使用云厂商的企业似乎不用操心这些问题。如果做MinIO
和RustFS
的选型,你会怎么选呢?