數據架構設計領域正在發生一場變革,其影響的不僅是實時處理業務,這場變革可能將基於流的處理視為整個架構設計的核心,而不是將流處理只是作為某一個實時計算的項目使用。本文將對比傳統數據架構與流處理架構的區別,並將介紹如何將流處理架構應用於微服務及整體系統中。 傳統數據架構 傳統數據架構是一種中心化 ...
數據架構設計領域正在發生一場變革,其影響的不僅是實時處理業務,這場變革可能將基於流的處理視為整個架構設計的核心,而不是將流處理只是作為某一個實時計算的項目使用。本文將對比傳統數據架構與流處理架構的區別,並將介紹如何將流處理架構應用於微服務及整體系統中。
傳統數據架構
傳統數據架構是一種中心化的數據系統,可能會分為業務數據系統和大數據系統。
業務數據系統存儲事務性數據,比如SQL, NOSQL資料庫,這種數據擁有準確的數據,比如用戶業務,支付業務等體系都可以這樣實現,這類需要經常更新,是整體業務系統支撐的核心。
大數據系統主要負責存儲不需要經常更新的數據,由於數據量過大,可能需要Hadoop等大數據框架進行實現,系統會定時的計算結果,比如在每天零點統計用戶訪問量,可能將結果結果寫入SQL資料庫,完成統計工作。
而實時數據系統往往只作為一個某一個項目使用,比如實時日誌報警系統,實時推薦系統。
這樣設計的原因是因為數據處理性能和準確性的限制,在Streaming-大數據的未來一文中曾提到過,由於對事件時間的不可控,我們不能將實時數據作為準確可靠的數據來源。而低延遲的要求將極大的占用系統性能。
這種傳統架構成功地服務了幾十年,但隨著大型分散式系統中的計算複雜 度不斷上升,這種架構已經不堪重負。許多公司經常遇到以下問題。
• 在許多項目中,從數據到達到數據分析所需的工作流程太複雜、太緩慢。
• 傳統的數據架構太單一:資料庫是唯一正確的數據源,每一個應用程式 都需要通過訪問資料庫來獲得所需的數據。
• 採用這種架構的系統擁有非常複雜的異常問題處理方法。當出現異常問題時,很難保證系統還能很好地運行。
而且隨著系統規模擴大,維持實際數據與狀態數據間的一 致性變得越來越困難,需要不斷更新維護全局狀態。
流處理架構
作為一種新的選擇,流處理架構解決了企業在大規模系統中遇到的諸多問題。以流為基礎的架構設計讓數據記錄持續地從數據源流嚮應用程式,併在各個應用程式間持續流動。沒有一個資料庫來集中存儲全局狀態數據, 取而代之的是共用且永不停止的流數據,它是唯一正確的數據源,記錄了業務數據的歷史。在流處理架構中,每個應用程式都有自己的數據,這些 數據採用本地資料庫或分散式文件進行存儲。
這種思路在之前是不可能辦到的,它要求我們對消息有重覆消費的能力,還要保持消息系統的高性能,同時還必須對事件時間做出精確的處理,但是現在我們有了Kafka與Flink,一切都變得簡單了。
流處理項目架構主要是兩部分:消息傳輸層,流處理層。 數據來源是連續的消息流,比如日誌,點擊流事件,物聯網數據。輸出為各種可能的數據流向。
消息傳輸層從各種數據源(生產者)採集連續事件產生的數據,並傳輸 給訂閱了這些數據的應用程式和服務(消費者)。 這種設計使得生產者與消費者解耦,topic的概念,多個源接收數據,給多個消費者使用,消費者不需要立刻處理消息也不需要一直處於啟動狀態。消息傳輸層需要同時具備高性能,持久性,相當於緩衝區,可以將事件數據短期保存起來。而Kafka可以讓高性能和持久性兼得。Offset機制實現了消息持久性,消息可以重播再計算;而基於磁碟緩存的讀寫可以做到高吞吐。
流處理層有 3 個用途:①持續地將數據在應用程式和系統間移動;②聚合併處理事件;③在本地維持應用程式的狀態
Flink兼顧了這些優勢,Apache Flink是一個框架和分散式處理引擎,用於在無邊界和有邊界數據流上進行有狀態的計算。Flink 能在所有常見集群環境中運行,並能以記憶體速度和任意規模進行計算。
將流處理架構應用於微服務與整體系統
應用於微服務
從上文可以知道,流處理架構的消息是從Kafka中流出的流數據。 Flink從消息隊列中訂閱數據並加以處理。處理後的數據可以流向另一個消息隊列。這樣所有的應用都可以共用流數據。
基於流處理的微服務架構也為欺詐檢測系統的開發人員帶來了靈活性。新增加一個數據消費者的開銷幾乎可以忽略不計,同時只要合適,數據的歷史信息可以保存成任何一種格式,並且使用任意的資料庫服務。消息就在反覆使用,處理,持久化中發揮了其最大最高效的作用。
應用於整體系統
事實上,流處理架構的作用遠不止於此,流數據消費者並不僅限於實時應用程式,儘管它們是很重要的一種。
圖中展示了從流處理架構中獲益的幾類消費者。A 組消費者可能做各種實時分析,包括實時更新儀錶盤。B 組消費者記錄數據的當前狀態,這些數據可能同時也被存儲在資料庫或搜索文件中。
比如在電力監控系統中,我們需要實時的對電力故障報警,也需要實時監控電流電壓數據,也需要持久化數據做歷史分析預測等等。
本文簡單對比了傳統數據架構與流處理架構的區別,以及流處理架構的優勢所在,但這種體系也面臨著其複雜性和很多挑戰,深入瞭解Kafka和Flink將使得這一切變得更加簡單。
參考資料:Flink基礎教程
相關文章:
更多實時計算,Flink,Kafka等相關技術博文,歡迎關註實時流式計算