前兩天跟大家分享了一篇關於如何利用FastDFS組件來自建分布式文件系統的文章,有興趣的朋友可以閱讀下《用asp.net core結合fastdfs打造分布式文件存儲系統》。通過留言發現大家雖然感興趣,但是都覺得部署比較麻煩。的確,fastdfs的部署很繁瑣,而且也沒有官方提供的針對.net core的sdk。而今天帶來的MinIO則是一個比fastdfs更好的選擇,可以讓你足夠簡單的來部署使用,官方也提供了足夠詳細的api文檔。下面就讓我們開始今天的正文吧。
這里說明下為什么今天才進行分享,因為就在幾個小時前官方才發布了最新的3.1.12版本的nuget包,解決了BucketExistsAsync
的一個bug,不然你還得引用源碼才能正常運行。
作者:依樂祝
MinIO是什么?
官方對MinIO的介紹是:高性能,Kubernetes原生支持的對象存儲系統。MinIO的高性能軟件定義對象存儲套件可以使用戶能夠為機器學習、分析和應用程序數據工作負載構建雲原生支持的數據基礎設施。下面是幾個常用的網址
- 官網:https://min.io/
- 開源地址:https://github.com/minio/
- 中文文檔:https://docs.min.io/cn/
- .NET 客戶端api地址:https://docs.min.io/cn/dotnet-client-api-reference.html
- 下載地址:https://min.io/download#/windows
- minio-dotnet:https://github.com/minio/minio-dotnet
MinIO對象存儲與其他有本質的不同。它是為性能和S3 API而設計的並100%開源。MinIO非常適合具有嚴格安全性,在不同的工作負載范圍內要求並提供關鍵任務可用性的大型私有雲環境。
MinIO是高性能對象存儲的先驅
MinIO是世界上速度最快的對象存儲服務器。在標准硬件上,對象存儲的讀/寫速度分別為183 GB/s和171 GB/s,可以作為一組不同工作負載的主存儲層,這些工作負載包括Spark、Presto、TensorFlow、H2O.ai以及Hadoop HDFS的替代品。
建立在web規模的規則之上
MinIO利用了web定標器來之不易的知識,為對象存儲帶來了一個簡單的定標器模型。在MinIO,擴展從一個集群開始,這個集群可以與其他MinIO集群聯合以創建一個全局命名空間,如果需要,可以跨越多個數據中心。這也是《財富》500強中超過一半的人使用MinIO的原因之一。
為雲而生
MinIO是在過去四年中從頭開始構建的,是定義雲的技術和架構的原生版本。其中包括集裝箱化、與Kubernetes的協調、微服務和多租戶。沒有比Kubernetes更友好的對象存儲了。
排名第一的開源對象存儲服務,對企業友好
MinIO在Apache V2許可和Affero通用公共許可版本3(AGPLv3)下是100%開源的。這意味着MinIO的客戶可以自由鎖定、自由檢查、自由創新、自由修改和自由重新分配。其部署的多樣性使該軟件變得更加強大,這是專有軟件永遠無法提供的。
亞馬遜S3兼容性的事實標准
Amazon的S3 API是對象存儲領域的事實標准。MinIO是S3兼容性的事實上的標准,是第一個采用API和第一個添加對S3 Select支持的標准之一。包括微軟Azure在內的750多家公司使用MinIO的S3網關,這一數字超過了業內其他公司的總和。
簡單並且功能非常強大
極簡主義是MinIO的一個指導性設計原則。簡單性減少了錯誤的機會,提高了正常運行時間,提供了可靠性,同時也為性能奠定了基礎。MinIO可以在幾分鍾內安裝和配置。配置選項和變量的數量保持在最低限度,這將導致幾乎為零的系統管理任務和更少的故障路徑。
如何安裝部署MinIO
官方提供了傻瓜式的UI頁面來讓你下載部署。下面以windows系統為例來進行演示。
打開上面列出的幾個網址中的下載地址:
https://min.io/download#/windows
點擊右側的下載按鈕進行下載即可
然后設置一個文件存儲的路徑如:E:\MinIO\data
然后進入minio.exe所在的目錄,按住Shilft鍵然后點擊鼠標右鍵打開powershell直接運行如下命令即可:
minio.exe server E:\MinIO\data
看到如上所示的頁面說明MinIO就已經運行起來了,簡單吧!這時候你用瀏覽器打開
http://127.0.0.1:9000 即可看到如下的UI
輸入上面顯示的Access Key 以及Secret Key登錄即可
.NET Core集成
這一小節我們就結合我們之前開發的文件存儲微服務來寫一個MinIO的Provider來支持MinIO的文件上傳與下載吧。
這里我只是簡單的演示下,所以就用官方提供的實例代碼繼續演示了。
首先引入nuget包,注意就在寫這篇文章前幾個小時官方才發布了最新的3.1.12版本的nuget包,解決了BucketExistsAsync
的一個bug,所以今天才進行這篇文章的分享。
Install-Package Minio
然后構建MinioClient
var endpoint = "127.0.0.1:9000";
var accessKey = "minioadmin";
var secretKey = "minioadmin";
try
{
var minio = new MinioClient(endpoint, accessKey, secretKey).WithSSL();
FileUpload.Run(minio).Wait();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
上傳的代碼如下:
private async static Task Run(MinioClient minio)
{
var bucketName = "mymusic";
var location = "us-east-1";
var objectName = "golden-oldies.zip";
var filePath = "C:\\Users\\username\\Downloads\\golden_oldies.mp3";
var contentType = "application/zip";
try
{
// Make a bucket on the server, if not already present.
bool found = await minio.BucketExistsAsync(bucketName);
if (!found)
{
await minio.MakeBucketAsync(bucketName, location);
}
// Upload a file to bucket.
await minio.PutObjectAsync(bucketName, objectName, filePath, contentType);
Console.WriteLine("Successfully uploaded " + objectName );
}
catch (MinioException e)
{
Console.WriteLine("File Upload Error: {0}", e.Message);
}
}
是不是很簡單。關於更多api的使用可以查看如下的文檔:
這是中文的api文檔哦,所以就不說太多了
https://docs.min.io/cn/dotnet-client-api-reference.html
總結
今天跟大家介紹了另一個而且是更好用的分布式文件存儲系統,看了MinIO的資料后毫不猶豫的選擇了它,然后就無情的把FastDFS給丟棄了。如果你也有構建分布式文件系統的需求不妨關注下這個MinIO。