之前實習時剛好公司有需要實作MinIO相關自動化腳本的需求,算是把MinIO摸得蠻仔細的,剛好網路上沒有太多相關中文資訊,趁這個機會來介紹一下MinIO,若有興趣就歡迎看下去吧~
MinIO是什麼?
MinIO是一個使用Golang開發的雲端儲存的開源專案,專注於儲存大量的非結構化的數據,如圖片、影片、文字等任何非結構化的數據,類似於AWS S3的開源版本,可以在影像辨識、NLP模型的訓練及重新部署等情境發揮作用。
MinIO的元件
MinIO最主要的元件共有兩個,分別為Bucket和Object,Object為任一種非結構化數據在MinIO的資料結構,而Bucket則是儲存Object的空間,以實際應用為例,如貓狗辨識專案即可建立一個名為貓狗辨識的Bucket、信用卡號辨識專案即可建立一個名為信用卡號辨識的Bucket(如下圖),Bucket和Object有點類似資料夾和資料夾內存的檔案的關係。
MinIO的資源管理
由於MinIO算是一個檔案管理的工具,因此最重要的就是資源管理,這邊會介紹幾個MinIO提供跟資源管理相關的主要功能。
1. Bucket的容量上限(Quota)
由於伺服器會有容量限制,因此管理者可以幫每個專案使用的Bucket設定容量上限(Quota),藉此限制每個專案能使用的資源,若沒有進行限制,MinIO會預設為無上限的容量。
2. 生命週期(LifeCycle)
由於Bucket內可以再設新增子路徑,因此可以幫每個Bucket內的子路徑下的檔案設定回收的機制,以剛剛貓狗辨識專案為例,假設總共7/1、7/2、7/3三個時間各自上傳了100張圖片,即可將檔案分別放到(貓狗辨識/0701、貓狗辨識/0702、貓狗辨識/0703)三個路徑下,如果希望圖片都不存放超過10天,即可幫這三個路徑各自設定自動回收的天數,三個路徑下的圖片就會分別於7/11、7/12、7/13進行刪除。
3.超過上限的處理方式(FIFO, HARD)
由於前面提到每個Bucket有Quota的限制,因此當上傳檔案超過Qutoa的限制時,MinIO提供兩種處理方式,分別是FIFO和HARD,FIFO代表的就是First-In-First-Out,也就是會自動把最舊的檔案移除,讓新的檔案放入Bucket,但FIFO已於(2022.02.02後的版本)因效能問題被移除,因此只有使用舊的版本時能使用;而HARD的處理方式則是直接禁止新的檔案進行上傳。
MinIO的權限管理
除了資源管理外,另一個重要功能就是權限管理,特別是在公司內部運用時,哪個小組可以上傳、刪除或取得哪個Bucket的檔案,都是需要被管理的,接下來我們就來介紹吧。
1. 權限種類(Policy)
首先第一個就是權限種類(Policy),相對於RDMS使用的GET、Create、DELETE等方法,在MinIO最常見的元件是Bucket和Object,因此就會有GetObject、DeleteBucket等Policy,詳細的Policy種類可以查看Docs。
由於一位User通常會需要多個權限,會需要權限組合因此會使用一個JSON檔案去定義權限組合,如下圖就代表擁有這個Policy的User可以對bucket2下面所有的資源做Action裡面的權限(GetBucketLocation….)
2.群組和使用者(Group and User)
在一般公司最常運用的方式就是某個部門、小組的人同時擁有某個權限組合,在MinIO也提供這種功能,如下圖範例可以定義好如上圖的權限組合(Bucket1 Read Write Policy)和(Bucket1 Read Only Policy)後,可以分別Assign給群組或個人權限,當Assign給群組權限(Group1)時,群組底下的User(Kelly、Amy)就會自動獲得所屬群組的權限。
以上就是MinIO的最基礎的幾個概念介紹,希望能幫從0開始的新手們了解MinIO最基礎的概念,希望對你有幫助。若還有其他想問的或希望我介紹的,可以用FB私訊或在下面回應,我會盡我所能回答你喔~
之後反應不錯的話,我會再撰寫關於應用和如何用程式實作的範例文章,若有錯誤或不周延的地方,再請各位大神指教、糾正了,謝謝大家~
若覺得有幫助可以追蹤我、按喜歡、收藏,我就會寫出更多相關文章,謝謝你~
若還有其他想問的或希望我介紹的,可以用FB私訊或在下面回應,我會盡我所能回答
你可能還會想看: