前兩天跟你們分享了一篇關於如何利用FastDFS組件來自建分佈式文件系統的文章,有興趣的朋友能夠閱讀下《用asp.net core結合fastdfs打造分佈式文件存儲系統》。經過留言發現你們雖然感興趣,可是都以爲部署比較麻煩。的確,fastdfs的部署很繁瑣,並且也沒有官方提供的針對.net core的sdk。而今天帶來的MinIO則是一個比fastdfs更好的選擇,可讓你足夠簡單的來部署使用,官方也提供了足夠詳細的api文檔。下面就讓咱們開始今天的正文吧。html
這裏說明下爲何今天才進行分享,由於就在幾個小時前官方纔發佈了最新的3.1.12版本的nuget包,解決了BucketExistsAsync
的一個bug,否則你還得引用源碼才能正常運行。git
做者:依樂祝github
官方對MinIO的介紹是:高性能,Kubernetes原生支持的對象存儲系統。MinIO的高性能軟件定義對象存儲套件可使用戶可以爲機器學習、分析和應用程序數據工做負載構建雲原生支持的數據基礎設施。下面是幾個經常使用的網址shell
MinIO對象存儲與其餘有本質的不一樣。它是爲性能和S3 API而設計的並100%開源。MinIO很是適合具備嚴格安全性,在不一樣的工做負載範圍內要求並提供關鍵任務可用性的大型私有云環境。c#
MinIO是世界上速度最快的對象存儲服務器。在標準硬件上,對象存儲的讀/寫速度分別爲183 GB/s和171 GB/s,能夠做爲一組不一樣工做負載的主存儲層,這些工做負載包括Spark、Presto、TensorFlow、H2O.ai以及Hadoop HDFS的替代品。windows
MinIO利用了web定標器來之不易的知識,爲對象存儲帶來了一個簡單的定標器模型。在MinIO,擴展從一個集羣開始,這個集羣能夠與其餘MinIO集羣聯合以建立一個全局命名空間,若是須要,能夠跨越多個數據中心。這也是《財富》500強中超過一半的人使用MinIO的緣由之一。api
MinIO是在過去四年中從頭開始構建的,是定義雲的技術和架構的原生版本。其中包括集裝箱化、與Kubernetes的協調、微服務和多租戶。沒有比Kubernetes更友好的對象存儲了。瀏覽器
MinIO在Apache V2許可和Affero通用公共許可版本3(AGPLv3)下是100%開源的。這意味着MinIO的客戶能夠自由鎖定、自由檢查、自由創新、自由修改和自由從新分配。其部署的多樣性使該軟件變得更增強大,這是專有軟件永遠沒法提供的。安全
Amazon的S3 API是對象存儲領域的事實標準。MinIO是S3兼容性的事實上的標準,是第一個採用API和第一個添加對S3 Select支持的標準之一。包括微軟Azure在內的750多家公司使用MinIO的S3網關,這一數字超過了業內其餘公司的總和。
極簡主義是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登陸便可
這一小節咱們就結合咱們以前開發的文件存儲微服務來寫一個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。