miniIO系列文章01---MinIO 簡介
1、什麼是物件儲存?
關於物件儲存,我們可以看下 阿里雲OSS 的解釋。
物件儲存服務OSS(Object Storage Service)是一種海量、安全、低成本、高可靠的雲端儲存服務,適合存放任意型別的檔案。容量和處理能力彈性擴充套件,多種儲存型別供選擇,全面優化儲存成本。
物件儲存最大的優勢就在於它可以儲存大容量的非結構化資料,例如圖片、視訊、日誌檔案、備份資料和容器/虛擬機器映象等。對於大多數的企業來說,這可以說是最為理想的儲存媒介了。
對於業務已在公有云上的企業來說,使用公有云提供的 OSS 服務,可以很好的節省儲存的成本,且一般都提供易接入的 SDK,以阿里雲的OSS 服務為例,在儲存介質的上層封裝可標註的 RESTful API 介面,使用起來十分方便。
但是對於一些沒有選擇業務上雲或者想要下雲的企業來說,要使用公有云的 OSS,在公網頻寬方面就需要有一定的投入,畢竟需要通過公網傳輸,頻寬太小,傳輸速度就會慢,且在傳輸過程中資料的安全性和完整性也有損失的風險,走專線的費用又十分昂貴,不實在。
這種情況下,MinIO 就是一個不錯的選擇,麻雀雖小,五臟俱全,企業可以以此快速構建自己內部的物件儲存服務。
2、什麼是 MinIO?
Minio 是個基於 Golang 編寫的開源物件儲存套件,基於Apache License v2.0開源協議,雖然輕量,卻擁有著不錯的效能。它相容亞馬遜S3雲端儲存服務介面。可以很簡單的和其他應用結合使用,例如 NodeJS、Redis、MySQL等。
1)MinIO 的應用場景
如下圖,MinIO 的應用場景除了可以作為私有云的物件儲存服務來使用,也可以作為雲物件儲存的閘道器層,無縫對接 Amazon S3
或者 MicroSoft Azure
。
MinIO 應用場景.png
2)特點
-
高效能:
作為一款高效能儲存,在標準硬體條件下,其讀寫速率分別可以達到55Gb/s
和35Gb/s
。並而 MinIO 支援一個物件檔案可以是任意大小,從幾kb到最大5T不等。 -
可擴充套件:
不同MinIO叢集可以組成聯邦,並形成一個全域性的名稱空間,並且支援跨越多個數據中心。 -
雲原生:
容器化、基於K8S的編排、多租戶支援。 -
Amazon S3相容:
使用 Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK 和 AWS CLI 訪問Minio伺服器。 -
可對接多種後端儲存:
除了Minio自己的檔案系統,還支援 DAS、 JBODs、NAS、Google雲端儲存和 Azure Blob儲存。 -
SDK支援:
-
JavaSDK: https://github.com/minio/minio-java
-
PythonSDK: https://github.com/minio/minio-py
-
Lambda計算:
Minio伺服器通過其相容AWS SNS / SQS的事件通知服務觸發Lambda功能。支援的目標是訊息佇列,如Kafka,NATS,AMQP,MQTT,Webhooks以及Elasticsearch,Redis,Postgres和MySQL等資料庫。 -
圖形化介面
有操作頁面。 -
功能簡單:
不容易出錯,快速啟動。 -
支援糾刪碼:
MinIO使用糾刪碼、Checksum來防止硬體錯誤和靜默資料汙染。在最高冗餘度配置下,即使丟失1/2的磁碟也能恢復資料。
3)儲存機制
Minio 使用糾刪碼 erasure code
和校驗和 checksum
。 即便丟失一半數量(N/2)的硬碟,仍然可以恢復資料。
校驗和
保護資料免受硬體故障和無聲資料損壞
糾刪碼
糾刪碼是一種恢復丟失和損壞資料的數學演算法,目前,糾刪碼技術在分散式儲存系統中的應用主要有三類,陣列糾刪碼(Array Code: RAID5、RAID6等)、RS(Reed-Solomon)裡德-所羅門類糾刪碼和LDPC(LowDensity Parity Check Code)低密度奇偶校驗糾刪碼。Erasure Code是一種編碼技術,它可以將n份原始資料,增加m份資料,並能通過n+m份中的任意n份資料,還原為原始資料。即如果有任意小於等於m份的資料失效,仍然能通過剩下的資料還原出來。
Minio採用Reed-Solomon code將物件拆分成N/2資料和N/2 奇偶校驗塊。 這就意味著如果是12塊盤,一個物件會被分成6個數據塊、6個奇偶校驗塊,可以丟失任意6塊盤(不管其是存放的資料塊還是奇偶校驗塊),仍可以從剩下的盤中的資料進行恢復。
RS code編碼資料恢復原理
RS編碼以word為編碼和解碼單位,大的資料塊拆分到字長為w(取值一般為8或者16位)的word,然後對word進行編解碼。 資料塊的編碼原理與word編碼原理相同,後文中以word為例說明,變數Di, Ci將代表一個word。
把輸入資料視為向量D=(D1,D2,..., Dn), 編碼後資料視為向量(D1, D2,..., Dn, C1, C2,.., Cm),RS編碼可視為如下(圖1)所示矩陣運算。
圖1最左邊是編碼矩陣(或稱為生成矩陣、分佈矩陣,Distribution Matrix),編碼矩陣需要滿足任意n*n子矩陣可逆。為方便資料儲存,編碼矩陣上部是單位陣(n行n列),下部是m行n列矩陣。下部矩陣可以選擇範德蒙德矩陣或柯西矩陣。
minio 儲存機制1.png
RS最多能容忍m個數據塊被刪除。 資料恢復的過程如下:
(1)假設D1、D4、C2丟失,從編碼矩陣中刪掉丟失的資料塊/編碼塊對應的行。(圖2、3)
(2)由於B' 是可逆的,記B'的逆矩陣為 (B'^-1),則B' * (B'^-1) = I 單位矩陣。兩邊左乘B' 逆矩陣。 (圖4、5)
(3)得到如下原始資料D的計算公式 。
minio 儲存機制2.png
(4)對D重新編碼,可得到丟失的編碼
參考文件:
https://www.jianshu.com/p/c2b43ff67df0
作者:獨奏亂序
連結:https://www.jianshu.com/p/f39e7255805b
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。