【摘要】本文通過對存儲數(shù)據(jù)的分類,對結(jié)構(gòu)化數(shù)據(jù),非結(jié)構(gòu)化數(shù)據(jù),半結(jié)構(gòu)化數(shù)據(jù)的分布式存儲技術(shù)進(jìn)行分析,有助于幫助用戶建立自己建立適合自己需求的分布式存儲系統(tǒng)。
【關(guān)鍵詞】分布式;存儲;結(jié)構(gòu)化數(shù)據(jù)
一、分布式存儲概念
有別于傳統(tǒng)意義上的集中式存儲,分布式存儲技術(shù)并不是將數(shù)據(jù)存儲在某個(gè)或多個(gè)特定的節(jié)點(diǎn)上,而是通過網(wǎng)絡(luò)使用企業(yè)中的每臺機(jī)器上的磁盤空間,并將這些分散的存儲資源構(gòu)成一個(gè)虛擬的存儲設(shè)備,數(shù)據(jù)分散的存儲在企業(yè)的各個(gè)角落。
由于沒有嚴(yán)格的schema定義,半結(jié)構(gòu)化數(shù)據(jù)不適合用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫進(jìn)行存儲。故此,適合存儲這類數(shù)據(jù)的數(shù)據(jù)庫通常被稱作“NoSQL”數(shù)據(jù)庫。
二、分布式存儲技術(shù)
2.1結(jié)構(gòu)化數(shù)據(jù)的分布式存儲技術(shù)
很多系統(tǒng)都有大量的結(jié)構(gòu)化數(shù)據(jù),一般存儲在Oracle、SQLServer等關(guān)系型數(shù)據(jù)庫中。當(dāng)單一節(jié)點(diǎn)的數(shù)據(jù)庫無法支撐其應(yīng)用系統(tǒng)時(shí),業(yè)界一般采用垂直擴(kuò)展與水平擴(kuò)展方法來解決。
垂直擴(kuò)展:垂直擴(kuò)展簡單來說就是將不同功能的數(shù)據(jù),存儲在不同的數(shù)據(jù)庫中。將一個(gè)整體數(shù)據(jù)庫進(jìn)行切分,從而達(dá)到了數(shù)據(jù)庫的擴(kuò)展。一個(gè)架構(gòu)設(shè)計(jì)良好的應(yīng)用系統(tǒng),其系統(tǒng)的耦合度越低,各個(gè)功能模塊之間交互越少越統(tǒng)一,將數(shù)據(jù)庫的垂直切分就越容易實(shí)現(xiàn)。
水平擴(kuò)展:水平擴(kuò)展簡單來說,是將數(shù)據(jù)按照數(shù)據(jù)行來切分,是將表中不同行的數(shù)據(jù)切分到不同的數(shù)據(jù)庫中。按照某種特定的規(guī)則將數(shù)據(jù)切分至不同的數(shù)據(jù)庫,可以方便判斷數(shù)據(jù)被劃分到了哪個(gè)數(shù)據(jù)庫中,其規(guī)則可以是某個(gè)字段的范圍,某個(gè)字段的hash值,某個(gè)時(shí)間型字段的范圍等等。
2.2非結(jié)構(gòu)化數(shù)據(jù)的分布式存儲應(yīng)用
非結(jié)構(gòu)化數(shù)據(jù)的分布式存儲中最有名的當(dāng)屬GFS(Google File System)。
GFS將整個(gè)系統(tǒng)分為三類角色:主服務(wù)器(Master)、客戶端(Client)、數(shù)據(jù)塊服務(wù)器(Chunk Server)。
主服務(wù)器(Master):主要存儲與數(shù)據(jù)文件相關(guān)的元數(shù)據(jù),而非數(shù)據(jù)塊(Chunk)。元數(shù)據(jù)包括:命名空間(Name Space),即包含整個(gè)文件系統(tǒng)的目錄結(jié)構(gòu),數(shù)據(jù)塊副本位置信息,能將映射到數(shù)據(jù)塊的位置(通常是一個(gè)64位標(biāo)簽)及其組成文件的表格,正在讀寫特定的數(shù)據(jù)塊的進(jìn)程信息等。為保持元數(shù)據(jù)保持最新狀態(tài),Master節(jié)點(diǎn)會通過周期性地接收從每個(gè)Chunk節(jié)點(diǎn)來的更新(\"Heart-beat\")。主服務(wù)器是GFS的管理節(jié)點(diǎn)。
客戶端(Client):是一組專用接口,是GFS提供給應(yīng)用程序的訪問接口,以庫文件的形式提供。應(yīng)用程序通過直接調(diào)用這些庫函數(shù),并與該庫鏈接在一起,它不遵守POSIX規(guī)范。
數(shù)據(jù)塊服務(wù)器(Chunk Server):負(fù)責(zé)具體的存儲工作。GFS將文件按照固定大小進(jìn)行分塊,Chunk(數(shù)據(jù)塊)是它存儲的基本單位,其默認(rèn)值為64MB,每個(gè)Chunk有一個(gè)唯一的64位標(biāo)簽。每一個(gè)Chunk以Block再進(jìn)行劃分,其默認(rèn)值為64KB。GFS容錯(cuò)方式為副本模式,每一個(gè)Chunk有多個(gè)存儲副本,其默認(rèn)值為3。GFS可以根據(jù)它的規(guī)模需求,來定義數(shù)據(jù)塊服務(wù)器的個(gè)數(shù)。
2.3半結(jié)構(gòu)化數(shù)據(jù)的分布式存儲及應(yīng)用
現(xiàn)在市場上先進(jìn)的分布式存儲大多集中在半結(jié)構(gòu)化數(shù)據(jù),因?yàn)榫哂幸欢ǖ慕Y(jié)構(gòu)性,又更為靈活。由于半結(jié)構(gòu)化數(shù)據(jù)沒有嚴(yán)格的schema定義,這些模型中的數(shù)據(jù)都是自描述的,所以不適合用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫進(jìn)行存儲,適合存儲這類數(shù)據(jù)的數(shù)據(jù)庫被稱作“NoSQL”數(shù)據(jù)庫。半結(jié)構(gòu)化的存儲方案在市場上尤為紛繁復(fù)雜,針對于客戶對數(shù)據(jù)各種需求的側(cè)重點(diǎn)不同,比如大文件和小文件,路由算法,數(shù)據(jù)安全性(讀、寫、數(shù)據(jù)刪除、數(shù)據(jù)恢復(fù))數(shù)據(jù)穩(wěn)定性,有相當(dāng)多的應(yīng)用方案可供選擇。
2.3.1NoSQL數(shù)據(jù)庫
“NoSQL”的學(xué)術(shù)名是“非關(guān)系型數(shù)據(jù)庫”,具有非關(guān)系型,分布式,輕量級,支持水平擴(kuò)展等特性且一般不保證遵循ACID原則的數(shù)據(jù)儲存系統(tǒng),它又常被稱為下一代的數(shù)據(jù)庫,具有以下特點(diǎn):
不使用固定的關(guān)系模式元組來構(gòu)建數(shù)據(jù)模型,而使用可擴(kuò)展、松耦合的數(shù)據(jù)模式來對數(shù)據(jù)進(jìn)行邏輯建模。
支持跨多節(jié)點(diǎn)數(shù)據(jù)分布模型和水平伸縮,遵循于CAP定理(在可用性,分區(qū)容忍性和一致性中滿足其中任意2個(gè))。支持動態(tài)供應(yīng)(在生產(chǎn)集群中透明地加入/刪除節(jié)點(diǎn))和多數(shù)據(jù)中心。
數(shù)據(jù)持久化,可支持磁盤或內(nèi)存中的數(shù)據(jù),甚至有時(shí)候還支持可熱插拔的定制存儲。
支持多種的‘Non-SQL’接口(通常多于一種)來進(jìn)行數(shù)據(jù)訪問。
2.3.2半結(jié)構(gòu)化數(shù)據(jù)分布式存儲-Mongo DB
MongoDB是一款基于JSON(JavaScript Object Notation)的非關(guān)系型數(shù)據(jù)庫,可將一個(gè)文檔或文件以BSON(Binary JSON)的格式存入其中。作為一種輕量級的數(shù)據(jù)交換格式,JSON將JavaScript對象以一種特定的字符串表示,使得此交換格式易于閱讀和編寫,同時(shí)也易于機(jī)器生成和解析。BSON是JSON的二進(jìn)制表示形式,它支持內(nèi)嵌的文檔對象和數(shù)組對象。非結(jié)構(gòu)化數(shù)據(jù)以BSON格式存儲,在MongoDB數(shù)據(jù)庫中將其稱之為文檔,每個(gè)文檔可作為關(guān)系數(shù)據(jù)庫中的一條記錄,統(tǒng)一管理若干記錄成為集合,以一個(gè)數(shù)據(jù)庫來管理這些集合,最終使文件數(shù)據(jù)可直接存儲于數(shù)據(jù)庫中。
MongoDB服務(wù)端可運(yùn)行在Windows、OSX或Linux平臺,支持32位和64位應(yīng)用,默認(rèn)端口為27017。因?yàn)镸ongoDB在32位模式運(yùn)行時(shí)支持的最大文件尺寸為2GB,推薦運(yùn)行在64位平臺。
2.3.3半結(jié)構(gòu)化數(shù)據(jù)分布式存儲-HDFS
Mongo DB適用于大量小文件的分布式存儲,但是如果遇到流式訪問的超大文件,他的性能將會體現(xiàn)出劣勢。這時(shí)使用HDFS不失為一個(gè)好方案。HDFS,全稱Hadoop Distributed File System,設(shè)計(jì)用來部署在低廉的硬件上,有著高容錯(cuò)性的特點(diǎn)。它適合超大數(shù)據(jù)集的應(yīng)用程序,可提供高吞吐量來訪問應(yīng)用程序數(shù)據(jù)。通過放寬POSIX的約束,HDFS得以實(shí)現(xiàn)流形式來訪問文件系統(tǒng)中的數(shù)據(jù)。
HDFS是一個(gè)的主從結(jié)構(gòu),它通過一個(gè)名字節(jié)點(diǎn)作為主服務(wù)器 (即一個(gè)管理文件命名空間和調(diào)節(jié)客戶端訪問文件),來管理對應(yīng)數(shù)據(jù)節(jié)點(diǎn)中的存儲數(shù)據(jù)。HDFS對外開放文件命名空間并允許用戶數(shù)據(jù)以文件形式存儲。HDFS內(nèi)部機(jī)制是將一個(gè)文件進(jìn)行分割成單個(gè)或復(fù)數(shù)塊,并在一組數(shù)據(jù)節(jié)點(diǎn)中存儲這些塊。名字節(jié)點(diǎn)用來確定塊與數(shù)據(jù)節(jié)點(diǎn)的映射和操作文件命名空間的文件或目錄操作,如打開,關(guān)閉,重命名等等。數(shù)據(jù)節(jié)點(diǎn)負(fù)責(zé)來自文件系統(tǒng)客戶的讀寫請求以及執(zhí)行塊的創(chuàng)建,刪除,也包括從名字節(jié)點(diǎn)發(fā)來的塊復(fù)制指令。
HDFS的優(yōu)點(diǎn)如下:(1)可以存儲大文件,單個(gè)文件的大小不受限制,甚至可大于任何單塊硬盤的容量。(2)把存儲單元抽象成塊而不是文件:取消元數(shù)據(jù)關(guān)注簡化了數(shù)據(jù)管理。(3)數(shù)據(jù)復(fù)制適應(yīng)性好,數(shù)據(jù)復(fù)制保證系統(tǒng)的容錯(cuò)和可用性。(4)成本相對低廉,可使用便宜的硬件搭建的集群上運(yùn)行。同時(shí)應(yīng)用HDFS的缺點(diǎn)是HDFS將文件Meta信息存儲在內(nèi)存中,其內(nèi)存限制了文件控制數(shù)量,當(dāng)小文件過多的時(shí)候出現(xiàn)問題。
2.3.4半結(jié)構(gòu)化數(shù)據(jù)分布式存儲-SWIFT
Swift是OpenStack開源云計(jì)算項(xiàng)目的子項(xiàng)目之一,被稱為對象存儲,提供了強(qiáng)大的擴(kuò)展性、冗余和持久性。Swift最佳應(yīng)用于靜態(tài)數(shù)據(jù)的長期存儲,而非實(shí)時(shí)或文件系統(tǒng)的數(shù)據(jù)存儲系統(tǒng),最適合存儲的數(shù)據(jù)類型是郵件存儲和存檔備份、虛擬機(jī)鏡像、圖片存儲等。因?yàn)闆]有中心單元或主控結(jié)點(diǎn),Swift提供了更強(qiáng)的擴(kuò)展性、冗余和持久性。
Swift構(gòu)建了一個(gè)冗余的可擴(kuò)展的分布式對象存儲集群,當(dāng)集群的Node數(shù)量改變時(shí),為盡可能減少更改現(xiàn)存Key和Node的映射關(guān)系,Swift采用一致性哈希算法來達(dá)到此目的。Swift主要有三個(gè)組成部分:代理服務(wù)器、存儲服務(wù)器和一致性服務(wù)器。其架構(gòu)下圖所示,其中存儲和一致性服務(wù)均允許在存儲節(jié)點(diǎn)上。Auth認(rèn)證服務(wù)目前已從Swift中剝離出來,使用OpenStack的認(rèn)證服務(wù)Keystone,目的在于實(shí)現(xiàn)統(tǒng)一OpenStack各個(gè)項(xiàng)目間的認(rèn)證管理。
結(jié)束語
雖然近年來分布式存儲成為各大網(wǎng)站和大型企業(yè)的關(guān)注熱點(diǎn),但是分布式存儲的技術(shù)依然在不斷發(fā)展,不斷完善。根據(jù)CAP原理(一致性,可用性,分區(qū)容忍性)三要素最多只能滿足其中二個(gè)而做不到三者兼顧,市場上不會存在一個(gè)“完美”解決方案。本文通過對各類分布式存儲技術(shù)的分析有助于用戶建立適合自己需求的分布式存儲系統(tǒng)。根據(jù)分布式存儲數(shù)據(jù)的特性,將這些數(shù)據(jù)分為3個(gè)類型,即結(jié)構(gòu)化數(shù)據(jù),非結(jié)構(gòu)化數(shù)據(jù),半結(jié)構(gòu)化數(shù)據(jù)的角度提出了相應(yīng)分布式存儲技術(shù)及應(yīng)用。這樣的分類方法更有助于用戶在建立一個(gè)高效的分布式存儲系統(tǒng)時(shí)給出指導(dǎo)性建議。