2016/8/8

Lambda Architecture


Lambda Architecture 這個名詞是 Storm 開發者 Nathan Marz 提出的,用來說明一個 generic, scalable and fault-tolerant data processing architecture 的 high level design 系統架構,這也是他在 Backtype 及 Twitter 多年進行分散式資料處理系統的經驗,而得到的一個一般化的架構結論。


基本概念


Lambda Architecture 的基本概念就是以下這個等式。


query = function(all data)

根據一個查詢的 function,對一個龐大的資料來源,進行分析與查詢,得到查詢後的結果,以往在大數據的資料分析中,都是先收集資料,將資料以 batch 的方式,存放在一個大數據資料庫中,然後資料分析人員再進入這個資料庫,進行數據分析。


然而因為資料收集的來源太多,資料量太大,往往取得資料時,已經過時了,一瞬間就成為了歷史資料。但在資料分析中,還有一些需求,希望能得到更即時的查詢結果,例如最近這 5 mins 的交易量,上線人數。


這時候,同樣的原始資料,必須要用另一種更快的方式處理,也就是以更快速的資料收集方式,只收集最近的資料,查詢也是針對最近的資料進行查詢。


雖然跟原本的歷史資料的資料來源都一樣,但是快速處理即時資料的部分,並不在意太久以前的歷史,所以他會直接將過時的資料丟掉,只保留最新的資料持續進行分析。


架構圖


以下五種架構圖分別來自不同的網頁(參考 references),都是在描述一個 Lambda Architecture 的架構組成。



  1. 進入系統的 data 分別傳入 batch 及speed layer,用以繼續後續的資料處理
  2. batch layer 有兩個功能:(1) 管理 master dataset,這是一個不能被修改而且只能一直增加的 raw dataset (2) 預先產生 batch view,讓 query 能做簡易的查詢
  3. serving layer 會整理 batch views,讓 query 能以 low-latency, ad-hoc 的方式查詢資料
  4. speed layer 彌補了 serving layer 更新速度太慢的問題,專注在處理最近的資料
  5. query 能夠整合 batch view 以及 real-time view 資訊的查詢結果




這個架構圖跟 Lambda Architecture 原始網站的架構一樣,但更精確地把上面五點文字說明的部分填寫到圖形上。





這是個簡化的架構圖。





跟第二個架構圖一樣,網頁上同時提供了每一個 layer 可能的系統,不過這個網頁已經是三年前的資訊了,現在應該有更好的解決方案


  1. batch layer: Apache Hadoop
  2. serving layer: Cloudera Impala
  3. speed layer: Storm, Apache HBase




這個架構圖比較明確地說明 spark 的 Lambda Architecture。


前端的原始資料以 Flume 或 Kafka 進行資料分流,分別導入 Spark Streaming data source 以及 HDFS 進行儲存,Spark Application 同時使用 HDFS 以及 Flume 或 Kafka 的資料進行分析,最後將分析後的資料存放到 HBase,提供並展示 Real-Time 分析結果。


Reference


Lambda Architecture


The Lambda architecture: principles for architecting realtime Big Data systems


Lambda Architecture: Achieving Velocity and Volume with Big Data


Lambda Architecture with Apache Spark


Apache Spark: Usage and Roadmap in Hadoop