核心的實時架構和基於storm的實時架構的設計.
一、實時的框架簡介
背景
數據流計算來自於一個信念:數據的價值隨着時間的流逝而降低,所以事件出現後必須儘快地對它們進行處理,最好數據出現時便立刻對其進行處理,發生一個事件進行一次處理,而不是緩存起來成一批處理。
核心架構
互聯網上海量數據(一般爲日誌流)的實時計算過程可以被劃分爲以下三個階段:數據的產生與收集階段、傳輸與分析處理階段、存儲對對外提供服務階段。
數據採集(流數據輸入)
主要是爲實時框架提供輸入實時的數據流,秒級別的數據並傳入實時框架。目前,互聯網企業的海量數據採集工具,有Facebook開源的Scribe、LinkedIn開源的Kafka、Cloudera開源的Flume,淘寶開源的TimeTunnel、Hadoop的Chukwa等,均可以滿足每秒數百MB的日誌數據採集和傳輸需求。
- Facebook Scribe
Scribe:https://github.com/facebook/scribe - Cloudera
Flume:https://github.com/cloudera/flume/ - LinkedIn
Kafka:http://sna-projects.com/kafka/ - 淘寶TimeTunne
http://code.taobao.org/p/TimeTunnel/ - Hadoop Chukwa
http://incubator.apache.org/chukwa/
典型實時流計算框架(流數據計算)
目前業界誕生了許多系統,它們仿照MapReduce約束編程模型的方式,爲了獲取更好的執行效率,這些系統包括,微軟的DAG任務計算模型Dryad、Google的圖批量同步處理系統Pregel和增量式計算框架Percolator,Yahoo!的數據流計算系統S4、NYU的共享內存處理系統Piccolo以及Berkeley的交互式實時處理系統Spark等等。
- Twitter Storm
- Yahoo S4
- Facebook Puma
- Puma、Storm和S4三種數據流計算系統對比
典型的三個數據流計算系統Puma、Storm和S4,它們分別適用於站點統計、社交網絡和廣告投放等應用:
上圖從開發語言、高可用機制、支持精確恢復、主從架構、資源利用率、恢復時間、支持狀態持久化及支持去重等幾個方面對這三種系統進行了對比。可以看到,爲了高效開發,兩個系統使用Java,另一種系統使用函數式編程語言Clojure;高可用方案,有兩個系統使用Passive Standby方式,系統恢復時間可控,但系統複雜度增加,資源使用率也較低,因爲需要一些機器用來當備機;而Storm選擇了更簡單可行的上游回放方式,資源使用率高,就是恢復時間可能稍長些;Puma和S4都支持狀態持久化,但S4目前不支持數據去重,未來可能會實現;三個系統都做不到精確恢復,即恢復後的執行結果和無故障發生時保持一致,因爲即使是Passive Standby方式,也只是定期Checkpoint,並沒有跟蹤每條消息的執行。商用的StreamBase支持精確恢復,這主要應用於金融領域。
國內外一起企業的應用情況
- 淘寶的實時計算、流式處理
1. 銀河流數據處理平臺:通用的流數據實時計算系統,以實時數據產出的低延遲、高吞吐和複用性爲初衷和目標,採用actor模型構建分佈式流數據計算框架(底層基於akka),功能易擴展、部分容錯、數據和狀態可監控。 銀河具有處理實時流數據(如TimeTunnel收集的實時數據)和靜態數據(如本地文件、HDFS文件)的能力,能夠提供靈活的實時數據輸出,並提供自定義的數據輸出接口以便擴展實時計算能力。 銀河目前主要是爲魔方提供實時的交易、瀏覽和搜索日誌等數據的實時計算和分析。
2. 基於storm的流式處理,統計計算、持續計算、實時消息處理。
3. 利用HBase實現的online應用。
- 其它
Twitter的Rainbird:Rainbird 是一款分佈式實時統計系統, Rainbird可以用於實時數據的統計:
(1)統計網站中每一個頁面,域名的點擊次數,(2)內部系統的運行監控(統計被監控服務器的運行狀態),(3) 記錄最大值和最小值
官方簡介:http://www.slideshare.net/kevinweil/rainbird-realtime-analytics-at-twitter-strata-2011
中文介紹:http://www.cnblogs.com/gpcuster/archive/2011/02/06/1949466.html
StreamBase:http://www.streambase.com
StreamBase是IBM開發的一款商業流式計算系統,支持精確恢復,在金融行業和政府部門使用
HStreaming:http://www.hstreaming.com/
Esper
esper可以用在股票系統、風險監控系統等等要求實時性比較高的系統中
官方網站:http://esper.codehaus.org/
官網的英文簡介:http://www.espertech.com/products/esper.php
中文簡介:http://www.cnblogs.com/qlee/archive/2011/06/22/2086550.html
實時查詢(流數據查詢、展示結果)
全內存: 直接提供數據讀取服務,定期dump到磁盤或數據庫進行持久化。
半內存: 使用Redis、Memcache、MongoDB、BerkeleyDB等內存數據庫提供數據實時查詢服務,由這些系統進行持久化操作。
全磁盤: 使用HBase等以分佈式文件系統(HDFS)爲基礎的NoSQL數據庫,對於key-value引擎,關鍵是設計好key的分佈*.*
二,基於storm的實時計算框架
基本架構
數據輸入:採用zeromMQ進行傳輸,zeroMQ內部做負載均衡
數據處理:採用storm的spout讀取zeroMQ傳來的數據,bolt進行邏輯的處理
數據結果查詢與展現: 最終所有的log都存儲在HDFS上,邏輯運行的過程中,處理的時間和處理log的數據被保存到mysql中,
實時的log存儲在redis中,供用戶查詢
參考資料
http://wiki.d.xiaonei.com/pages/viewpage.action?pageId=18154309
實時計算一些基本概念
http://www.cnblogs.com/panfeng412/archive/2011/10/28/2227195.html
Beyond MapReduce:談2011年風靡的數據流計算系統
http://www.programmer.com.cn/9642/
對互聯網海量數據實時計算的理解
http://www.cnblogs.com/panfeng412/archive/2011/10/28/realtime-computing-of-big-data.html
淘寶實時流計算
http://www.cnblogs.com/panfeng412/tag/%E5%AE%9E%E6%97%B6%E6%B5%81%E8%AE%A1%E7%AE%97/
Yahoo! s4和Twitter storm的粗略比較
http://www.blogjava.net/killme2008/archive/2011/11/08/363238.html
Cloudera Announces Game-Changing, Real-Time Query on Hadoop and Leads a New Era of Data Management
http://www.msnbc.msn.com/id/49533097/ns/business-press_releases/t/cloudera-announces-game-changing-real-time-query-hadoop-leads-new-era-data-management/