minio原理和使用


簡介

Minio 是一個基於Apache License v2.0開源協議的對象存儲服務。它兼容亞馬遜S3雲存儲服務接口,非常適合於存儲大容量非結構化的數據,例如圖片、視頻、日志文件、備份數據和容器/虛擬機鏡像等,而一個對象文件可以是任意大小,從幾kb到最大5T不等。
Minio是一個非常輕量的服務,可以很簡單的和其他應用的結合,類似 NodeJS, Redis 或者 MySQL。

應用場景

單主機單硬盤模式

單主機多硬盤模式

多主機多硬盤分布式

 

特點

  • 高性能:作為高性能對象存儲,在標准硬件條件下它能達到55GB/s的讀、35GG/s的寫速率
  • 可擴容:不同MinIO集群可以組成聯邦,並形成一個全局的命名空間,並跨越多個數據中心
  • 雲原生:容器化、基於K8S的編排、多租戶支持
  • Amazon S3兼容:Minio使用Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK和AWS CLI訪問Minio服務器。
  • 可對接后端存儲: 除了Minio自己的文件系統,還支持DAS、 JBODs、NAS、Google雲存儲和Azure Blob存儲。
  • SDK支持: 基於Minio輕量的特點,它得到類似Java、Python或Go等語言的sdk支持
  • Lambda計算: Minio服務器通過其兼容AWS SNS / SQS的事件通知服務觸發Lambda功能。支持的目標是消息隊列,如Kafka,NATS,AMQP,MQTT,Webhooks以及Elasticsearch,Redis,Postgres和MySQL等數據庫。
  • 有操作頁面
  • 功能簡單: 這一設計原則讓MinIO不容易出錯、更快啟動
  • 支持糾刪碼:MinIO使用糾刪碼、Checksum來防止硬件錯誤和靜默數據污染。在最高冗余度配置下,即使丟失1/2的磁盤也能恢復數據

存儲機制

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列矩陣。下部矩陣可以選擇范德蒙德矩陣或柯西矩陣。

 

RS最多能容忍m個數據塊被刪除。 數據恢復的過程如下:
(1)假設D1、D4、C2丟失,從編碼矩陣中刪掉丟失的數據塊/編碼塊對應的行。(圖2、3)
(2)由於B' 是可逆的,記B'的逆矩陣為 (B'^-1),則B' * (B'^-1) = I 單位矩陣。兩邊左乘B' 逆矩陣。 (圖4、5)
(3)得到如下原始數據D的計算公式 。

(4)對D重新編碼,可得到丟失的編碼




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM