聊聊越來越火的對象存儲

飛雪無情
對象存儲的非結(jié)構(gòu)化數(shù)據(jù),會被分片成一個個對象,存儲在不同的存儲節(jié)點上,這也是叫對象存儲的原因,它不想文件存儲是以文件和文件夾方式,塊存儲是以數(shù)據(jù)塊的方式。

隨著云計算的發(fā)展,云存儲作為一種更基礎的云上資源池設施也越來越受到重視和歡迎。從云存儲的類型來講,目前流行的有塊存儲、文件存儲和對象存儲三種。今天的主角是對象存儲,不過我們在介紹對象存儲之前,先來了解下另外兩種存儲,做個對比,這樣才能更好的了解對象存儲。

塊存儲是什么?

對于這些概念網(wǎng)上我們可以找到很多,但是看著覺得太專業(yè),云里霧里。在這里我以更通俗的方式來介紹什么是塊存儲。

首先我們要明白一個關(guān)鍵,塊存儲的直接使用者不是我們?nèi)祟悾俏募到y(tǒng)。更簡單的說塊存儲可以理解為一塊硬盤,就是這么簡單。至于這塊硬盤是單獨的物理盤,還是采用磁盤陣列技術(shù)組成的陣列,文件系統(tǒng)是不關(guān)心的,它?知道有幾個盤,至于是邏輯的還是物理的,它完全不關(guān)心(其實也管不著)。

我們常見的文件(數(shù)據(jù))是以固定大小的塊存放在塊存儲中的,根據(jù)文件大小的不同,可以分成很多個塊,當我們讀取這個文件的時候,底層的存儲系統(tǒng)會將多個數(shù)據(jù)塊合并一起,就成了一個我們需要的文件。

一個塊存儲,需要格式化(選擇文件系統(tǒng)的過程)才能被使用。比如你在騰訊云上買了一個40G的SSD云盤,這個云盤就是一個塊存儲,你需要掛載到云主機上,然后選擇合適的文件系統(tǒng)進行格式化,然后才能使用。

塊存儲支持隨機讀寫,一般用于特定業(yè)務的數(shù)據(jù)存儲,不過他不支持共享。

文件存儲是什么?

文件存儲我們最常見了,就是我們電腦上的文件,經(jīng)常接觸。他們是以文件、文件夾的方式組織的,有層次結(jié)構(gòu)。通過FTP、SMB可以進行共享,供多個用戶同時訪問。

文件存儲的元數(shù)據(jù)信息是放在文件里的,存儲有限,并且層次結(jié)構(gòu)也限制著性能。

終于來到了對象存儲

雖然塊存儲和文件存儲可以滿足大多數(shù)需求,但是它們還有個局限性就是不適合公有云存儲,它們一般是用于局域網(wǎng)內(nèi)使用。

對象存儲,一種以對象為基本單位的存儲,它的結(jié)構(gòu)是扁平的,甚至可以認為不存在結(jié)構(gòu),所以它擴展比較容易。

對象存儲的數(shù)據(jù)一般是非機構(gòu)化數(shù)據(jù),比如文件、圖片和視頻這些。

對象存儲的非結(jié)構(gòu)化數(shù)據(jù),會被分片成一個個對象,存儲在不同的存儲節(jié)點上,這也是叫對象存儲的原因,它不想文件存儲是以文件和文件夾方式,塊存儲是以數(shù)據(jù)塊的方式。

對象存儲的核心概念

對象存儲非常簡單,只有2個核心概念:存儲桶(Bucket)和對象(Object)。一個存儲桶可以有很多個對象,這些對象都是平級的,也就是扁平的。

在對象存儲的時候,KEY就是對象的名稱,Value就是對象的內(nèi)容。所以對于對于是一個類似Hash,是一個KV方式存儲。

對象存儲是如何管理對象的

既然我們的對象都是扁平存儲的,而且還被分片了,那么是如何管理它們的,或者說如何找到我們想要的文件以及文件的信息等?這就是對象存儲核心的對象元數(shù)據(jù)管理。

對象的元數(shù)據(jù)就是用來管理數(shù)據(jù)的存儲、分片以及數(shù)據(jù)本身的信息,因為元數(shù)據(jù)單獨存儲,所以我們可以為一個對象擴展任意多的元數(shù)據(jù),這也是文件存儲做不到的。

對象存儲是如何有目錄結(jié)構(gòu)的

對象存儲的底層設計都是扁平的,沒有層次結(jié)構(gòu),但是我們看到的對象存儲管理工具的確給我們提供了目錄層次的管理,就像我們在使用文件系統(tǒng)一樣,其實這樣方式是通過KEY進行區(qū)分的。

假設我們想達到/static/1.jpg這樣的存儲效果,那么在存儲的時候,對于圖片1.jpg保存在對象存儲中的KEY是/static/1.jpg,通過KEY中的/分隔,達到多級目錄的效果,其實本質(zhì)是KEY做了改變。

對象存儲如何防止數(shù)據(jù)丟失

以MinIO為例,對于分布式的對象存儲系統(tǒng),是采用糾刪碼的方式保證數(shù)據(jù)的安全。糾刪碼會把分布式的盤組成一個糾刪碼集合,默認情況下,哪怕丟失N/2的數(shù)據(jù)盤,數(shù)據(jù)也可以正?;謴褪褂?。

假設一個8塊盤(可以分散在多個主機上)組成的糾刪碼集合,哪怕同時有4個盤損壞丟失,數(shù)據(jù)也可以正常使用,并且可以從中恢復,是不是很厲害。

Minio采用的是開源的糾刪碼實現(xiàn),可以參考 github.com/klauspost/reedsolomon了解更多實現(xiàn)。

對象存儲開源實現(xiàn)

對象存儲業(yè)界比較有名的是GlusterFS和Ceph,MinIO是后起之秀,也是是GlusterFS的開發(fā)人員做的,采用Go語言實現(xiàn)。而且他的擴容機制是采用更簡單的集群方式而不是節(jié)點方式,大大降低了維護的復雜度,因為節(jié)點的方式需要重新計算Hash以及對應的舊文件遷移,加一個節(jié)點原來的Hash就亂了。MinIO的地址是:https://github.com/minio/minio,有興趣的朋友可以研究下。

小結(jié)

對象存儲兼容了文件和塊存儲的優(yōu)點,又具備更好的擴展以支持公有云存儲的需求,成本低、無限擴容、更容易訪問等優(yōu)點,會更多的被用戶所選擇。就像我當前的博客網(wǎng)站 https://www.flysnow.org/使用的就是對象存儲搭建的靜態(tài)網(wǎng)站托管。

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論