技術創新 Technological Innovation
成都地鐵COCC項目是由成都地鐵運營有限公司主導,由億雅捷深度參與建設的一個線網級綜合監控運營平臺。該平臺監控范圍涉及地鐵運營的所有主要業務指標,包括:行車、客運、設備、能耗等。
其中,客運指標數據來自于ACC系統產生的清分數據,以文件形式實時地發送至COCC數據接口服務器。ACC系統每天會產生大量的數據文件,最大的單體文件尺寸達到數百兆字節。為了滿足實時監控的需求,COCC系統除了要對這些數據進行接收外,還要對這些數據進行實時的計算、處理,以得到準確的預測及預警數據。
在面對如此大數據量的實時處理任務時,傳統的單機程序已很難保證數據處理的及時性和準確性。我們采用了在大數據處理領域常用的處理方法,采用分布式的架構來對ACC客運數據進行實時的流式處理。
一、分布式架構保障系統穩定
如上圖所示,我們的系統采用分布式架構。Zookeeper集群為Kafka及Storm這種分布式程序提供協調及同步服務。Kafka集群在本系統內充當數據緩沖的作用,在被Storm處理之前,數據先緩存在Kafka集群內。Storm集群是一個實時數據處理框架,它以一種類似于管道的方式處理數據,同時可以讓程序開發人員無需考慮底層的分布式實現細節,即可輕松擁有強大的分布式處理能力。
當系統處理效率下降時,只需簡單地通過修改啟動參數、增加集群節點數等方式,來使系統處理能力得到線性提升。同時,因為我們的數據處理任務是運行在Storm集群之上,當集群中任何一個節點出現故障宕機時,未處理完的數據會自動轉到其它節點繼續處理,而不會導致數據丟失或延遲。
二、Storm流式處理框架保障數據被及時處理
Storm采用類似“管道”的方式來處理數據,這種方式也被稱為“流式數據處理”。如上圖所示,每一個拓撲任務,都像一個大樹,樹根是拓撲的源頭,它負責從Kafka接收數據,并進行一些預處理,然后向下游節點分發。下游節點接收到上游分發的數據后,繼續對數據進行處理,處理完成后,將處理存入數據庫。