陳希 楊世登 吳志力
摘 要 隨著運維領域數據采集技術的不斷更新,出現了大量實時的非結構化數據,這些實時產生的數據如同流水一樣源源不斷地流入到數據倉庫。如何實時獲取運維數據流中的關鍵信息,并實現快速精準分析至關重要。單靠當前傳統的批處理模式很難實現。所以,一種全新的分布式流計算處理模式應運而生,這種處理模式以其良好的擴展性、靈活性、易用性受到業界的歡迎。本文基于分布式流計算技術,采用了插件式可配置的設計理念,構建了分布式的運維分析系統。通過可配置化的資源管理,實現新的監控資源自動注冊、匯總注冊節點、快速分析、處理、計算,實現對運維數據的實時展現。
【關鍵詞】運維 管理 數據分析 分布式流計算
1 系統設計介紹
分布式流計算系統在各大科技公司擁有無可替代的重要地位,尤其是在在線及近線的海量數據處理上。低延時高可靠是其核心指標。
Spark是一種支持流式計算、批處理和實時查詢的計算系統。僅使用一個通用的stack就能夠解決一系列問題,同時減少開發及維護成本。除了Spark以外,Twitter的Storm也是比較出名的流式計算系統。
1.1 Spark的設計
Spark Streaming指的是將流式計算分解成一段段的、短小的批處理作業。Spark是這里的批處理引擎,負責把Spark Streaming中的輸入數據按照批處理尺寸(比如1秒鐘)切成一段段數據,每一段數據又轉換成RDD,然后Spark Streaming會將DStream的Transformation操作轉換為對RDD的Transformation操作,最后中間結果會保存在內存中。用戶可根據業務需求,決定是否將整個流式計算的中間結果進行疊加,又或者直接放到外部存儲上。
1.2 Storm的設計
Storm是將Stream流中的事件抽像為元組,而每個Stream流都有一個Stream源,這個源被抽像為Spout,Spout可能裝載的是日志文件,也有可能是不斷讀取隊列消息并加工為Tuple。Bolt負責處理數據,Bolt理論上可以消費任意數量的輸入流。
Storm的核心抽象就是將Stream流的源頭抽像為Spout,再將Stream流的中間狀態抽像為Bolt,只要將流的方向指向對應的Bolt,同時它也可以發送新的流給其他 Bolt 使用。Spout和Bolt構成了Storm的最高層次抽像Topology,一個Topology就是一個流的轉換圖。
1.3 設計的要點
設計系統時,有幾個要點需要特別注意,那就是在定義計算拓撲的同時,要兼顧數據如何流動。要方便算法開發人員開展工作,最好是能定義一個算法與框架的交互方式,定義好算法的輸入和輸出結構。然后拓撲能夠組合不同的算法,以便為用戶提供統一的服務。計算平臺最重大的意義就在于算法開發人員無需了解程序的運行處理方式,只需提供算法與計算邏輯即可高速、可靠地處理海量數據。流式系統最重要的抽象就是Streaming。那么Steaming如何流動?實際上這涉及到消息的傳遞和分發。數據如何從一個節點傳遞到另外一個節點是由拓撲定義的,具體實現可以參照下一小節。
2 消息傳遞和分發
如何設計數據之間的消息傳遞?通過對比Storm和Spark,我們就能明白消息傳遞和分發是取決于具體系統來實現的。
2.1 Spark的消息傳遞
Spark的消息傳遞是通過將用戶定義的數據先轉換成RDD DAG,由DAG Scheduler 把RDD DAG轉化為Stage DAG,每個Stage中包含了一組相同的Task,這便構成了TaskSet,然后TaskSet中的Task被分發到Executor中去執行Stage中包含的算子。最終,轉換到開發人員的工作就是事先定義好一系列的RDD,再在RDD上做相應的轉化規則,最后系統會將所有的RDD批量放到Spark集群中去運行。
2.2 Storm的消息傳遞
Storm消息傳遞機制是單獨用一個線程負責執行反序列化并執行用戶邏輯,每個Worker都會有一個端口,用于監聽接收到的消息并放到消息的目標Task的反序列化隊列中。Storm有六種消息分發模式,分別是Shuffle Grouping、Fields Grouping、All Grouping、Global Grouping、Non Grouping和Direct Grouping。
2.3 消息傳遞要點
消息隊列是實現多服務間通信的一個非常通用的解決方案,它使得事務可接受異步處理,應用程序耦合度低,這對于分布式系統尤為重要,畢竟我們不能過于限制應用僅僅部署在同一臺物理機上,從而限制了其橫向擴展。
3 如何與企業現有的運維系統進行融合
國內各大科技企業,像BAT其實都有應用Spark和Storm。但是它究竟貢獻了多少流量,我們無從得知。實際上,大部分的流量,尤其是核心流量還是沿用公司老架構的。
雖然這些公司迭代產品很快,但核心算法和架構基本沒有改動太多,因此企業不太可能為了推Storm和Spark這類開源系統而進行大規模的重新開發。只有從零發起的項目,又或者那些小型的試驗性項目才有可能采用此類產品。當然了,因為開源產品是“通用”的平臺,這就意味著不能達到較高的生產效率,因為它無法針對某些特殊應用場景或需求去進行優化。因此企業最好具備高效開發切合自身需求系統的能力。
4 結論
本文為提升運維數據分析的實時性,引入了分布式流式計算技術。結果表明,本文提出的方法不僅大大縮短了任務的調度時間,顯著提升了平臺性能,而且此方法還具有非常強的通用性,極大地提升了系統監控實時性。本文研究的內容已經應用實際工程,并在項目工程中得到較好的測試驗證,進一步證明系統研究內容是可行且具有一定實際工程價值的。
參考文獻
[1]梁奕,李立,宋真祥.基于分布式流計算的路網指揮中心系統數據處理技術[J].城市軌道交通研究,2016(03).
[2]鄒志勇.分布式流計算框架容錯功能的設計與實現[D].北京郵電大學,2011.
作者簡介
陳希(1981-),女,廣東省深圳市人。大學本科學歷。現深圳市脈山龍信息技術股份有限公司副總經理。研究方向為計算機軟件及計算機應用,互聯網技術。
作者單位
深圳市脈山龍信息技術股份有限公司 廣東省深圳市 518000