MinIO 是一個高效能、分散式物件儲存系統。它是軟體定義的,在業界標準硬體上執行,並且 100% 開源,主要許可證為 GNU AGPL v3。
MinIO 的不同之處在於,它從一開始就被設計為私有/混合雲物件儲存的標準。由於 MinIO 的設計宗旨僅服務於物件,因此單層架構在不影響效能的情況下實現了所有必要的功能。結果是一個雲原生物件伺服器,同時具有效能、可擴展性和輕量級的特性。
雖然 MinIO 在傳統物件儲存用例(如二級儲存、災難復原和歸檔)方面表現出色,但它在克服與機器學習、分析和雲原生應用程式工作負載相關的挑戰方面是獨一無二的。
MinIO 的企業級功能代表了物件儲存領域的標準。從 AWS S3 API 到 S3 Select 以及我們對內聯糾刪碼和安全性的實施,我們的程式碼廣受讚賞,並經常被一些科技和商業巨頭複製。
MinIO 使用以組語程式碼編寫的單物件內聯糾刪碼來保護資料,以提供最高的效能。MinIO 使用 Reed-Solomon 程式碼將物件條帶化為資料區塊和同位區塊,並具有使用者可設定的冗餘等級。MinIO 的糾刪碼在物件層級執行修復,並且可以獨立修復多個物件。
在 N/2 的最大同位時,MinIO 的實作可以確保在部署中只有 ((N/2)+1) 個可運作的磁碟機的情況下不間斷地讀取和寫入操作。例如,在 12 個磁碟機的設定中,MinIO 會將物件分散到 6 個資料和 6 個同位磁碟機,並且可以可靠地寫入新物件或使用部署中僅剩餘 7 個磁碟機的情況下重建現有物件
靜默資料損壞或位元衰減是磁碟機面臨的嚴重問題,導致資料在使用者不知情的情況下損壞。原因有很多(磁碟機老化、電流尖峰、磁碟韌體中的錯誤、虛幻寫入、誤導讀取/寫入、驅動程式錯誤、意外覆寫),但結果是一樣的 - 資料損壞。
MinIO 對 HighwayHash 演算法的優化實作可確保它永遠不會讀取損壞的資料 - 它可以動態捕獲和修復損壞的物件。透過從應用程式、跨網路到記憶體/磁碟機,在 READ 上計算雜湊並在 WRITE 上驗證雜湊,從頭到尾確保完整性。該實作旨在提高速度,並且可以在 Intel CPU 單個核心上實現超過 10 GB/秒的雜湊速度。
加密傳輸中的資料是一回事;保護靜態資料又是另一回事。MinIO 支援多種複雜的伺服器端加密方案來保護資料 - 無論資料在哪裡。MinIO 的方法以可忽略不計的效能開銷確保機密性、完整性和真實性。支援使用 AES-256-GCM、ChaCha20-Poly1305 和 AES-CBC 的伺服器端和用戶端加密。
加密的物件使用 AEAD 伺服器端加密進行防篡改。此外,MinIO 與所有常用的金鑰管理解決方案(例如 HashiCorp Vault)相容,並經過測試。MinIO 使用金鑰管理系統 (KMS) 來支援 SSE-S3。
如果用戶端請求 SSE-S3,或啟用了自動加密,則 MinIO 伺服器會使用由 KMS 管理的主金鑰保護的唯一物件金鑰來加密每個物件。考慮到極低的開銷,可以為每個應用程式和執行個體開啟自動加密。
啟用 WORM 後,MinIO 會停用所有可能變更物件資料和中繼資料的 API。這意味著一旦寫入的資料將變得防篡改。這對於許多不同的法規要求都有實際應用。
MinIO 支援最先進的身分管理標準,與 OpenID Connect 相容的供應商以及主要的外部 IDP 供應商整合。這意味著存取是集中式的,密碼是臨時的且輪換的,而不是儲存在組態檔案和資料庫中。此外,存取原則是精細且高度可設定的,這意味著支援多租戶和多執行個體部署變得簡單。
傳統複製方法面臨的挑戰是,它們無法有效地擴展到數百 TiB 以上。話雖如此,每個人都需要一個複製策略來支援災難復原,並且該策略需要跨越地理位置、資料中心和雲端。
MinIO 的持續複製是為大規模、跨資料中心部署而設計的。透過利用 Lambda 計算通知和物件中繼資料,它可以高效快速地計算增量。Lambda 通知可確保變更立即傳播,而不是傳統的批次模式。
持續複製意味著,即使面對高度動態的資料集,也能將故障發生時的資料遺失降至最低。最後,如同 MinIO 的所有功能一樣,持續複製是多供應商的,這表示您的備份位置可以是從 NAS 到公有雲的任何地方。
現代企業的資料遍佈各地。MinIO 允許將這些不同的實例組合起來,形成一個統一的全球命名空間。具體來說,可以將任意數量的 MinIO 伺服器組合成一個分散式模式集合,並且可以將多個分散式模式集合組合成一個 MinIO 伺服器聯邦。每個 MinIO 伺服器聯邦都提供統一的管理和命名空間。
一個 MinIO 聯邦伺服器支援無限數量的分散式模式集合。這種方法的影響是,物件儲存可以大規模擴展,以適應大型、地理分散的企業,同時還能從單一控制台容納各種應用程式(Splunk、Teradata、Spark、Hive、Presto、TensorFlow、H20)。
所有企業都在採用多雲策略。這也包括私有雲。因此,您的裸機虛擬化容器和公有雲服務(包括 Google、Microsoft 和 Alibaba 等非 S3 提供商)必須看起來完全相同。雖然現代應用程式具有高度可攜性,但為這些應用程式提供動力的資料卻不是。
使這些資料無論位於何處都可存取,是 MinIO 解決的主要挑戰。MinIO 可在裸機、網路附加儲存和每個公有雲上運行。更重要的是,MinIO 透過 Amazon S3 API 確保您從應用程式和管理角度看到的資料看起來完全相同。
MinIO 甚至可以更進一步,使您現有的儲存基礎設施與 Amazon S3 相容。其影響是深遠的。現在,組織可以真正統一他們的資料基礎設施 - 從檔案到區塊,全部都以物件的形式出現,並透過 Amazon S3 API 存取,而無需遷移。
MinIO 設計為雲原生,可以作為輕量級容器運行,並由 Kubernetes 等外部協調服務管理。整個伺服器是一個約 40 MB 的靜態二進位檔案,並且即使在高負載下,其 CPU 和記憶體資源的使用效率也非常高。結果是您可以在共享硬體上共同託管大量租戶。
MinIO 在具有本地連接硬碟(JBOD/JBOF)的商品伺服器上運行。叢集中的所有伺服器功能都相同(完全對稱的架構)。沒有名稱節點或元數據伺服器。
MinIO 將資料和元數據作為物件一起寫入,無需元數據資料庫。此外,MinIO 將所有功能(擦除碼、位元腐敗檢查、加密)作為內聯、嚴格一致的操作執行。結果是 MinIO 非常有彈性。
每個 MinIO 叢集都是分散式 MinIO 伺服器的集合,每個節點一個進程。MinIO 作為單一進程在用戶空間中運行,並使用輕量級協程實現高並發性。硬碟被分組到擦除集合中(預設每個集合 16 個硬碟),並且使用確定性雜湊演算法將物件放置在這些集合上。
MinIO 專為大規模、多資料中心雲儲存服務而設計。每個租戶都運行自己的 MinIO 叢集,與其他租戶完全隔離,使他們能夠保護自己免受升級、更新、安全事件中的任何干擾。每個租戶都可以透過跨地理位置聯合叢集來獨立擴展。