張天宇,宋 明,張 強,張利飛
隨著大數據、云計算、物聯網等技術的快速發展,鐵路綜合視頻監控系統規模迅速擴大,現有視頻圖像系統的規模、架構、系統應用已不能滿足新形勢的要求,鐵路綜合視頻云存儲系統的搭建勢在必行。
云存儲技術是云計算技術在概念上的擴展和延伸。云計算是一種基于Internet 的計算,以分布式計算、網格計算為基礎,融合負載均衡、并行計算、虛擬化、網絡存儲等技術。而云存儲則是一種云狀結構的存儲系統,通過集群應用、分布式文件等技術,將網絡中不同類型的存儲設備集合進行協同工作,并通過協議接口對外提供業務訪問和數據存儲備份等工作[1]。云存儲技術能夠很好地處理數據冗余和復制,具有良好的可擴展性,可以有效節約成本,提高部署效率。當云計算系統處理的計算和業務是對大量數據進行存儲和管理時,云計算系統即可看成為云存儲系統。云存儲系統功能結構見圖1。

圖1 云存儲系統功能結構
相比于僅含有硬件資源的傳統存儲,云存儲系統集合了網絡設備、存儲設備、服務器、公網訪問接口和用戶客戶端程序等多個部分,其功能結構可分為4 層:第1 層為存儲層,可以由多種不同類型的存儲設備構成,由一個統一的管理平臺進行管理,用于實現設備虛擬化、多鏈路冗余優化和設備狀態監控及維護;第2 層為基礎管理層,是最核心的部分,通過集群、網格計算和分布式文件系統,實現存儲設備的協同工作,提供良好的設備訪問性能,并通過內容分發系統、數據加密技術和多種備份容災措施,保證數據的安全性、完整性和穩定性;第3 層為應用接口層,對外提供各種應用服務;第4層為訪問層,提供用戶不同的訪問權限。
目前,云存儲系統已在京張和京雄2 條新建線路進行部署,滿足《鐵路綜合視頻監控系統技術規范》[2](Q/CR 575-2017)的相關技術要求。現有鐵路視頻監控用云存儲系統結構見圖2。

圖2 現有鐵路視頻監控用云存儲系統結構
系統采用的是分布式存儲Ceph 框架。Ceph 是一個高度集成的框架,將云存儲需要的各個層級進行整合,主要由基礎管理層的監視器設備、元數據存儲設備和存儲層的對象存儲設備構成。其中,對象存儲設備負責對數據進行存儲、復制、轉發和恢復,并定時上報給監視器設備;監視器設備負責對集群進行檢測維護,對集群中的成員進行管理,并對成員屬性相關的信息進行分發,當有新的數據需要進行存儲時,會根據對象身份信息和當前存儲狀態分配存儲地址;元數據存儲設備主要針對于文件存儲,一般情況下不使用。
除了直接訪問外,Ceph 對外提供以下存儲接口[3]。
1)Radosgw(對象存儲接口):提供Restful(表述性狀態轉移)接口,可以綁定多種編程語言,兼容S3(AWS 內的對象存儲) 和Swift(openstack內的對象存儲)接口。
2)Rbd(Rados 塊存儲):物理主機和虛擬機可直接作為磁盤掛載,內置了容災機制。
3)CephFS(文件系統):提供POSIX 兼容的網絡文件系統CephFS,專注于高性能、大容量存儲。
Ceph采用Crush算法(基于偽隨機控制數據分布、復制的算法)替代分布表,最大化地分離數據與元數據管理,數據存儲位置都是通過計算獲得,而不是查詢專門的元數據服務器,緩解了Hash 算法處理存儲設備增刪時帶來的數據遷移問題[4]。此外,Ceph 采用了動態子樹區分的元數據集群架構,其智能分配職責可在幾十個甚至上百個元數據集上管理文件系統目錄結構,將一個動態的分區保留在每個元數據集工作負載中,有效促進了更新和預取,提高了工作負載性能[5]。
Crush 算法支持多副本和糾刪碼(EC)2 種數據冗余技術。
多副本技術采用對數據進行切片[6]的方法進行劃分,再將每個切片生成多個副本存儲于不同的節點中。在高并發訪問時,系統能夠從最近的節點獲得數據,從而在保證數據可靠性的基礎上有效提高系統性能;但是會占用過多的磁盤資源,能耗較高,有效利用率較低。以三副本為例,存儲空間利用率僅為33%。
糾刪碼技術是通過數據計算的方式來實現高可用性[7]。當前鐵路視頻監控系統云存儲就是采用該技術進行數據冗余存儲。假設,源數據總數為n,冗余級別為n+m,表示該系統中有m個校驗塊。m個校驗塊由n個源數據塊計算出,然后將n+m個數據塊分別存放在n+m個節點上。當系統中任意一個或多個節點發生故障時,可任意選取n個正常的數據塊就可恢復源數據。當系統中2 個節點同時故障時,則m=2即可。從空間利用率上來看,EC優于多副本技術。以4+2 為例,空間利用率為4/(4+2)=67%,這個利用率相當于三副本的2 倍。從可靠性上來看,4+2 與三副本一樣,系統可以允許2個節點同時故障[8]。
目前,主要應用的糾刪碼有RAID(陣列糾刪碼)、RS(里德-所羅門類糾刪碼)和LDPC(低密度奇偶校驗糾刪碼)。其中,LDPC 碼在處理高錯誤率的輸入數據時表現優異,而處理常用的低錯誤輸入數據時會進行頻繁修正,加大系統開銷,因此LDPC碼只在特定的場景使用[9]。
3.2.1 RS糾刪碼
RS 糾刪碼是最常用,也是云存儲最具代表性的一種碼。RS 是通過(n×m)編碼矩陣,利用n個源數據塊生成m個校驗塊。RS(5,3)編碼過程見圖3,其中B 為編碼矩陣,向量D 為源數據,C1、C2、C3為生成的校驗數據塊[10]。

圖3 RS編碼過程
當系統或磁盤故障造成數據塊丟失時,通過等式兩側同乘矩陣B的逆矩陣來進行恢復。例如,當數據塊D2、D3和校驗塊C1丟失時,刪除編碼矩陣B 中丟失的數據塊和編碼塊所對應的行,形成新的編碼矩陣B1,見圖4。

圖4 數據塊D2、D3和校驗塊C1丟失時的編碼矩陣
等式兩側同乘矩陣B1的逆矩陣B1-1,可以恢復數據塊D2、D3,如圖5所示。最后再對恢復的數據塊重新進行RS編碼得到校驗塊C1。

3.2.2 RAID糾刪碼
RAID 是由多個磁盤驅動器構成的存儲空間[11]。雖然由多個磁盤構成,但是對于計算機系統可看作是一個存儲空間。RAID 可以將相同數據鏡像存儲于多個磁盤,因此讀取和寫入都需要同時調用多個盤。傳統鐵路視頻數據存儲一直采用RAID 來保證數據的可靠性。當單個磁盤損壞需要重構時,RAID 根據剩下的磁盤中的校驗數據恢復損壞磁盤中的數據。雖然RAID 這種犧牲存儲空間來換取可靠性的方式保證了數據的完整性,但同時也使磁盤的空間利用率降低,因此在應用中要結合實際需求進行設計。
3.2.3 RS與RAID對比
RS 和 RAID 技術[12]的實現方法類似,一段完整的數據由n個數據塊和m個校驗塊構成。二者的對比如下。
1)RS 的校驗塊和數據塊的比例按n+m可調整。比如,RAID6 最多2 個檢驗塊,而RS 可以是3個、4個甚至更多。
2)RS采用多對多的重構技術,重構時間可縮短至分鐘級。而RAID 的磁盤重構時間則需要花費數小時。
3)相對于RAID,RS 不需要準備單獨的熱備盤,當磁盤有足夠的剩余空間時,剩余空間均可作為熱備盤直接參與讀寫。
RS 碼很大程度上減少了存儲開銷,在進行數據重構時雖然縮短了大量時間,但是會占用大量的網絡傳輸資源。通過糾刪碼原理可知,對于采用n+m的糾刪碼,當出現磁盤故障需要進行重構時,修復一個數據塊需要進行n倍的數據讀寫,這樣會占用磁盤大量的I/O 資源,使磁盤瞬時讀寫壓力增大,破壞磁盤集群的穩定性。
在實際應用中可嘗試對磁盤進行劃分,采用局部修復碼(LRC)技術,在RS 的基礎上進行優化,從而降低修復帶寬和磁盤I/O。
LRC 是一種雙層結構碼,由全局校驗碼和局部校驗碼構成[13]。LRC(n,m,l)表示源數據塊數為n,全局校驗碼塊數為m,局部校驗碼塊數為l。全局校驗碼的生成同糾刪碼類似,通過n個源數據塊生成。局部校驗碼則由各個分組中的源數據塊生成。LRC(12,2,2)碼原理圖見圖6。

圖6 LRC(12,2,2)碼原理圖
首先12份源數據塊D1,D2,…,D12通過RS編碼生成2份全局校驗數據E1和E2。然后將12份源數據塊分成2組,分別通過RS編碼生成各自分組的局部校驗塊C1和C2。相比于采用RS 編碼的RS(12,4),當1 個磁盤發生故障時,RS(12,4)需要12塊數據才能恢復數據,而LRC(12,2,2)只需要6個數據塊,磁盤I/O和帶寬占用量減少了一倍。
因此對于原有采用n+m的RS 糾刪碼,當多個磁盤發生故障時,采用LRC 編碼方式的平均磁盤I/O 縮小為原來的其中k為局部校驗塊個數,即源數據的分組數。因此,相應的帶寬占用量也遠小于RS編碼。但采用LRC 碼的弊端在于,過多的引入局部校驗塊不僅增加磁盤占用空間,而且會提高數據損壞的風險,因而在實際應用中需要合理設置。
本文對當前鐵路視頻監控用云存儲技術進行了分析,對北京—張家口、北京—雄安2 條鐵路的云存儲中所采用的Ceph 框架進行了介紹,并對在Ceph框架中應用算法的EC糾刪碼技術的實現進行了詳細分析,并提出了采用LRC 技術對現有的云存儲系統進行優化,從而降低修復帶寬和磁盤I/O,有效地提高視頻監控系統中云存儲性能。