體驗.NET與文件存儲服務MinIO

對象文件存儲服務(OSS)主要用於存儲零散的文件,和直接存儲到本地文件系統中相比,有以下的幾個優勢:

  1. 跨服務器可用
  2. 兼容Amazon S3 API
  3. 橫向擴容
  4. 高可用
  5. 支持加密

MinIO就是一個高性能的文件服務,我們使用.NET來操作一下。

部署MinIO

最簡單的辦法,就是在Docker上運行MinIO。可以使用以下命令啓動MinIO:

docker run -p 9000:9000 -p 9001:9001 --name minio \
-e "MINIO_ACCESS_KEY=<your-access-key>" \
-e "MINIO_SECRET_KEY=<your-secret-key>" \
minio/minio server /data --console-address ":9001"

其中,<your-access-key><your-secret-key>需要替換爲自己的訪問密鑰和祕密密鑰。

.NET操作

需要先安裝MinIO的包,直接nuget安裝即可:

install-package minio

導入Minio命名空間,並創建一個MinioClient對象。

using Minio;

var endpoint = "localhost:9000";
var accessKey = "<your-access-key>";
var secretKey = "<your-secret-key>";

var minio = new MinioClient minio = new MinioClient()
                                .WithEndpoint("endpoint")
                                .WithCredentials("accessKey", "secretKey")
                                .Build();

連接到MinIO服務器並執行一些基本操作。列出存儲桶:

var buckets = await minio.ListBucketsAsync();
foreach (var bucket in buckets)
{
    Console.WriteLine(bucket.Name + " " + bucket.CreationDateDateTime);
}

創建一個新的存儲桶:

var args = new MakeBucketArgs().WithBucket(bucketName).WithLocation(loc);
await minio.MakeBucketAsync(args);

上傳一個文件:

PutObjectArgs args = new PutObjectArgs().WithBucket(bucketName)
                            .WithFileName(fileName).WithObject(objectName);
await minio.PutObjectAsync(args);

下載文件:

var args = new GetObjectArgs().WithBucket(bucketName).WithObject(objectName)
                            .WithFile(fileName);
await minio.GetObjectAsync(args);

性能測試

經過測試,在本機運行docker的情況下,上傳8M的文件,本地運行,上傳0.6s,下載0.4s。1.G的文件,上傳14s,下載9s。常用網絡交換的文件一般不會太大,性能還可以。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章