蔡京軍 劉曉宇 王珊珊 沈 強 潘 皓
(1.北京市軌道交通建設(shè)管理有限公司,100068,北京;2.城市軌道交通全自動運行系統(tǒng)與安全監(jiān)控北京市重點實驗室,100068,北京;3.北京市軌道交通運營管理有限公司,100068,北京;4.北京全路通信信號研究設(shè)計院集團(tuán)有限公司,100160,北京//第一作者,高級工程師)
分布式存儲系統(tǒng)組成集群資源池,資源共享,管理統(tǒng)一,擴(kuò)展靈活,這類存儲系統(tǒng)被業(yè)界稱為云存儲[1]。北京大興國際機(jī)場線(以下簡稱“大興機(jī)場線”)視頻監(jiān)視系統(tǒng)存儲系統(tǒng)應(yīng)用的是視頻云存儲系統(tǒng),該系統(tǒng)有別于傳統(tǒng)存儲技術(shù),在數(shù)據(jù)可靠性、空間擴(kuò)展性、統(tǒng)一管理能力、動態(tài)負(fù)載均衡、集群性能、智能運維等方面均可達(dá)到傳統(tǒng)存儲無法比擬的水平。
云存儲系統(tǒng)采用了基于云架構(gòu)的分布式集群設(shè)計和虛擬化設(shè)計,在系統(tǒng)內(nèi)部實現(xiàn)了多設(shè)備協(xié)同工作、性能和資源的虛擬整合,可最大限度利用硬件資源和存儲空間。整個系統(tǒng)從邏輯上由設(shè)備接入層、第三方接入、流媒體服務(wù)、圖片服務(wù)、分布式文件系統(tǒng)組成。提供從前端數(shù)據(jù)采集、存儲、轉(zhuǎn)發(fā)于一體的數(shù)據(jù)層解決方案。同時,通過開放透明的應(yīng)用接口和簡單易用的管理界面,為整個視頻監(jiān)視系統(tǒng)提供高效、可靠的數(shù)據(jù)服務(wù)。本文介紹視頻云存儲系統(tǒng)的構(gòu)架選型及功能模塊設(shè)計,其系統(tǒng)構(gòu)架及功能模塊如圖1所示。
按照元數(shù)據(jù)的管理方式,云存儲集群文件系統(tǒng)可分為對稱式和非對稱式。對稱式云存儲集群文件系統(tǒng)中每個節(jié)點的角色均等,共同管理和維護(hù)元數(shù)據(jù),節(jié)點間通過高速網(wǎng)絡(luò)進(jìn)行信息同步和互斥鎖等操作。非對稱式云存儲集群文件系統(tǒng)中有專門的一個或者多個節(jié)點負(fù)責(zé)管理元數(shù)據(jù),其他節(jié)點需要頻繁與元數(shù)據(jù)節(jié)點通信以獲取最新的元數(shù)據(jù),如目錄列表、文件屬性等。下文分別從系統(tǒng)可用性和擴(kuò)展性方面對兩種架構(gòu)進(jìn)行比較分析。
1)系統(tǒng)可用性。對稱式架構(gòu)中,節(jié)點間的耦合性非常緊密,一旦某個節(jié)點出現(xiàn)問題,比如響應(yīng)延遲,向其加鎖就會遲遲得不到應(yīng)答,會影響整個集群的性能。因此,如果某個節(jié)點把文件系統(tǒng)元數(shù)據(jù)破壞,整個集群系統(tǒng)都會受到影響,輕則丟失數(shù)據(jù)或元數(shù)據(jù)不一致,重則系統(tǒng)整體癱瘓。非對稱式架構(gòu)中,節(jié)點間采用松耦合機(jī)制,數(shù)據(jù)節(jié)點故障可以得到很好的隔離,系統(tǒng)的健壯性更強。
2)系統(tǒng)擴(kuò)展性。對稱式架構(gòu)中,節(jié)點數(shù)量不能太多,否則節(jié)點間相互的通信量將迅速激增,達(dá)到瓶頸。比如:系統(tǒng)中有10個節(jié)點,每個節(jié)點可能同時在與其他9個節(jié)點通信,此時系統(tǒng)連接總數(shù)近似為10×10;如果100個節(jié)點,則連接總數(shù)為99×99。隨著節(jié)點數(shù)量增加,信息同步復(fù)雜度呈幾何級數(shù)增長,節(jié)點性能奇差。非對稱式構(gòu)架中,由專用的服務(wù)器維護(hù)元數(shù)據(jù),節(jié)點增加帶來的元數(shù)據(jù)復(fù)雜度是線性的,因而集群性能能夠?qū)崿F(xiàn)線性增長。
架構(gòu)選型建議:視頻監(jiān)視系統(tǒng)每路存儲碼流為6 Mbit/s(《北京市軌道交通視頻監(jiān)視系統(tǒng)應(yīng)用規(guī)范》[2]要求)、存儲時長為90 d(《中華人民共和國反恐怖主義法》要求),所需數(shù)據(jù)空間大、節(jié)點多、安全性要求高,因此建議視頻云存儲系統(tǒng)采用非對稱式架構(gòu)。
圖1 視頻云存儲系統(tǒng)的架構(gòu)及功能模塊示意圖
云存儲使用分布式文件系統(tǒng),將硬盤、服務(wù)器等設(shè)備進(jìn)行集群,系統(tǒng)應(yīng)支持對分布部署的存儲設(shè)備的統(tǒng)一配置管理,方便接收存儲設(shè)備告警上報。單站系統(tǒng)由多個節(jié)點機(jī)、控制設(shè)備等構(gòu)成的空間體現(xiàn)為一個大的存儲空間,提供存儲服務(wù)時空間命名及IP地址應(yīng)唯一。因此,云存儲系統(tǒng)中應(yīng)至少設(shè)計統(tǒng)一資源池管理模塊,對全局的文件的元數(shù)據(jù)信息進(jìn)行統(tǒng)一管理,并提供出bucket(存儲對象的容器),讓用戶將文件按bucket組織。元數(shù)據(jù)的信息中記錄文件的組織信息,即:一個文件存儲在哪些節(jié)點上,有哪些數(shù)據(jù)塊組成。在系統(tǒng)一致性檢測時,就可以通過比較發(fā)現(xiàn)元數(shù)據(jù)記錄的信息和節(jié)點上記錄的數(shù)據(jù)塊信息的差異,用于修正差異。通過統(tǒng)一資源管理,可以方便有效地共享文件。整個系統(tǒng)的文件最終是統(tǒng)一使用所有存儲節(jié)點所提供的存儲空間,讓彈性擴(kuò)展更加簡單高效。
統(tǒng)一管理功能模塊包括集群管理、智能硬盤管理和時間同步3個模塊。
1)集群管理模塊。管理和識別系統(tǒng)中的所有數(shù)據(jù)節(jié)點,為負(fù)載均衡、數(shù)據(jù)恢復(fù)、客戶端升級資源提供數(shù)據(jù)源,并負(fù)責(zé)節(jié)點在集群中的生命周期管理以及處理節(jié)點的擴(kuò)容變更等操作。在節(jié)點第一次注冊加入到集群,就為該節(jié)點分配身份ID,即使修改節(jié)點的網(wǎng)卡的IP也仍能識別到該節(jié)點,避免由于節(jié)點IP的修改而導(dǎo)致數(shù)據(jù)遷移,進(jìn)而觸發(fā)大量的數(shù)據(jù)恢復(fù)等問題。集群管理模塊識別處理按節(jié)點的重復(fù)加入、下線、刪除等操作。在節(jié)點長時間下線,系統(tǒng)觸發(fā)針對該節(jié)點上的數(shù)據(jù)塊進(jìn)行恢復(fù),避免真正由于節(jié)點網(wǎng)絡(luò)問題或者硬件問題導(dǎo)致數(shù)據(jù)恢復(fù)延時而丟失。
2)磁盤管理模塊。直接管理數(shù)據(jù)節(jié)點內(nèi)的磁盤。將每個磁盤抽象成一個磁盤對象,并將磁盤對象交由磁盤管理模塊統(tǒng)一管理,形成數(shù)據(jù)節(jié)點內(nèi)部的存儲層,為數(shù)據(jù)塊在節(jié)點的統(tǒng)一存儲和管理提供便利,實現(xiàn)所有磁盤相關(guān)的管理操作對外無感知。磁盤管理模塊能感知磁盤的熱插拔事件、磁盤異常損壞、磁盤變慢盤、觸發(fā)磁盤自動上下線,對于新盤可以自動感知格式化,對于同一集群磁盤可以自動上線加載磁盤內(nèi)的數(shù)據(jù)索引。對于熱插拔事件,在節(jié)點出現(xiàn)異常時,通過磁盤漂移現(xiàn)數(shù)據(jù)快速恢復(fù),也可以根據(jù)該特性實現(xiàn)新擴(kuò)容之后,使節(jié)點容量快速均衡。對于磁盤故障事件,能感知到異常損壞或者慢盤,可提前觸發(fā)系統(tǒng)進(jìn)行恢復(fù),實現(xiàn)免維護(hù)。
3)時間同步模塊。在大規(guī)模部署的時候,為了保證數(shù)據(jù)的一致性需要保證使每個節(jié)點統(tǒng)一時間,通過NTP(網(wǎng)絡(luò)時間協(xié)議)時間同步功能,避免運行過程中因調(diào)整時間導(dǎo)致數(shù)據(jù)丟失的風(fēng)險。運維獲取到NTP時鐘源IP地址后,各個節(jié)點通過NTP協(xié)議獲取到NTP時鐘源時間,并與本地時間做對比,進(jìn)行時間同步。
視頻業(yè)務(wù)正常工作情況下,存儲系統(tǒng)應(yīng)根據(jù)各節(jié)點承擔(dān)的業(yè)務(wù)壓力動態(tài)調(diào)整各節(jié)點的業(yè)務(wù)負(fù)荷,使系統(tǒng)始終處于均衡穩(wěn)定狀態(tài)中,避免單節(jié)點過載。在故障及數(shù)據(jù)恢復(fù)工作情況下,要求系統(tǒng)自動將流量重新分配到其他的節(jié)點機(jī)上,且各個節(jié)點機(jī)分配流量均衡一致,同時不能影響正常的視頻存儲業(yè)務(wù)。
一個存儲集群內(nèi)部,眾多存儲節(jié)點組建形成的一個統(tǒng)一空間,從整體性能、避免單點故障、數(shù)據(jù)熱點瓶頸等方面都需要一個良好的動態(tài)負(fù)載均衡功能。動態(tài)負(fù)載均衡指集群內(nèi)部自動根據(jù)各存儲節(jié)點的IO(輸入輸出)負(fù)載、空間容量、CPU、內(nèi)存負(fù)載等因素,調(diào)度數(shù)據(jù)流向,實現(xiàn)IO讀寫的負(fù)載均衡。
視頻云存儲系統(tǒng)設(shè)計采用兩級負(fù)載均衡調(diào)度。首先由元數(shù)據(jù)服務(wù)器選擇一個負(fù)載輕的數(shù)據(jù)節(jié)點作為當(dāng)前請求的讀寫節(jié)點,同時節(jié)點內(nèi)部還會根據(jù)每個硬盤的負(fù)載選擇最合適的硬盤參與數(shù)據(jù)寫入。因此動態(tài)負(fù)載均衡功能模塊包括高可靠的系統(tǒng)級數(shù)據(jù)分布策略管理模塊、元數(shù)據(jù)服務(wù)集群負(fù)載均衡模塊和數(shù)據(jù)節(jié)點內(nèi)磁盤級負(fù)載均衡模塊。
1)系統(tǒng)級數(shù)據(jù)分布策略管理模塊。根據(jù)數(shù)據(jù)分布算法將數(shù)據(jù)塊分布存儲,以滿足節(jié)點級容錯以及硬盤級容錯,即支持N+M:B(N為原數(shù)據(jù)模;M為校驗?zāi)K;B為備用模塊)。通過在集群負(fù)載均衡模塊之上接入數(shù)據(jù)分布策略管理模塊,能使負(fù)載均衡模塊選擇出分布更加合理的數(shù)據(jù)節(jié)點。
數(shù)據(jù)分布策略管理模塊讓系統(tǒng)可以支持多種N+M:B的策略。另外,當(dāng)系統(tǒng)規(guī)模小,不滿足節(jié)點容錯的時候也可以通過N+M:0讓數(shù)據(jù)分布降級為支持磁盤級容錯,使系統(tǒng)逐步擴(kuò)容而不用修改任何配置,后續(xù)所有新寫入的數(shù)據(jù)可以自動提升為最優(yōu)的容錯數(shù)據(jù)分布,使數(shù)據(jù)分布從磁盤級容錯提升節(jié)點級容錯(節(jié)點級容錯可以自動提升直至到最高的冗余數(shù)所相對應(yīng)的節(jié)點數(shù))。
2)元數(shù)據(jù)服務(wù)集群負(fù)載均衡模塊。元數(shù)據(jù)服務(wù)器針對集群中所有節(jié)點匯報的實時負(fù)載壓力(如CPU占用率、內(nèi)存使用情況、網(wǎng)絡(luò)流量大小、磁盤IO數(shù)據(jù))進(jìn)行匯聚,收集到集群負(fù)載均衡模塊內(nèi),做統(tǒng)一的調(diào)度,優(yōu)化節(jié)點間的負(fù)載,讓所有節(jié)點均衡均攤系統(tǒng)壓力,提升系統(tǒng)的整體讀寫性能,實現(xiàn)各個節(jié)點的容量均衡,使得系統(tǒng)能夠支持異構(gòu)容量和性能的數(shù)據(jù)節(jié)點。集群負(fù)載均衡模塊為文件寫入分配隨機(jī)節(jié)點,滿足N+M的節(jié)點級容錯。
3)數(shù)據(jù)節(jié)點內(nèi)磁盤級負(fù)載均衡模塊。通過實時收集磁盤的負(fù)載、磁盤空間使用情況,調(diào)度寫入到該節(jié)點內(nèi)的數(shù)據(jù)流,均衡地分布到各個低負(fù)載、高可用容量的磁盤,使寫入更加平滑,最大粒度發(fā)揮磁盤的順序?qū)懭肽芰?,并在長期負(fù)載下使得各個磁盤的容量能最終達(dá)到均衡,實現(xiàn)系統(tǒng)容忍異構(gòu)的磁盤。
視頻云存儲系統(tǒng)采用數(shù)據(jù)離散技術(shù),使得客戶端可以有效利用眾多存儲節(jié)點提供的聚合網(wǎng)絡(luò)帶寬,實現(xiàn)高速并發(fā)訪問??蛻舳嗽谠L問云存儲時,首先訪問元數(shù)據(jù)服務(wù)器,獲取將要與之進(jìn)行交互的數(shù)據(jù)節(jié)點信息,然后直接訪問這些數(shù)據(jù)節(jié)點完成數(shù)據(jù)存取。
客戶端與元數(shù)據(jù)服務(wù)器之間只有控制流,而無數(shù)據(jù)流,這樣就極大地降低了元數(shù)據(jù)服務(wù)器的負(fù)載,使之不成為系統(tǒng)性能的一個瓶頸??蛻舳伺c數(shù)據(jù)節(jié)點之間直接傳輸數(shù)據(jù)流,同時由于文件被分散到多個節(jié)點進(jìn)行分布式存儲,客戶端可以同時訪問多個節(jié)點服務(wù)器,從而使得整個系統(tǒng)的IO高度并行,系統(tǒng)整體性能得到提高。
分布式系統(tǒng)由于數(shù)據(jù)分散存放在不同的節(jié)點,因而出現(xiàn)磁盤故障或者節(jié)點故障時不可避免地會進(jìn)行跨節(jié)點的數(shù)據(jù)重構(gòu)。當(dāng)追求重構(gòu)速度時,節(jié)點間的數(shù)據(jù)交互壓力很大。為了避免網(wǎng)絡(luò)擁塞,拖慢整個系統(tǒng),需要將業(yè)務(wù)網(wǎng)絡(luò)和存儲網(wǎng)絡(luò)分離。業(yè)務(wù)網(wǎng)絡(luò)和存儲網(wǎng)絡(luò)分別使用不同的物理網(wǎng)卡以達(dá)到從網(wǎng)絡(luò)上相互隔離的目的,可以根據(jù)現(xiàn)有網(wǎng)絡(luò)狀況選擇千兆和萬兆連接。前端IPC(進(jìn)程間通信)接入的數(shù)據(jù)流走單獨的業(yè)務(wù)網(wǎng)絡(luò),后端數(shù)據(jù)離散流和控制信令流走單獨的存儲網(wǎng)絡(luò),以滿足不同場景的組網(wǎng)需求。無論哪種組網(wǎng),系統(tǒng)中所有節(jié)點網(wǎng)絡(luò)都是冗余的,任何單一網(wǎng)口故障或者單一交換機(jī)故障均不影響系統(tǒng)使用。
數(shù)據(jù)是業(yè)務(wù)系統(tǒng)核心應(yīng)用的最終保障,其可靠性至關(guān)重要。云存儲系統(tǒng)的核心是一個分布式文件系統(tǒng),設(shè)計時假設(shè)任意機(jī)框、任意節(jié)點、任意硬盤都可能出現(xiàn)故障,通過分布式的數(shù)據(jù)冗余、數(shù)據(jù)操作日志、元數(shù)據(jù)主備冗余、數(shù)據(jù)自動恢復(fù)等多種機(jī)制來處理這些故障。
云存儲系統(tǒng)針對視頻數(shù)據(jù)主要采用Erasure Code(糾刪碼或者叫擦除碼)算法,以較小的數(shù)據(jù)冗余實現(xiàn)較高的可靠性,而沒有采用互聯(lián)網(wǎng)采用的多副本和監(jiān)控領(lǐng)域常用的數(shù)據(jù)備份方式,存儲空間利用率高。數(shù)據(jù)可靠性功能模塊包括一致性保護(hù)模塊和智能恢復(fù)模塊,對數(shù)據(jù)進(jìn)行可靠性保障。
1)一致性保護(hù)模塊。系統(tǒng)長期運行過程中,由于斷電、人為破環(huán)、寫入異常、程序bug等原因,都可能導(dǎo)致寫入的文件出現(xiàn)損壞。針對可能出現(xiàn)的數(shù)據(jù)和寫入時不一致,通過讀寫加入校驗值記錄和判斷內(nèi)部周期性檢測數(shù)據(jù)塊是否和記錄的校驗值不一致,當(dāng)發(fā)現(xiàn)不一致時,匯報給元數(shù)據(jù)服務(wù)器,由智能恢復(fù)模塊進(jìn)行數(shù)據(jù)恢復(fù),從而保證數(shù)據(jù)一致性。在分布式系統(tǒng)中,由于各種各樣的原因,會有小概率的集群內(nèi)多臺節(jié)點數(shù)據(jù)塊和元數(shù)據(jù)服務(wù)內(nèi)管理數(shù)據(jù)塊信息出現(xiàn)的差異。為了解決該問題,通過周期性觸發(fā)數(shù)據(jù)節(jié)點進(jìn)行全量匯報,報告自身擁有數(shù)據(jù)塊索引信息,使元數(shù)據(jù)可以據(jù)此不斷修正自身記錄的信息,從而使外部讀取文件正?;蛘吒兄轿募笔r能觸發(fā)自動恢復(fù)功能,以保障云存儲系統(tǒng)的可靠性。
2)智能恢復(fù)模塊。實時感知文件在云存儲中出現(xiàn)的異常塊,對于出現(xiàn)異常塊的文件按照調(diào)優(yōu)適合視頻監(jiān)視系統(tǒng)特點的恢復(fù)策略進(jìn)行恢復(fù),盡量讓時間最近、文件損壞更嚴(yán)重的優(yōu)先恢復(fù)。并針對冗余度高、可靠性高的文件,在出現(xiàn)可容忍的少量數(shù)據(jù)塊損壞時,可以減少恢復(fù)(比如:如果12個存儲器中壞了3個,由于本身已經(jīng)很可靠,則可以不進(jìn)行恢復(fù))。同時為了支持更加緊急的數(shù)據(jù)文件,在自動恢復(fù)策略之上引入優(yōu)先恢復(fù)隊列,用于在某些特殊情況下人工判斷某天的數(shù)據(jù)需要優(yōu)先恢復(fù)。優(yōu)先恢復(fù)會打斷自動恢復(fù),優(yōu)先完成指定的某一天內(nèi)的數(shù)據(jù)文件。智能恢復(fù)模塊能根據(jù)當(dāng)前系統(tǒng)的負(fù)載壓力實時調(diào)整恢復(fù)速度,在保證讀寫不受影響的情況下,高速完成異常文件的快速恢復(fù)。
云存儲系統(tǒng)運行過程中出現(xiàn)比較嚴(yán)重的問題時,如果不能及時感知,可能會造成系統(tǒng)停止服務(wù),甚至數(shù)據(jù)丟失的嚴(yán)重問題。為了使管理人員能夠及時發(fā)現(xiàn)云存儲故障,需要設(shè)計智能化運維管理模塊,使系統(tǒng)輪詢各個節(jié)點的監(jiān)控項,使運維人員能第一時間介入恢復(fù)系統(tǒng)。同時綜合應(yīng)用多種技術(shù)延長系統(tǒng)生命期,比如硬盤休眠技術(shù),支持硬盤分時上電,達(dá)到節(jié)能、延長硬盤壽命目的。智能運維功能模塊包括系統(tǒng)健康度管理模塊和系統(tǒng)異常告警模塊。
1)系統(tǒng)健康度管理模塊。針對系統(tǒng)的各個節(jié)點,一起參與系統(tǒng)多維度的數(shù)據(jù)收集,并匯總分析系統(tǒng)整體運行狀況。系統(tǒng)健康度集成在運維管理模塊中,提供實時流量、設(shè)備在線率、系統(tǒng)服務(wù)狀態(tài)、硬件信息檢測、歷史流量波動、平均IOPS(磁盤性能評價指標(biāo))、IO平均延時、系統(tǒng)容量變化等信息,并通過圖表展示給運維人員。
2)系統(tǒng)異常告警模塊。對系統(tǒng)的流量波動、磁盤容量達(dá)到使用閥值、節(jié)點上下線、磁盤告警、各個節(jié)點的CPU溫度、內(nèi)存使用量、風(fēng)扇轉(zhuǎn)速、系統(tǒng)盤使用量、ssd(存儲介質(zhì))磨損程度、網(wǎng)卡速率波動、網(wǎng)線異常等進(jìn)行實時告警,可以使技術(shù)支持人員快速感知到當(dāng)前云存儲系統(tǒng)存在的風(fēng)險,快速響應(yīng),減少因為系統(tǒng)錯誤累計超過系統(tǒng)能容忍的閥值而引發(fā)的異常事件,從而保障系統(tǒng)高可靠地持續(xù)運行。
為了保證云存儲系統(tǒng)各個優(yōu)勢功能實現(xiàn),針對大興機(jī)場線云存儲系統(tǒng),主要設(shè)計的系統(tǒng)功能模塊包括元數(shù)據(jù)服務(wù)集群負(fù)載均衡模塊、數(shù)據(jù)節(jié)點內(nèi)磁盤負(fù)載均衡模塊、高可靠數(shù)據(jù)分布策略管理模塊、數(shù)據(jù)節(jié)點的磁盤管理模塊、智能恢復(fù)模塊、一致性保護(hù)模塊、系統(tǒng)運維管理模塊等。在系統(tǒng)實際配置中選用數(shù)據(jù)可靠性及系統(tǒng)擴(kuò)展性更好的非對稱式架構(gòu),采用專門的元數(shù)據(jù)服務(wù)器對元數(shù)據(jù)進(jìn)行管理。同時,采用1+1冗余配置元數(shù)據(jù)服務(wù)器,進(jìn)一步保障元數(shù)據(jù)相關(guān)功能高可用性。
通過統(tǒng)一資源池管理模塊、集群管理模塊、磁盤管理模塊,從系統(tǒng)、節(jié)點、硬盤三個級別實現(xiàn)統(tǒng)一管理;通過高可靠的數(shù)據(jù)分布策略,將負(fù)載均衡能力深入到系統(tǒng)級、元數(shù)據(jù)節(jié)點級和磁盤級;通過各系統(tǒng)功能模塊的設(shè)計,保障云存儲系統(tǒng)的集群性能和智能管理水平。
視頻云存儲系統(tǒng)在城市軌道交通領(lǐng)域的應(yīng)用提高了數(shù)據(jù)可靠性,為視頻深化應(yīng)用提供了高可用及在線擴(kuò)容等保證,可將視頻監(jiān)視系統(tǒng)的價值水平帶入新的階段。