1醇份、什么是對(duì)象存儲(chǔ)?
關(guān)于對(duì)象存儲(chǔ)叁丧,我們可以看下 阿里云OSS 的解釋秃励。
對(duì)象存儲(chǔ)服務(wù)OSS(Object Storage Service)是一種海量呜象、安全、低成本、高可靠的云存儲(chǔ)服務(wù)精肃,適合存放任意類型的文件化借。容量和處理能力彈性擴(kuò)展潜慎,多種存儲(chǔ)類型供選擇,全面優(yōu)化存儲(chǔ)成本蓖康。
對(duì)象存儲(chǔ)最大的優(yōu)勢(shì)就在于它可以存儲(chǔ)大容量的非結(jié)構(gòu)化數(shù)據(jù)铐炫,例如圖片、視頻蒜焊、日志文件倒信、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等。對(duì)于大多數(shù)的企業(yè)來(lái)說(shuō)泳梆,這可以說(shuō)是最為理想的存儲(chǔ)媒介了鳖悠。
對(duì)于業(yè)務(wù)已在公有云上的企業(yè)來(lái)說(shuō)榜掌,使用公有云提供的 OSS 服務(wù),可以很好的節(jié)省存儲(chǔ)的成本乘综,且一般都提供易接入的 SDK憎账,以阿里云的OSS 服務(wù)為例,在存儲(chǔ)介質(zhì)的上層封裝可標(biāo)注的 RESTful API 接口卡辰,使用起來(lái)十分方便胞皱。
但是對(duì)于一些沒(méi)有選擇業(yè)務(wù)上云或者想要下云的企業(yè)來(lái)說(shuō),要使用公有云的 OSS九妈,在公網(wǎng)帶寬方面就需要有一定的投入反砌,畢竟需要通過(guò)公網(wǎng)傳輸,帶寬太小允蚣,傳輸速度就會(huì)慢于颖,且在傳輸過(guò)程中數(shù)據(jù)的安全性和完整性也有損失的風(fēng)險(xiǎn),走專線的費(fèi)用又十分昂貴嚷兔,不實(shí)在森渐。
這種情況下,MinIO 就是一個(gè)不錯(cuò)的選擇冒晰,麻雀雖小同衣,五臟俱全,企業(yè)可以以此快速構(gòu)建自己內(nèi)部的對(duì)象存儲(chǔ)服務(wù)壶运。
2耐齐、什么是 MinIO?
Minio 是個(gè)基于 Golang 編寫(xiě)的開(kāi)源對(duì)象存儲(chǔ)套件蒋情,基于Apache License v2.0開(kāi)源協(xié)議埠况,雖然輕量,卻擁有著不錯(cuò)的性能棵癣。它兼容亞馬遜S3云存儲(chǔ)服務(wù)接口辕翰。可以很簡(jiǎn)單的和其他應(yīng)用結(jié)合使用狈谊,例如 NodeJS喜命、Redis、MySQL等河劝。
1)MinIO 的應(yīng)用場(chǎng)景
如下圖壁榕,MinIO 的應(yīng)用場(chǎng)景除了可以作為私有云的對(duì)象存儲(chǔ)服務(wù)來(lái)使用,也可以作為云對(duì)象存儲(chǔ)的網(wǎng)關(guān)層赎瞎,無(wú)縫對(duì)接 Amazon S3
或者 MicroSoft Azure
牌里。
2)特點(diǎn)
高性能:
作為一款高性能存儲(chǔ),在標(biāo)準(zhǔn)硬件條件下务甥,其讀寫(xiě)速率分別可以達(dá)到55Gb/s
和35Gb/s
二庵。并而 MinIO 支持一個(gè)對(duì)象文件可以是任意大小贪染,從幾kb到最大5T不等。可擴(kuò)展:
不同MinIO集群可以組成聯(lián)邦催享,并形成一個(gè)全局的命名空間杭隙,并且支持跨越多個(gè)數(shù)據(jù)中心。云原生:
容器化因妙、基于K8S的編排痰憎、多租戶支持。Amazon S3兼容:
使用 Amazon S3 v2 / v4 API攀涵∠吃牛可以使用Minio SDK,Minio Client以故,AWS SDK 和 AWS CLI 訪問(wèn)Minio服務(wù)器蜗细。可對(duì)接多種后端存儲(chǔ):
除了Minio自己的文件系統(tǒng),還支持 DAS怒详、 JBODs炉媒、NAS、Google云存儲(chǔ)和 Azure Blob存儲(chǔ)昆烁。-
SDK支持:
JavaSDK: https://github.com/minio/minio-java
PythonSDK: https://github.com/minio/minio-py
Lambda計(jì)算:
Minio服務(wù)器通過(guò)其兼容AWS SNS / SQS的事件通知服務(wù)觸發(fā)Lambda功能吊骤。支持的目標(biāo)是消息隊(duì)列,如Kafka静尼,NATS白粉,AMQP,MQTT鼠渺,Webhooks以及Elasticsearch鸭巴,Redis,Postgres和MySQL等數(shù)據(jù)庫(kù)拦盹。圖形化界面
有操作頁(yè)面鹃祖。功能簡(jiǎn)單:
不容易出錯(cuò),快速啟動(dòng)掌敬。支持糾刪碼:
MinIO使用糾刪碼、Checksum來(lái)防止硬件錯(cuò)誤和靜默數(shù)據(jù)污染池磁。在最高冗余度配置下奔害,即使丟失1/2的磁盤(pán)也能恢復(fù)數(shù)據(jù)。
3)存儲(chǔ)機(jī)制
Minio 使用糾刪碼 erasure code
和校驗(yàn)和 checksum
地熄。 即便丟失一半數(shù)量(N/2)的硬盤(pán)华临,仍然可以恢復(fù)數(shù)據(jù)。
校驗(yàn)和
保護(hù)數(shù)據(jù)免受硬件故障和無(wú)聲數(shù)據(jù)損壞
糾刪碼
糾刪碼是一種恢復(fù)丟失和損壞數(shù)據(jù)的數(shù)學(xué)算法端考,目前雅潭,糾刪碼技術(shù)在分布式存儲(chǔ)系統(tǒng)中的應(yīng)用主要有三類揭厚,陣列糾刪碼(Array Code: RAID5、RAID6等)扶供、RS(Reed-Solomon)里德-所羅門(mén)類糾刪碼和LDPC(LowDensity Parity Check Code)低密度奇偶校驗(yàn)糾刪碼筛圆。Erasure Code是一種編碼技術(shù),它可以將n份原始數(shù)據(jù)椿浓,增加m份數(shù)據(jù)太援,并能通過(guò)n+m份中的任意n份數(shù)據(jù),還原為原始數(shù)據(jù)扳碍。即如果有任意小于等于m份的數(shù)據(jù)失效提岔,仍然能通過(guò)剩下的數(shù)據(jù)還原出來(lái)。
Minio采用Reed-Solomon code將對(duì)象拆分成N/2數(shù)據(jù)和N/2 奇偶校驗(yàn)塊笋敞。 這就意味著如果是12塊盤(pán)碱蒙,一個(gè)對(duì)象會(huì)被分成6個(gè)數(shù)據(jù)塊、6個(gè)奇偶校驗(yàn)塊夯巷,可以丟失任意6塊盤(pán)(不管其是存放的數(shù)據(jù)塊還是奇偶校驗(yàn)塊)赛惩,仍可以從剩下的盤(pán)中的數(shù)據(jù)進(jìn)行恢復(fù)。
RS code編碼數(shù)據(jù)恢復(fù)原理
RS編碼以word為編碼和解碼單位鞭莽,大的數(shù)據(jù)塊拆分到字長(zhǎng)為w(取值一般為8或者16位)的word坊秸,然后對(duì)word進(jìn)行編解碼。 數(shù)據(jù)塊的編碼原理與word編碼原理相同澎怒,后文中以word為例說(shuō)明褒搔,變量Di, Ci將代表一個(gè)word。
把輸入數(shù)據(jù)視為向量D=(D1喷面,D2星瘾,..., Dn), 編碼后數(shù)據(jù)視為向量(D1, D2,..., Dn, C1, C2,.., Cm),RS編碼可視為如下(圖1)所示矩陣運(yùn)算惧辈。
圖1最左邊是編碼矩陣(或稱為生成矩陣琳状、分布矩陣,Distribution Matrix)盒齿,編碼矩陣需要滿足任意n*n子矩陣可逆念逞。為方便數(shù)據(jù)存儲(chǔ),編碼矩陣上部是單位陣(n行n列)边翁,下部是m行n列矩陣翎承。下部矩陣可以選擇范德蒙德矩陣或柯西矩陣。
RS最多能容忍m個(gè)數(shù)據(jù)塊被刪除符匾。 數(shù)據(jù)恢復(fù)的過(guò)程如下:
(1)假設(shè)D1叨咖、D4、C2丟失,從編碼矩陣中刪掉丟失的數(shù)據(jù)塊/編碼塊對(duì)應(yīng)的行甸各。(圖2垛贤、3)
(2)由于B' 是可逆的,記B'的逆矩陣為 (B'^-1)趣倾,則B' * (B'^-1) = I 單位矩陣聘惦。兩邊左乘B' 逆矩陣。 (圖4誊酌、5)
(3)得到如下原始數(shù)據(jù)D的計(jì)算公式 部凑。
(4)對(duì)D重新編碼,可得到丟失的編碼