趙開宇 田蘭梅
(作者單位:四川省廣播電視科學(xué)技術(shù)研究所)
隨著以大數(shù)據(jù)、區(qū)塊鏈為代表的數(shù)據(jù)產(chǎn)業(yè)不斷發(fā)展,海量數(shù)據(jù)的存儲問題至關(guān)重要。傳統(tǒng)的中心化存儲因成本高、安全性低廣受詬病。為克服上述缺點(diǎn),市場發(fā)展出了分布式存儲技術(shù)。分布式存儲技術(shù)因其拓展易、成本低、穩(wěn)定度高等特性,已成熟應(yīng)用于諸多海量數(shù)據(jù)使用的互聯(lián)網(wǎng)領(lǐng)域。分布式存儲有不同的技術(shù)類別,技術(shù)選型時(shí)要結(jié)合適用場景和具體的存儲需求進(jìn)行選擇。目前市場上應(yīng)用的主流分布式存儲系統(tǒng)有HDFS、Ceph、GFS、GPFS、Swift等,這里主要針對HDFS、Ceph、Swift三種具有代表性的技術(shù)進(jìn)行說明與比較,并結(jié)合四川省智慧廣電建設(shè)探討分布式存儲技術(shù)應(yīng)用的必要性和技術(shù)路線。
HDFS是典型的中心控制節(jié)點(diǎn)架構(gòu),如圖1所示:
圖1 HDFS的工作架構(gòu)圖
HDFS中使用NameNode存儲管理數(shù)據(jù)(元數(shù)據(jù)),使用DataNode存儲業(yè)務(wù)數(shù)據(jù)。運(yùn)行時(shí)NameNode控制DataNode,通過DataNode管理本地?cái)?shù)據(jù)[1]。
客戶端從某個(gè)文件讀取數(shù)據(jù)時(shí),首先從NameNode獲取該文件的地址,然后從NameNode讀取具體的業(yè)務(wù)數(shù)據(jù)。
不同的DataNode節(jié)點(diǎn)中存儲的數(shù)據(jù)存在冗余,當(dāng)其中部分節(jié)點(diǎn)出錯時(shí),能通過冗余的部分反推恢復(fù)損壞的數(shù)據(jù)。
在整個(gè)數(shù)據(jù)的讀取過程中,由于元數(shù)據(jù)的訪問量相對業(yè)務(wù)數(shù)據(jù)占比很少,故NameNode不會是HDFS的性能瓶頸,系統(tǒng)的性能提升主要是通過增加DataNode的節(jié)點(diǎn)數(shù)量來增加其承載能力。
Ceph是典型的完全無中心架構(gòu),如圖2所示:
圖2 Ceph的工作架構(gòu)圖
與HDFS的間接通信不同,Ceph不存在中心節(jié)點(diǎn),數(shù)據(jù)存儲位置是通過設(shè)備映射關(guān)系計(jì)算求得的,應(yīng)用端與存儲節(jié)點(diǎn)直接通信。
其存儲系統(tǒng)的核心組件有MON、OSD、MDS[2]。
(1)MON:管理存儲系統(tǒng)的硬件邏輯關(guān)系(如資源布局信息)。
(2)OSD:用于實(shí)現(xiàn)對磁盤的管理,實(shí)現(xiàn)數(shù)據(jù)讀寫功能。
(3)MDS:守護(hù)進(jìn)程,跟蹤文件的層次機(jī)構(gòu)和存儲元數(shù)據(jù)。
(4)RADOS是包含MON、OSD、MDS的存儲集群。確保數(shù)據(jù)保持一致性,通過數(shù)據(jù)復(fù)制、故障檢測和恢復(fù)、數(shù)據(jù)遷移區(qū)報(bào)和所在集群節(jié)點(diǎn)保持平衡。
(5)RBD:塊設(shè)備,提供塊存儲磁盤給客戶端。
(6)Ceph FS:一種文件系統(tǒng),使Ceph的存儲數(shù)據(jù)與POSIX兼容。
(7)Librados:使程序語言工具能訪問RADOS,支持JAVA、Python等。
(8)RADOS GW:允許應(yīng)用程序連接對象存儲。
客戶端讀取數(shù)據(jù)時(shí),第一步通過RADOS GW與存儲對象建立連接;第二步通過MON取得資源布局信息;第三步通過名稱信息和資源布局信息得到數(shù)據(jù)的地址信息;第四步通過位置匹配選取特定的Ceph FS進(jìn)行通信,讀/寫數(shù)據(jù)。
Swift是完全無中心架構(gòu),將對象均勻分布到虛擬節(jié)點(diǎn)上(區(qū)別于Ceph,這里使用一致性哈希算法),再通過Cluster Ring將虛擬節(jié)點(diǎn)映射到物理存儲設(shè)備上,實(shí)現(xiàn)數(shù)據(jù)定位[3]。如圖3所示:
圖3 Swift的工作架構(gòu)圖
Proxy Server:負(fù)責(zé)各組件間的通信,提供對象服務(wù)API。
Account Server:用戶可以通過定義的方式,進(jìn)行存儲區(qū)域管理。
Container server:容器服務(wù)。提供存儲隔間,類似目錄或文件夾。
Object Storage:對象服務(wù)。包含存儲實(shí)體及其元數(shù)據(jù)。
Cluster Ring:記錄磁盤存儲的映射關(guān)系。
部署分布式存儲,選擇合適的容器云技術(shù)時(shí)需要充分結(jié)合應(yīng)用場景和具體的存儲需求。不同種的存儲技術(shù)有著各自的特點(diǎn)。
(1)適合存儲大文件,如G級、T級文件。HDFS通過元數(shù)據(jù)進(jìn)行文件管理,元數(shù)據(jù)包括目錄信息和存儲塊信息,是占用管理節(jié)點(diǎn)NameNode內(nèi)存的,如果應(yīng)用于小文件的存儲,會產(chǎn)生大量的元數(shù)據(jù),耗費(fèi)內(nèi)存,導(dǎo)致系統(tǒng)性能下降。
(2)適合低頻寫入,并行讀取。HDFS一次只允許寫入單個(gè)文件,不支持動態(tài)修改文件,要求讓文件一次寫入就不再變化,要變化只能在文件末尾添加內(nèi)容。
(3)適用廉價(jià)PC設(shè)備。多副本的存在提高了存儲的容錯和恢復(fù)機(jī)制,使得HDFS可以應(yīng)用于普通的PC設(shè)備上,相較于傳統(tǒng)的中心式存儲,降低了對單機(jī)設(shè)備的硬件要求。
(1)支持小文件的存儲。在Ceph中,條帶設(shè)置通常為KB級別,而HDFS對應(yīng)的塊大小默認(rèn)為64 MB。
(2)支持并發(fā)寫入。區(qū)別于HDFS一次只允許寫入單個(gè)文件,Ceph支持多個(gè)并發(fā)編寫器。以一個(gè)1 T的文件為例,每個(gè)object設(shè)置為4 M,該文件會切割為256 000個(gè)object。Ceph引入PG(Place Group放置組)作為object的容器。Ceph通過CRUSH算法運(yùn)算PGID找到適合存儲的OSD(數(shù)據(jù)存儲單元),完成數(shù)據(jù)的寫入過程,一份數(shù)據(jù)寫多個(gè)副本。
(3)數(shù)據(jù)強(qiáng)一致性。設(shè)讀操作需要讀取的節(jié)點(diǎn)數(shù)為R;寫操作需要更新的節(jié)點(diǎn)數(shù)為W;數(shù)據(jù)復(fù)制的份數(shù)為N。在Ceph中R+W>N,讀寫操作的節(jié)點(diǎn)存在交集,保證了數(shù)據(jù)的強(qiáng)一致性(這即是CAP理論)。
(1)無單點(diǎn)故障。Swift的元數(shù)據(jù)的存儲地址每個(gè)節(jié)點(diǎn)的地位是平等的,處理存儲的方式是一致的,保證了其具有強(qiáng)大的容錯性。為避免因服務(wù)節(jié)點(diǎn)過少導(dǎo)致數(shù)據(jù)傾斜,這里的服務(wù)節(jié)點(diǎn)數(shù)通常設(shè)置>32。相較于HDFS中的單一故障點(diǎn)NameNode,Swift具有更好的容錯能力。
(2)擴(kuò)展性。Swift的架構(gòu)是完全對稱的,可以通過新增設(shè)備來實(shí)現(xiàn)線性提升,系統(tǒng)會自動處理數(shù)據(jù)遷移,使各服務(wù)節(jié)點(diǎn)達(dá)到新的平衡。(關(guān)于數(shù)據(jù)遷移,做Swift部署方案設(shè)計(jì)時(shí),要充分預(yù)留節(jié)點(diǎn)擴(kuò)展的可能性,以免數(shù)據(jù)遷移制約系統(tǒng)的應(yīng)用。)
(3)數(shù)據(jù)強(qiáng)一致性。Swift默認(rèn)配置是N=3,W=2,R=2。這里R=2,代表同時(shí)讀取2個(gè)節(jié)點(diǎn)的元數(shù)據(jù),然后比較時(shí)間戳以確定新舊版本。如果2個(gè)節(jié)點(diǎn)的數(shù)據(jù)出現(xiàn)差異,后臺進(jìn)程會進(jìn)行數(shù)據(jù)同步,確保數(shù)據(jù)的強(qiáng)一致性。
目前,四川省內(nèi)各廣電機(jī)構(gòu)的智慧廣電建設(shè)使用的數(shù)據(jù)存儲以中心化存儲為主,相較于新興的分布式存儲,其成本高、安全性低的問題不容忽視。將分布式存儲技術(shù)應(yīng)用于智慧廣電建設(shè),在降低數(shù)據(jù)存儲成本、提高安全播出率等方面不失為一種有效手段。
一方面,隨著視頻技術(shù)的不斷發(fā)展,虛擬現(xiàn)實(shí)(Virtual Reality,VR)視頻、超高清視頻等新節(jié)目的業(yè)務(wù)不斷拓展,廣電的數(shù)據(jù)存儲需求日趨增長。目前,在四川廣電建設(shè)中,仍以傳統(tǒng)的中心化存儲為主,未來勢必在拓展存儲空間、保持?jǐn)?shù)據(jù)傳輸穩(wěn)定性等方面難以滿足龐大業(yè)務(wù)數(shù)據(jù)的存儲需求。
另一方面,智慧廣電發(fā)揮“智慧”屬性的關(guān)鍵著力點(diǎn)在于大數(shù)據(jù)和云計(jì)算的運(yùn)用。而分布式存儲是這兩者的基礎(chǔ)。只有掌握了分布式存儲技術(shù),建立起四川廣電自己的存儲系統(tǒng),才能跟上國家數(shù)字化轉(zhuǎn)型的發(fā)展速度。
針對智慧廣電的行業(yè)特點(diǎn),分布式存儲的主要應(yīng)用場景是圖片、音頻、視頻等非結(jié)構(gòu)化數(shù)據(jù)。各級廣電機(jī)構(gòu)可根據(jù)存儲的類型選擇分布式存儲技術(shù),如文件存儲適用HDFS,統(tǒng)一存儲(塊/對象/文件統(tǒng)一體)適用Ceph,對象存儲適用Swift。
在分布存儲系統(tǒng)的部署上,主要解決跨機(jī)房的服務(wù)切換和數(shù)據(jù)同步問題。本文推薦集群整體切換方案,如圖4所示:
圖4 集群整體切換架構(gòu)
集群整體架構(gòu)的特點(diǎn):
(1)甲乙兩機(jī)房相互獨(dú)立,當(dāng)總控節(jié)點(diǎn)出錯時(shí),自動從總控節(jié)點(diǎn)切換到備份節(jié)點(diǎn)。
(2)以數(shù)據(jù)分片C為例,四個(gè)C副本,C11、C12存在甲,C21、C22存在乙,在工作的某個(gè)時(shí)刻,甲為主機(jī)房。乙為備機(jī)房。甲乙間的同步可采用強(qiáng)同步或異步兩者模式。強(qiáng)同步模式下,2個(gè)機(jī)房的數(shù)據(jù)保持一致,若主機(jī)房出故障,可靈活采用自動切換或手動切換2種模式進(jìn)行切換;異步模式下,備機(jī)房的數(shù)據(jù)會落后主機(jī)房,可選擇切停服務(wù)等主機(jī)房排除故障,也可選擇切換到備機(jī)丟失部分?jǐn)?shù)據(jù)。