Lambda Architecture 概念
Mathan Marz的大作Big Data: Principles and best practices of scalable real-time data systems介紹了Lambda Architecture的概念,用于在大數據架構中,如何讓real-time與batch job更好地結合起來,以達成對大數據的實時處理。
大數據平臺中包括批量計算的Batch Layer和實時計算的Speed Layer,通過在一套平臺中將批計算和流計算整合在一起。
例如使用Hadoop MapReduce、Spark進行批量數據的處理,使用Apache Storm、Spark Streaming 進行實時數據的處理。
這種架構在一定程度上解決了不同計算類型的問題,但是帶來的問題是框架太多,會導致平臺復雜度過高、運維成功高等。
Lambda架構的主要思想就是將大數據系統構建為多個層次,如下圖所示:
我們來梳理一下他們是如何分工協助的:
首先new data作為整個數據系統的數據源頭,Batch Layer作為數據的批處理層次對原始數據進行加工與處理,并且將處理的數據結果的Batch View輸入到Serving Layer。(這里對應的是全量數據)
Speed Layer對于實時增加的數據進行處理,生成對增量數據計算結果的Real-time View。(這里對應的是增量數據)
最終用戶查詢是通過Batch View與Real-time View相結合的形式將最終結果呈現出來。
基于Lambda架構,一旦數據通過Batch layer進入到Serving layer,在Real-time view中的相應結果就不再需要了。
小 結
Lambda架構結合了實時處理與批處理的結果,很好的反饋了查詢需求,并且在速度和可靠性之間求取了平衡,具有足夠的擴展性。理想狀態下,所有的查詢都可以定位成一個函數:
Query = Function(Data)
但是,若數據達到相當大的一個級別(例如PB),且還需要支持實時查詢時,就需要耗費非常龐大的資源。
而Lambda架構將數據和計算系統進行細分:
Query = Batch(Old_Data) + RealTime(New_Data)
但是這種架構同樣存在一些問題:需要運維兩套不同的計算系統,并且合并查詢結果,這一定程序上帶來了復雜性的增加。