趙開宇 田蘭梅
(作者單位:四川省廣播電視科學技術(shù)研究所)
隨著以大數(shù)據(jù)、區(qū)塊鏈為代表的數(shù)據(jù)產(chǎn)業(yè)不斷發(fā)展,海量數(shù)據(jù)的存儲問題至關(guān)重要。傳統(tǒng)的中心化存儲因成本高、安全性低廣受詬病。為克服上述缺點,市場發(fā)展出了分布式存儲技術(shù)。分布式存儲技術(shù)因其拓展易、成本低、穩(wěn)定度高等特性,已成熟應(yīng)用于諸多海量數(shù)據(jù)使用的互聯(lián)網(wǎng)領(lǐng)域。分布式存儲有不同的技術(shù)類別,技術(shù)選型時要結(jié)合適用場景和具體的存儲需求進行選擇。目前市場上應(yīng)用的主流分布式存儲系統(tǒng)有HDFS、Ceph、GFS、GPFS、Swift等,這里主要針對HDFS、Ceph、Swift三種具有代表性的技術(shù)進行說明與比較,并結(jié)合四川省智慧廣電建設(shè)探討分布式存儲技術(shù)應(yīng)用的必要性和技術(shù)路線。
HDFS是典型的中心控制節(jié)點架構(gòu),如圖1所示:

圖1 HDFS的工作架構(gòu)圖
HDFS中使用NameNode存儲管理數(shù)據(jù)(元數(shù)據(jù)),使用DataNode存儲業(yè)務(wù)數(shù)據(jù)。運行時NameNode控制DataNode,通過DataNode管理本地數(shù)據(jù)[1]。
客戶端從某個文件讀取數(shù)據(jù)時,首先從NameNode獲取該文件的地址,然后從NameNode讀取具體的業(yè)務(wù)數(shù)據(jù)。
不同的DataNode節(jié)點中存儲的數(shù)據(jù)存在冗余,當其中部分節(jié)點出錯時,能通過冗余的部分反推恢復(fù)損壞的數(shù)據(jù)。
在整個數(shù)據(jù)的讀取過程中,由于元數(shù)據(jù)的訪問量相對業(yè)務(wù)數(shù)據(jù)占比很少,故NameNode不會是HDFS的性能瓶頸,系統(tǒng)的性能提升主要是通過增加DataNode的節(jié)點數(shù)量來增加其承載能力。
Ceph是典型的完全無中心架構(gòu),如圖2所示:

圖2 Ceph的工作架構(gòu)圖
與HDFS的間接通信不同,Ceph不存在中心節(jié)點,數(shù)據(jù)存儲位置是通過設(shè)備映射關(guān)系計算求得的,應(yīng)用端與存儲節(jié)點直接通信。
其存儲系統(tǒng)的核心組件有MON、OSD、MDS[2]。
(1)MON:管理存儲系統(tǒng)的硬件邏輯關(guān)系(如資源布局信息)。
(2)OSD:用于實現(xiàn)對磁盤的管理,實現(xiàn)數(shù)據(jù)讀寫功能。
(3)MDS:守護進程,跟蹤文件的層次機構(gòu)和存儲元數(shù)據(jù)。
(4)RADOS是包含MON、OSD、MDS的存儲集群。確保數(shù)據(jù)保持一致性,通過數(shù)據(jù)復(fù)制、故障檢測和恢復(fù)、數(shù)據(jù)遷移區(qū)報和所在集群節(jié)點保持平衡。
(5)RBD:塊設(shè)備,提供塊存儲磁盤給客戶端。
(6)Ceph FS:一種文件系統(tǒng),使Ceph的存儲數(shù)據(jù)與POSIX兼容。
(7)Librados:使程序語言工具能訪問RADOS,支持JAVA、Python等。
(8)RADOS GW:允許應(yīng)用程序連接對象存儲。
客戶端讀取數(shù)據(jù)時,第一步通過RADOS GW與存儲對象建立連接;第二步通過MON取得資源布局信息;第三步通過名稱信息和資源布局信息得到數(shù)據(jù)的地址信息;第四步通過位置匹配選取特定的Ceph FS進行通信,讀/寫數(shù)據(jù)。
Swift是完全無中心架構(gòu),將對象均勻分布到虛擬節(jié)點上(區(qū)別于Ceph,這里使用一致性哈希算法),再通過Cluster Ring將虛擬節(jié)點映射到物理存儲設(shè)備上,實現(xiàn)數(shù)據(jù)定位[3]。如圖3所示:

圖3 Swift的工作架構(gòu)圖
Proxy Server:負責各組件間的通信,提供對象服務(wù)API。
Account Server:用戶可以通過定義的方式,進行存儲區(qū)域管理。
Container server:容器服務(wù)。提供存儲隔間,類似目錄或文件夾。
Object Storage:對象服務(wù)。包含存儲實體及其元數(shù)據(jù)。
Cluster Ring:記錄磁盤存儲的映射關(guān)系。
部署分布式存儲,選擇合適的容器云技術(shù)時需要充分結(jié)合應(yīng)用場景和具體的存儲需求。不同種的存儲技術(shù)有著各自的特點。
(1)適合存儲大文件,如G級、T級文件。HDFS通過元數(shù)據(jù)進行文件管理,元數(shù)據(jù)包括目錄信息和存儲塊信息,是占用管理節(jié)點NameNode內(nèi)存的,如果應(yīng)用于小文件的存儲,會產(chǎn)生大量的元數(shù)據(jù),耗費內(nèi)存,導(dǎo)致系統(tǒng)性能下降。
(2)適合低頻寫入,并行讀取。HDFS一次只允許寫入單個文件,不支持動態(tài)修改文件,要求讓文件一次寫入就不再變化,要變化只能在文件末尾添加內(nèi)容。
(3)適用廉價PC設(shè)備。多副本的存在提高了存儲的容錯和恢復(fù)機制,使得HDFS可以應(yīng)用于普通的PC設(shè)備上,相較于傳統(tǒng)的中心式存儲,降低了對單機設(shè)備的硬件要求。
(1)支持小文件的存儲。在Ceph中,條帶設(shè)置通常為KB級別,而HDFS對應(yīng)的塊大小默認為64 MB。
(2)支持并發(fā)寫入。區(qū)別于HDFS一次只允許寫入單個文件,Ceph支持多個并發(fā)編寫器。以一個1 T的文件為例,每個object設(shè)置為4 M,該文件會切割為256 000個object。Ceph引入PG(Place Group放置組)作為object的容器。Ceph通過CRUSH算法運算PGID找到適合存儲的OSD(數(shù)據(jù)存儲單元),完成數(shù)據(jù)的寫入過程,一份數(shù)據(jù)寫多個副本。
(3)數(shù)據(jù)強一致性。設(shè)讀操作需要讀取的節(jié)點數(shù)為R;寫操作需要更新的節(jié)點數(shù)為W;數(shù)據(jù)復(fù)制的份數(shù)為N。在Ceph中R+W>N,讀寫操作的節(jié)點存在交集,保證了數(shù)據(jù)的強一致性(這即是CAP理論)。
(1)無單點故障。Swift的元數(shù)據(jù)的存儲地址每個節(jié)點的地位是平等的,處理存儲的方式是一致的,保證了其具有強大的容錯性。為避免因服務(wù)節(jié)點過少導(dǎo)致數(shù)據(jù)傾斜,這里的服務(wù)節(jié)點數(shù)通常設(shè)置>32。相較于HDFS中的單一故障點NameNode,Swift具有更好的容錯能力。
(2)擴展性。Swift的架構(gòu)是完全對稱的,可以通過新增設(shè)備來實現(xiàn)線性提升,系統(tǒng)會自動處理數(shù)據(jù)遷移,使各服務(wù)節(jié)點達到新的平衡。(關(guān)于數(shù)據(jù)遷移,做Swift部署方案設(shè)計時,要充分預(yù)留節(jié)點擴展的可能性,以免數(shù)據(jù)遷移制約系統(tǒng)的應(yīng)用。)
(3)數(shù)據(jù)強一致性。Swift默認配置是N=3,W=2,R=2。這里R=2,代表同時讀取2個節(jié)點的元數(shù)據(jù),然后比較時間戳以確定新舊版本。如果2個節(jié)點的數(shù)據(jù)出現(xiàn)差異,后臺進程會進行數(shù)據(jù)同步,確保數(shù)據(jù)的強一致性。
目前,四川省內(nèi)各廣電機構(gòu)的智慧廣電建設(shè)使用的數(shù)據(jù)存儲以中心化存儲為主,相較于新興的分布式存儲,其成本高、安全性低的問題不容忽視。將分布式存儲技術(shù)應(yīng)用于智慧廣電建設(shè),在降低數(shù)據(jù)存儲成本、提高安全播出率等方面不失為一種有效手段。
一方面,隨著視頻技術(shù)的不斷發(fā)展,虛擬現(xiàn)實(Virtual Reality,VR)視頻、超高清視頻等新節(jié)目的業(yè)務(wù)不斷拓展,廣電的數(shù)據(jù)存儲需求日趨增長。目前,在四川廣電建設(shè)中,仍以傳統(tǒng)的中心化存儲為主,未來勢必在拓展存儲空間、保持數(shù)據(jù)傳輸穩(wěn)定性等方面難以滿足龐大業(yè)務(wù)數(shù)據(jù)的存儲需求。
另一方面,智慧廣電發(fā)揮“智慧”屬性的關(guān)鍵著力點在于大數(shù)據(jù)和云計算的運用。而分布式存儲是這兩者的基礎(chǔ)。只有掌握了分布式存儲技術(shù),建立起四川廣電自己的存儲系統(tǒng),才能跟上國家數(shù)字化轉(zhuǎn)型的發(fā)展速度。
針對智慧廣電的行業(yè)特點,分布式存儲的主要應(yīng)用場景是圖片、音頻、視頻等非結(jié)構(gòu)化數(shù)據(jù)。各級廣電機構(gòu)可根據(jù)存儲的類型選擇分布式存儲技術(shù),如文件存儲適用HDFS,統(tǒng)一存儲(塊/對象/文件統(tǒng)一體)適用Ceph,對象存儲適用Swift。
在分布存儲系統(tǒng)的部署上,主要解決跨機房的服務(wù)切換和數(shù)據(jù)同步問題。本文推薦集群整體切換方案,如圖4所示:

圖4 集群整體切換架構(gòu)
集群整體架構(gòu)的特點:
(1)甲乙兩機房相互獨立,當總控節(jié)點出錯時,自動從總控節(jié)點切換到備份節(jié)點。
(2)以數(shù)據(jù)分片C為例,四個C副本,C11、C12存在甲,C21、C22存在乙,在工作的某個時刻,甲為主機房。乙為備機房。甲乙間的同步可采用強同步或異步兩者模式。強同步模式下,2個機房的數(shù)據(jù)保持一致,若主機房出故障,可靈活采用自動切換或手動切換2種模式進行切換;異步模式下,備機房的數(shù)據(jù)會落后主機房,可選擇切停服務(wù)等主機房排除故障,也可選擇切換到備機丟失部分數(shù)據(jù)。