為什么要用Lambda Architecture
在大數據處理系統中,數據處理的可靠性和實時性是一對矛盾,往往不可兼得。可靠性是指在任何異常出現的情況下,數據處理都能夠做到不重不丟,并且最終得到準確的結果。實時性是指數據從輸入到處理完畢輸出的時間間隔。一般來說,對于像Hadoop MapReduce這樣的批處理系統來說,可靠性很高,而實時性很差;對于Storm這樣的流式處理系統來說,則情況正好相反。
那么,有沒有辦法使得數據處理系統即可以做到高可靠,又可以做到低延遲呢?Lambda Architecture就是這個問題的答案。
Lambda Architecture是為了滿足如下需求:
- 系統故障或人為錯誤不丟數據
- 數據分析低延遲
- 系統具備線性擴展能力
- 系統中很容易增加新特性
Lambda Architecture是什么
如上圖所示,Lambda Architecture由batch layer、speed layer、serving layer組成。在輸入端集中接收數據,并拷貝數據,分別導入到batch layer和 speed layer。
Batch Layer
Batch layer的職責是保證數據處理的準確性和可靠性。
Batch layer首先把數據以其原始格式存儲在HDFS上,以加強系統的可靠性。然后,利用Hadoop MapReduce作業對數據進行處理,并將結果保存起來(這種處理之后的數據稱之為batch view)。Hadoop作業具有很好魯棒性,在運行過程中出現各種異常時都不會損失數據。對于存儲系統來說,這種批處理方式只需要隨機讀、追加寫,不需要處理隨機寫、加鎖、數據一致性等問題,因此大大簡化了存儲系統的設計。但是batch layer對數據處理的延遲是很大的,通常是幾個小時到幾天。
Speed Layer
Speed layer的職責是滿足所有實時性處理的需求。
Speed layer通常基于Storm這樣的流式計算平臺,通過快速的增量式算法,以分鐘級、秒級甚至毫秒級來讀取、分析、保存數據。對于存儲系統,由于需要支持持續的update操作,其設計要復雜的多。為了簡化問題,通常使用劃窗機制來保存一段時間的數據,劃窗的時間一般和batch layer的數據處理一致。
流式處理往往使用內存計算,這意味著當出現異常(比如升級或工作節點異常)時,可能會導致數據的丟失或計算結果錯誤。然而,Lambda Architecture卻不需要過多考慮這類問題,因為下一次batch layer的作業會再次處理所有數據并獲得準確的結果。
Serving Layer
Serving layer的職責是將speed layer輸出數據merge到batch layer輸出數據上,從而得到一份完整的輸出數據,并保存到諸如HBASE這樣的NoSQL數據庫中,以服務于在線檢索應用。在batch計算結果之上meger少量實時數據,其結果同完全使用batch計算相比,具有很好的近似性。
Lambda Architecture的收益
Lambda Architecture帶來了如下收益:
- 算法可以同時分析歷史數據和短期實時數據,兼顧了準確性和實時性
- 向存儲介質的隨機寫入大大減少了,提升了性能
- Batch Layer(在HDFS上)保存了原始數據,可以避免人為錯誤造成的數據損失
當然,獲得這些收益也是有代價的。Batch layer和speed layer事實上做了重復的計算。從資源的角度看,Lambda architecture消耗了更多的資源。
Lambda Architecture在產品中的應用案例
上圖是一個用戶畫像產品的大數據處理架構的簡化版本,略去了和這個主題無關的部分。可以看到這個產品采用了典型的Lambda Architecture:
- Bigpipe百度自研的分布式流式數據傳輸系統,實時傳輸在線系統的日志,下游可以通過訂閱的方式來獲取數據。Bigpipe保證數據在傳輸過程中不重不丟。
- Data Warehouse是基于HDFS的數據倉庫,保存收到的所有原始數據。
- Batch layer:一系列的Hadoop App完成用戶特征的挖掘,App之間通過HDFS來交換數據。Batch layer每天運行一次,數據的延遲是一天。
- Speed layer:利用百度自研的DStream實時流式計算平臺,完成當天用戶特征的實時挖掘。
- MolaDB是百度自研的一個面向在線業務的低延遲KV數據庫,存儲挖掘后用戶特征,并為在線系統提供服務。
- Search Router是在線業務的檢索入口,根據在線業務的檢索請求查詢MolaDB。
通過采用Lambda Architecture,即實現了海量用戶畫像數據的實時處理,同時也最大限度的保證了系統的可靠性。
參考資料
- [Lambda Architecture][1]
- [Lambda Architecture: Achieving Velocity and Volume with Big Data][2]
[1]: https://www.mapr.com/developercentral/lambda-architecture
[2]: http://www.semantikoz.com/blog/lambda-architecture-velocity-volume-big-data-hadoop-storm/