從零搭建分散式文件系統MinIO比FastDFS要更合適

来源:https://www.cnblogs.com/yilezhu/archive/2020/05/05/12830123.html
-Advertisement-
Play Games

前兩天跟大家分享了一篇關於如何利用FastDFS組件來自建分散式文件系統的文章,有興趣的朋友可以閱讀下《 "用asp.net core結合fastdfs打造分散式文件存儲系統" 》。通過留言發現大家雖然感興趣,但是都覺得部署比較麻煩。的確,fastdfs的部署很繁瑣,而且也沒有官方提供的針對.net ...


前兩天跟大家分享了一篇關於如何利用FastDFS組件來自建分散式文件系統的文章,有興趣的朋友可以閱讀下《用asp.net core結合fastdfs打造分散式文件存儲系統》。通過留言發現大家雖然感興趣,但是都覺得部署比較麻煩。的確,fastdfs的部署很繁瑣,而且也沒有官方提供的針對.net core的sdk。而今天帶來的MinIO則是一個比fastdfs更好的選擇,可以讓你足夠簡單的來部署使用,官方也提供了足夠詳細的api文檔。下麵就讓我們開始今天的正文吧。

這裡說明下為什麼今天才進行分享,因為就在幾個小時前官方纔發佈了最新的3.1.12版本的nuget包,解決了BucketExistsAsync的一個bug,不然你還得引用源碼才能正常運行。

作者:依樂祝

原文地址:https://www.cnblogs.com/yilezhu/p/12830123.html

MinIO是什麼?

官方對MinIO的介紹是:高性能,Kubernetes原生支持的對象存儲系統。MinIO的高性能軟體定義對象存儲套件可以使用戶能夠為機器學習、分析和應用程式數據工作負載構建雲原生支持的數據基礎設施。下麵是幾個常用的網址

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網關,這一數字超過了業內其他公司的總和。

簡單並且功能非常強大

Simplicity

極簡主義是MinIO的一個指導性設計原則。簡單性減少了錯誤的機會,提高了正常運行時間,提供了可靠性,同時也為性能奠定了基礎。MinIO可以在幾分鐘內安裝和配置。配置選項和變數的數量保持在最低限度,這將導致幾乎為零的系統管理任務和更少的故障路徑。

如何安裝部署MinIO

官方提供了傻瓜式的UI頁面來讓你下載部署。下麵以windows系統為例來進行演示。

打開上面列出的幾個網址中的下載地址:

https://min.io/download#/windows

image-20200505113236045點擊右側的下載按鈕進行下載即可

然後設置一個文件存儲的路徑如:E:\MinIO\data

然後進入minio.exe所在的目錄,按住Shilft鍵然後點擊滑鼠右鍵打開powershell直接運行如下命令即可:

minio.exe server E:\MinIO\data

image-20200505113735303

看到如上所示的頁面說明MinIO就已經運行起來了,簡單吧!這時候你用瀏覽器打開

http://127.0.0.1:9000 即可看到如下的UI

image-20200505113920173

輸入上面顯示的Access Key 以及Secret Key登錄即可

image-20200505114013192

.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。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 面試題29. 順時針列印矩陣 與以下題目相同 前往:LeetC ...
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 54. 螺旋矩陣 題目 給定一個包含 m x n 個元素的矩陣 ...
  • AE : Concrete syntax AE : Abstract syntax parse : sexp AE interp : AE number ...
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 面試題28. 對稱的二叉樹 與以下題目相同 前往:LeetCo ...
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 101. 對稱二叉樹 題目 給定一個二叉樹,檢查它是否是鏡像對 ...
  • Blazor Blazor他是一個開源的Web框架,不,這不是重點,重點是它可以使c 開發在瀏覽器上運行Web應用程式.它其實也簡化了SPA的開發過程. Blazor = Browser + Razor 為什麼選擇Blazor? Blazor可以讓.NET附有全棧開發功能,它可以使Web開發變得輕鬆 ...
  • 在本文中將介紹如何通過thrift 組件集成到surging 微服務引擎中,然後可以選擇dotnetty 或thrift作為服務遠程調用RPC,也可以通過其它語言的thrift 調用surging 服務,下麵將簡單介紹如何使用thrift 準備工作 首先需要到官網下載Thrift compiler ...
  • 0. 前言 為什麼我們需要異常處理?什麼是異常? 在漢語中,異常指非正常的;不同於平常的。翻譯到程式中,就是指會導致程式無法按照既定邏輯運行的意外,或者說是錯誤。可能會有小伙伴好奇了,我們的程式不是正常的嗎,為什麼還會出錯呢? 我來舉幾個例子: 1. 程式需要訪問一個文件,但這個文件不存在,當程式嘗 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...