Twitter將Storm正式開源了,這是一個分佈式的、容錯的實時計算系統,它被託管在GitHub上,遵循 Eclipse Public License 1.0。Storm是由BackType開發的實時處理系統,BackType如今已在Twitter麾下。GitHub上的最新版本是Storm 0.5.2,基本是用Clojure寫的。php
Storm爲分佈式實時計算提供了一組通用原語,可被用於「流處理」之中,實時處理消息並更新數據庫。這是管理隊列及工做者集羣的另外一種方式。 Storm也可被用於「連續計算」(continuous computation),對數據流作連續查詢,在計算時就將結果以流的形式輸出給用戶。它還可被用於「分佈式RPC」,以並行的方式運行昂貴的運算。 Storm的主工程師Nathan Marz表示:node
Storm能夠方便地在一個計算機集羣中編寫與擴展複雜的實時計算,Storm之於實時處理,就比如Hadoop之於批處理。Storm保證每一個消息都會獲得處理,並且它很快——在一個小集羣中,每秒能夠處理數以百萬計的消息。更棒的是你可使用任意編程語言來作開發。
Storm的主要特色以下:git
Storm集羣由一個主節點和多個工做節點組成。主節點運行了一個名爲「Nimbus」的守護進程,用於分配代碼、佈置任務及故障檢測。每一個工做節 點都運行了一個名爲「Supervisor」的守護進程,用於監聽工做,開始並終止工做進程。Nimbus和Supervisor都能快速失敗,並且是無 狀態的,這樣一來它們就變得十分健壯,二者的協調工做是由Apache ZooKeeper來完成的。github
Storm的術語包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。Stream是被處理的數據。Sprout是數據源。Bolt處理數據。Task是運行於Spout或Bolt中的 線程。Worker是運行這些線程的進程。Stream Grouping規定了Bolt接收什麼東西做爲輸入數據。數據能夠隨機分配(術語爲Shuffle),或者根據字段值分配(術語爲Fields),或者 廣播(術語爲All),或者老是發給一個Task(術語爲Global),也能夠不關心該數據(術語爲None),或者由自定義邏輯來決定(術語爲 Direct)。Topology是由Stream Grouping鏈接起來的Spout和Bolt節點網絡。在Storm Concepts頁面裏對這些術語有更詳細的描述。數據庫
能夠和Storm相提並論的系統有Esper、Streambase、HStreaming和Yahoo S4。其中和Storm最接近的就是S4。二者最大的區別在於Storm會保證消息獲得處理。這些系統中有的擁有內建數據存儲層,這是Storm所沒有的,若是須要持久化,可使用一個相似於Cassandra或Riak這樣的外部數據庫。apache
入門的最佳途徑是閱讀GitHub上的官方《Storm Tutorial》。 其中討論了多種Storm概念和抽象,提供了範例代碼以便你能夠運行一個Storm Topology。開發過程當中,能夠用本地模式來運行Storm,這樣就能在本地開發,在進程中測試Topology。一切就緒後,以遠程模式運行 Storm,提交用於在集羣中運行的Topology。Maven用戶可使用clojars.org提供的Storm依賴,地址是 http://clojars.org/repo。編程
要運行Storm集羣,你須要Apache Zookeeper、ØMQ、JZMQ、Java 6和Python 2.6.6。ZooKeeper用於管理集羣中的不一樣組件,ØMQ是內部消息系統,JZMQ是ØMQ的Java Binding。有個名爲storm-deploy的子項目,能夠在AWS上一鍵部署Storm集羣。關於詳細的步驟,能夠閱讀Storm Wiki上的《Setting up a Storm cluster》。服務器
欲瞭解Storm的更多信息,請訪問官方Storm Wiki。你也能夠加入Storm郵件列表和freenode上的Storm IRC(#storm-user)。網絡
做者 Bienvenido David IIIsession