石蕊,崔圣青
(1.北京浩瀚深度信息技術(shù)股份有限公司,北京 100142;2. 中國鐵路濟(jì)南局集團(tuán)有限公司 濟(jì)南通信段,山東 濟(jì)南 250000)
在鐵路大數(shù)據(jù)時代,隨著攝像機(jī)部署數(shù)量和視頻圖像質(zhì)量的不斷提高,以及反恐防控對鐵路視頻數(shù)據(jù)存儲時間延長到90 d的要求,使視頻存儲數(shù)據(jù)量激增。這些不斷增長的數(shù)據(jù)有90%以上都是不常訪問的數(shù)據(jù),稱之為冷數(shù)據(jù),如果采用磁帶庫或藍(lán)光光盤的離線方案進(jìn)行存儲,數(shù)據(jù)回放的響應(yīng)時間較長,不適用于鐵路視頻監(jiān)控的應(yīng)用場景。如果采用傳統(tǒng)的在線存儲系統(tǒng),將在能源消耗、硬件購置成本及空間利用率等方面面臨很大挑戰(zhàn)。冷存儲同上述方案相比,具有顯著優(yōu)勢,其低功耗及近似在線存儲的性能,可同時解決上述2種方案面臨的難題,大幅度降低總體擁有成本(TCO)。在實際應(yīng)用中,不論是既有存儲擴(kuò)容還是新建存儲系統(tǒng),冷存儲均可以通過文件系統(tǒng)接口和監(jiān)控平臺進(jìn)行無縫對接,以最優(yōu)的方式延長數(shù)據(jù)存儲時間。
通常將數(shù)據(jù)按照訪問頻率分為“冷”“溫”“熱”三大類,在鐵路綜合視頻監(jiān)控系統(tǒng)(簡稱視頻監(jiān)控系統(tǒng))中,1周、1個月及1個季度以上的一些數(shù)據(jù)訪問次數(shù)較少,都屬于冷數(shù)據(jù),具體時間界限可根據(jù)實際使用情況和投資量來定。
視頻監(jiān)控系統(tǒng)由視頻節(jié)點(diǎn)(包括視頻核心節(jié)點(diǎn)、視頻區(qū)域節(jié)點(diǎn)、Ⅰ類視頻接入節(jié)點(diǎn)、Ⅱ類視頻接入節(jié)點(diǎn))、視頻匯集點(diǎn)、視頻采集點(diǎn)、承載網(wǎng)絡(luò)和視頻終端(包括視頻管理終端、監(jiān)視終端)組成(見圖1)。視頻監(jiān)控系統(tǒng)接口包括 A、B、C、D、E、F、H、Na接口,其中A、B、H是視頻監(jiān)控系統(tǒng)外部接口,C、D、E、F是視頻監(jiān)控系統(tǒng)內(nèi)部接口,Na是設(shè)備管理接口。冷儲存作為Ⅰ類視頻接入節(jié)點(diǎn)和Ⅱ類視頻接入節(jié)點(diǎn)存儲區(qū)的擴(kuò)展,采用用戶空間文件系統(tǒng)(FUSE)/SMB接口接入到應(yīng)用服務(wù)區(qū)中,與Q/CR 575—2017規(guī)范中接口要求相比,將原Ⅰ類視頻接入節(jié)點(diǎn)和Ⅱ類視頻接入節(jié)點(diǎn)E調(diào)整為E+FUSE/SMB[1-2]。
對于冷存儲技術(shù),采用何種接口方式最大程度地簡化用戶操作,是解決問題的關(guān)鍵。目前的冷存儲系統(tǒng),例如谷歌、微軟等云存儲采用對象存儲,這種存儲以數(shù)據(jù)對象為最小存儲單元,雖然其IO性能好,協(xié)議開銷小,但需要特定的應(yīng)用程序編程接口(API)進(jìn)行訪問,不便于用戶使用。而冷存儲采用的文件系統(tǒng)接口可使用戶方便地在該文件系統(tǒng)內(nèi)進(jìn)行各種文件操作,不需要復(fù)雜的編程開發(fā)。
冷存儲最顯著的特點(diǎn)就是存儲量大,可以支持水平擴(kuò)展,因此必然是由多臺機(jī)器組成的分布式系統(tǒng),而不可能是1臺單獨(dú)的機(jī)器。當(dāng)服務(wù)器端是多臺機(jī)器時,客戶端在連接服務(wù)器時就需要進(jìn)行選擇,在此采用一致性哈希算法來解決。當(dāng)客戶端成功連接服務(wù)器可以對上層提供存儲服務(wù)后,上層軟件如何方便地使用冷存儲提供的存儲空間,則需要采用FUSE文件系統(tǒng)接口方案。
在傳統(tǒng)的存儲系統(tǒng)中,全部數(shù)據(jù)被集中存儲在單獨(dú)的存儲服務(wù)器,其最大的問題就是不容易擴(kuò)展。當(dāng)存儲空間需要增加時,需購買另外一臺更高容量的存儲設(shè)備替換之前的設(shè)備,造成很大的浪費(fèi)和運(yùn)維開銷。
冷存儲的特點(diǎn)之一就是針對大容量存儲而設(shè)計,不依賴于單機(jī)設(shè)備容量,而是由多個獨(dú)立的設(shè)備組成一個存儲集群,形成分布式存儲系統(tǒng)。這樣的分布式系統(tǒng)可支持水平擴(kuò)展,隨時添加新的節(jié)點(diǎn)就能增加系統(tǒng)容量。而且多個設(shè)備之間可以進(jìn)行負(fù)載均衡,每臺設(shè)備可達(dá)到的性能固然是有上限的,但多臺設(shè)備通過負(fù)載均衡就可在整體上達(dá)到更高的性能。多個設(shè)備組成的系統(tǒng)能有效地防止單臺設(shè)備崩潰造成的損失,使系統(tǒng)可靠性更高[3-4]。
圖1 視頻監(jiān)控系統(tǒng)組成及其邏輯接口
圖2 冷存儲分布式系統(tǒng)結(jié)構(gòu)
冷存儲分布式系統(tǒng)結(jié)構(gòu)見圖2,右側(cè)是前置節(jié)點(diǎn)組成的服務(wù)器集群,左側(cè)是存儲節(jié)點(diǎn)組成的存儲集群,用戶的請求首先到達(dá)前置節(jié)點(diǎn),然后通過前置節(jié)點(diǎn)把用戶數(shù)據(jù)分片,發(fā)送到左側(cè)存儲集群中不同節(jié)點(diǎn)中的多個硬盤進(jìn)行數(shù)據(jù)存儲。雙集群結(jié)構(gòu)是為了在前置服務(wù)器集群中進(jìn)行數(shù)據(jù)分片計算糾刪碼等對性能要求比較高的操作,而在后端存儲節(jié)點(diǎn)僅進(jìn)行數(shù)據(jù)讀寫等基本操作,因此可以大規(guī)模擴(kuò)展后端存儲集群,支持更大的容量,而無需配置很多計算資源,從而達(dá)到最佳的性價比。這是在分布式存儲系統(tǒng)中一種針對冷數(shù)據(jù)場景的獨(dú)特優(yōu)化方案,其他分布式存儲系統(tǒng)都是一個集群,每個獨(dú)立設(shè)備的性能要求都比較高,這樣雖然可以達(dá)到更高的性能,但成本也很高,并不適合大規(guī)模冷數(shù)據(jù)低成本存儲的要求。
在此研究的分布式存儲系統(tǒng)具有多個前置節(jié)點(diǎn)(見圖2右框部分),每個節(jié)點(diǎn)均可處理用戶的操作,為了實現(xiàn)負(fù)載均衡和失效備援,需要有一種機(jī)制來選擇正常的節(jié)點(diǎn)進(jìn)行操作,這種機(jī)制還能夠處理節(jié)點(diǎn)失效、節(jié)點(diǎn)添加等問題,以保證整體服務(wù)正常運(yùn)行。
通常方案采用集中式的信息共享方式,即采用單機(jī)服務(wù)器來保存集群中的節(jié)點(diǎn)狀態(tài),例如集群中有多少臺設(shè)備是正??捎玫?,每臺設(shè)備的負(fù)載情況如何等??蛻舳耸紫认蜻@臺狀態(tài)服務(wù)器發(fā)出申請,狀態(tài)服務(wù)器根據(jù)自己掌握的信息分配1臺具體的服務(wù)器給客戶端,客戶端再正式向這個分配的服務(wù)器發(fā)出業(yè)務(wù)請求。狀態(tài)服務(wù)器集中分配的方式存在2個主要問題:一是形成了單點(diǎn)故障,如果這臺狀態(tài)服務(wù)器崩潰,則整個系統(tǒng)不可用;二是影響性能,每次客戶端都需要建立一個連接申請分配服務(wù)器,這個過程增加了時間消耗、降低了性能。
為解決集中式分配方案的問題,冷存儲系統(tǒng)采用一致性哈希算法進(jìn)行節(jié)點(diǎn)選擇,同時解決節(jié)點(diǎn)增刪帶來的數(shù)據(jù)平衡問題,消除了單點(diǎn)故障,降低了客戶端申請分配服務(wù)器的時間消耗。
2.2.1 哈希算法基本原理
一致性哈希(Hash)用一個圓環(huán)來劃分整個哈希值空間。假設(shè)存在一個值域為0~232-1的哈希函數(shù)(見圖3)。哈希值空間按順時針排序,0和232-1在同一點(diǎn)重合。隨后對各個需要加入集群的服務(wù)器使用哈希函數(shù)進(jìn)行映射,可以通過服務(wù)器之間不同的標(biāo)識作為哈希函數(shù)的輸入(如IP或主機(jī)名),然后進(jìn)行映射,每臺服務(wù)器都能確定自己的位置且互不重合,假設(shè)存在4臺服務(wù)器,進(jìn)行映射后的位置關(guān)系見圖4。
對數(shù)據(jù)和服務(wù)器進(jìn)行算法設(shè)計,使兩者之間有良好的容錯性和可擴(kuò)展性。對數(shù)據(jù)進(jìn)行哈希函數(shù)的映射,計算出該數(shù)據(jù)對應(yīng)哈希值在環(huán)上的位置,從該位置順時針遍歷,遇到的第1臺服務(wù)器就是該數(shù)據(jù)需要連接的服務(wù)器。
圖3 哈希值空間示意圖
圖4 服務(wù)器在哈希值空間上的映射位置
例如,存在Object A、Object B、Object C、Object D 4個數(shù)據(jù)對象,經(jīng)過上述算法后,數(shù)據(jù)和服務(wù)器對應(yīng)關(guān)系見圖5。由一致性哈希算法,數(shù)據(jù)A、B、C、D分別被對應(yīng)到Node A、Node B、Node C、Node D上。
2.2.2 哈希算法容錯性分析
圖5 數(shù)據(jù)和服務(wù)器對應(yīng)關(guān)系
假設(shè)Node D由于某種原因離開了集群,按照一致性哈希算法,數(shù)據(jù)A、B、C依然會找到原來的服務(wù)器,而數(shù)據(jù)D會重新在哈希環(huán)上進(jìn)行尋找,最終會找到Node A。因此,1臺服務(wù)器的崩潰僅對此服務(wù)器到其環(huán)空間中前1臺服務(wù)器的數(shù)據(jù)產(chǎn)生影響,不會對其他數(shù)據(jù)產(chǎn)生影響。如果在存儲時把Object A在Node D和A上都保存一份,則在Node D被從哈希環(huán)上移除時,會由Node A上找到Object A,因此數(shù)據(jù)的可靠性得以大大提高。
如果在系統(tǒng)中增加1臺服務(wù)器Node X(見圖6),此時數(shù)據(jù)A、B、D對應(yīng)的服務(wù)器不會變化,只有數(shù)據(jù)C會重新尋找,最終找到Node X。因此,1臺服務(wù)器的添加僅對此服務(wù)器到其環(huán)空間中前1臺服務(wù)器的數(shù)據(jù)產(chǎn)生影響,不會對其他數(shù)據(jù)產(chǎn)生影響。系統(tǒng)只需要把Object C拷貝一份放到Node X上,就完成了數(shù)據(jù)的重新分布。
圖6 添加服務(wù)器映射關(guān)系
在節(jié)點(diǎn)刪除和添加后,需要按照新的哈希環(huán)來對數(shù)據(jù)進(jìn)行重新分布,稱為數(shù)據(jù)再平衡。從以上例子可知,使用一致性哈希算法,可以保證只有一小部分?jǐn)?shù)據(jù)在節(jié)點(diǎn)的刪除或添加后受到影響,需要拷貝遷移的數(shù)據(jù)也會盡量少。因此采用一致性哈希算法,客戶端選擇節(jié)點(diǎn)更簡單,數(shù)據(jù)再平衡的速度也更快,系統(tǒng)的容錯性和可擴(kuò)展性都能得到保證[5-7]。
文件系統(tǒng)是用來存儲計算機(jī)文件、目錄及其包含數(shù)據(jù)的方法,它使文件目錄和數(shù)據(jù)的搜索和訪問得以簡化。通用操作系統(tǒng)的重要組成部分就是文件系統(tǒng)。傳統(tǒng)上,操作系統(tǒng)在內(nèi)核級別支持文件系統(tǒng),F(xiàn)USE則是實現(xiàn)在用戶態(tài)的文件系統(tǒng)框架。
例如,F(xiàn)USE內(nèi)核模塊的位置和Linux自帶的其他文件系統(tǒng)xfs、ext4等是在一個層次,但后續(xù)操作發(fā)生不同,xfs等文件系統(tǒng)還會持續(xù)在內(nèi)核態(tài)進(jìn)行操作直到硬盤,而FUSE則結(jié)束內(nèi)核態(tài),轉(zhuǎn)而進(jìn)入用戶態(tài)(見圖7)。具體到冷存儲的客戶端開發(fā),則都是與服務(wù)器端的網(wǎng)絡(luò)操作。
圖7 FUSE在Linux系統(tǒng)中的位置
將連接分布式集群的客戶端代碼寫在內(nèi)核態(tài)還是用戶態(tài),會帶來一系列的區(qū)別。首先,內(nèi)核態(tài)的開發(fā)和調(diào)試都比較困難,在內(nèi)核態(tài)出現(xiàn)的問題造成的影響也較大,經(jīng)常造成死機(jī)等后果。其次,內(nèi)核的版本繁多,如果每個內(nèi)核版本都要編寫對應(yīng)的存儲客戶端代碼也是一個繁復(fù)的任務(wù),且容易出錯??紤]到冷存儲的應(yīng)用場景,采用FUSE做用戶態(tài)的存儲客戶端開發(fā),避開了高風(fēng)險的內(nèi)核開發(fā)和繁雜的版本支持,以簡單的方式快速實現(xiàn),并具有較高的通用性[8-11]。
分布式集群、一致性哈希及FUSE文件系統(tǒng)必須協(xié)同工作,冷存儲系統(tǒng)接口工作流程見圖8。
視頻監(jiān)控程序運(yùn)行在一臺服務(wù)器上,該服務(wù)器相對于冷存儲集群來說就是存儲的客戶端,冷存儲集群是服務(wù)端,之間通過網(wǎng)絡(luò)連接。視頻監(jiān)控程序會對多個視頻文件進(jìn)行讀寫,這些文件邏輯上是在視頻監(jiān)控的服務(wù)器上(通過FUSE接口提供的文件系統(tǒng)),但實際上是存儲在冷存儲集群上(通過一致性哈希選擇服務(wù)器,并傳輸給服務(wù)器端進(jìn)行實際存儲),文件的寫入過程如下:
(1)視頻監(jiān)控程序打開一個文件,寫入一些數(shù)據(jù),該請求被操作系統(tǒng)發(fā)送給FUSE內(nèi)核模塊。
(2)FUSE內(nèi)核模塊將寫請求轉(zhuǎn)給FUSE用戶態(tài)程序,在此就是冷存儲集群的客戶端程序。
(3)FUSE用戶態(tài)程序中采用一致性哈希算法,用文件的全路徑作為哈希的參數(shù),計算出1個哈希值,在哈希環(huán)上選擇1臺服務(wù)器進(jìn)行連接。不同的文件會計算出不同的哈希值,也就會選擇不同的服務(wù)器去連接,即可實現(xiàn)負(fù)載均衡。
圖8 冷存儲系統(tǒng)接口工作流程
(4)數(shù)據(jù)通過網(wǎng)絡(luò)被發(fā)送到冷存儲集群的前置機(jī)上,開始在后端進(jìn)行實際的存儲,然后返回結(jié)果給客戶端。
(5)FUSE用戶態(tài)程序收到返回后,發(fā)給FUSE內(nèi)核模塊。
(6)FUSE內(nèi)核模塊收到返回后,發(fā)給上層調(diào)用的視頻監(jiān)控程序。視頻監(jiān)控程序即可得知剛才的數(shù)據(jù)寫入是否成功,然后進(jìn)行相應(yīng)后續(xù)工作。
首先需要對FUSE文件系統(tǒng)和一致性哈希的基本功能進(jìn)行測試,然后測試某款視頻監(jiān)控軟件是否可以平滑遷移到該接口上,最后針對Windows客戶端進(jìn)行測試。
測試方案見圖9。
(1)測試目標(biāo):冷存儲的文件系統(tǒng)與普通的文件系統(tǒng)是否相符,是否可通過一致性哈希達(dá)到失效備援。
(2)測試流程:①下載配置文件。在裝好FUSE的Linux服務(wù)器上,下載存儲系統(tǒng)提供的FUSE配置文件;②掛載。運(yùn)行掛載命令,掛載后可以看到系統(tǒng)分區(qū)多了1個FUSE分區(qū),該命令將存儲系統(tǒng)掛載到相應(yīng)的目錄上,掛載后可以看到文件系統(tǒng)多了1個設(shè)定的分區(qū),接下來用戶即可在該目錄進(jìn)行正常的文件操作;③執(zhí)行文件系統(tǒng)操作;④一致性哈希支持的失效備援。通過關(guān)閉其中1個計算節(jié)點(diǎn),查看剛才的文件內(nèi)容,向文件追加新內(nèi)容,啟動此前被關(guān)閉的節(jié)點(diǎn),再次查看文件內(nèi)容是否有更新。
圖9 測試方案示意圖
(3)測試結(jié)果:每個命令后經(jīng)過查看,文件內(nèi)容均為預(yù)期輸出。
(4)測試結(jié)論:冷存儲的文件系統(tǒng)與普通的文件系統(tǒng)操作相符,可以通過一致性哈希達(dá)到失效備援。
(1)測試目標(biāo):冷存儲系統(tǒng)與鐵路局集團(tuán)公司現(xiàn)有視頻監(jiān)控系統(tǒng)進(jìn)行對接,視頻監(jiān)控軟件可以平滑切換到冷存儲系統(tǒng)上,視頻的錄制和回放正常。
(2)測試流程:①修改視頻服務(wù)的配置文件, 更改存儲的路徑配置,使其指向冷存儲FUSE客戶端的掛載點(diǎn);②啟動視頻監(jiān)控服務(wù),視頻服務(wù)識別到FUSE文件系統(tǒng)后,從視頻服務(wù)的日志中可以看到,之后的分區(qū)即為掛載后產(chǎn)生的新分區(qū);③檢查視頻錄制,確認(rèn)所有攝像頭均正常寫入;④檢查視頻回放,通過視頻軟件可以看到攝像頭的回放視頻(見圖10)。當(dāng)視頻回放出現(xiàn)“加載中”的情況時,說明其讀取到已經(jīng)冷藏的數(shù)據(jù),此時后臺先點(diǎn)亮硬盤,然后從數(shù)據(jù)庫中讀取文件的信息并從硬盤中進(jìn)行讀取,最后將讀取完成的文件返回給視頻回放程序(見圖11)。
(3)測試結(jié)果:按照測試流程進(jìn)行操作,可以看到正常的視頻錄制和回放。
(4)測試結(jié)論:在此研究的存儲系統(tǒng)提供FUSE文件系統(tǒng)接口,為目前大部分第三方服務(wù)提供了極大方便,一般無需修改其程序,即可方便快速地與存儲系統(tǒng)完成對接。
(1)測試目標(biāo):冷存儲系統(tǒng)的客戶端主要應(yīng)用于Linux系統(tǒng)上,為了使Windows用戶也可使用存儲系統(tǒng),其FUSE文件系統(tǒng)還可通過Samba服務(wù)進(jìn)行網(wǎng)絡(luò)共享,將Linux的FUSE文件系統(tǒng)共享到Windows系統(tǒng)上。
圖10 視頻監(jiān)控平臺回放界面
圖11 冷數(shù)據(jù)回放界面
(2)測試流程:①在Linux服務(wù)器進(jìn)行FUSE掛載;②在Linux服務(wù)器進(jìn)行Samba服務(wù)配置;③在Windows服務(wù)器進(jìn)行遠(yuǎn)程登錄,即可訪問FUSE文件系統(tǒng)(見圖12);④在Linux服務(wù)器的掛載目錄可查看到相關(guān)信息。
圖12 共享目錄查看
(3)測試結(jié)果:冷存儲系統(tǒng)的FUSE文件系統(tǒng)可以通過Samba共享給Windows使用。
(4)測試結(jié)論:冷存儲的文件系統(tǒng)可通過Samba共享給Windows使用,提高了冷存儲接口的適應(yīng)性。
隨著鐵路大數(shù)據(jù)的高速發(fā)展,鐵路綜合視頻監(jiān)控系統(tǒng)數(shù)據(jù)存儲成為新的熱點(diǎn),海量的視頻數(shù)據(jù)如何存儲才能降低存儲成本和能源消耗、提升空間利用率,同時又能給用戶帶來便捷的操作體驗是解決方案的關(guān)鍵。在此探討的冷存儲系統(tǒng)可滿足上述需要,系統(tǒng)采用簡單通用的FUSE文件系統(tǒng),通過一致性哈希實現(xiàn)負(fù)載均衡和失效備援,在應(yīng)用中效果良好。