Storm是什麼:
如果只用一句話來描述storm的話,可能會是這樣:分佈式實時計算系統。按照storm作者的說法,storm對於實時計算的意義類似於hadoop對於批處理的意義。我們都知道,根據google mapreduce來實現的hadoop爲我們提供了map, reduce原語,使我們的批處理程序變得非常地簡單和優美。對比Hadoop的批處理,Storm是個實時的、分佈式以及具備高容錯的計算系統。同Hadoop一樣Storm也可以處理大批量的數據,然而Storm在保證高可靠性的前提下還可以讓處理進行的更加實時;也就是說,所有的信息都會被處理。Storm可以擴展到不同的機器上進行大批量的數據處理,他同樣還有其他一些特性。
Storm的架構:
Storm的集羣由一個主節點和多個工作節點組成。主節點運行了一個名爲“nimbus”的守護進程,用於分配代碼、佈置任務及故障檢測。每個工作節點都運行了一個名爲“supervisor”的守護進程,用於監聽工作,開始並終止工作進程。Nimbus和Supervisor都能快速失敗,而且是無狀態的,這樣一來他們都變得十分健壯,兩者的協調工作是由Zookeeper來完成的。Zookeeper用於管理集羣中的不同組件。ZeroMQ是內部消息系統,JZMQ是ZeroMQ的Java Binding。有個名爲storm-deploy的子項目,可以在AWS上一鍵部署Storm集羣。
Storm優勢:
a.簡單的編程模型。類似於MapReduce降低了並行批處理複雜性,Storm降低了進行實時處理的複雜性。
b.服務化,一個服務框架,支持熱部署,即時上線或下線App。
c.可以使用各種編程語言。你可以在Storm之上使用各種編程語言。默認支持Clojure、Java、Ruby和Python。要增加對其他語言的支持,只需要實現一個簡單的Storm通信協議即可。
d.容錯性。Storm會管理工作進程和節點故障。
e.水平擴展。計算是在多個線程、進程和服務器之間並行進行的。
f.可靠的消息處理。Storm保證每個消息至少能得到一次完整處理。任務失敗時,它會從消息源重試消息。
g.快速。系統的設計保證了消息能得到快速的處理,使用ZeroMQ作爲其底層的消息隊列。
h.本地模式。Storm有一個“本地模式”,可以在處理過程中完全模擬Storm集羣。這讓你可以快速進行開發和單元測試。
Storm存在的問題:
a、目前的開源版本中只是單節點nimbus,掛掉只能自動重啓,可以考慮實現一個雙nimbus的佈局。
b、Clojure是一個在JVM平臺運行的動態函數式編程語言,優勢在於流程計算,Storm的部分核心內容由Clojure編寫,雖然性能上提高不少但同時也提升了維護成本。
storm的適用場景:
流數據處理。Storm可以用來處理源源不斷流進來的消息,處理之後將結果寫入到某個存儲中去。
分佈式rpc。由於storm的處理組件是分佈式的,而且處理延遲極低,所以可以作爲一個通用的分佈式rpc框架來使用。當然,其實我們的搜索引擎本身也是一個分佈式rpc系統。
Storm記錄02-- Storm是什麼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.