阿卡接口_阿卡vs风暴
阿卡接口
我最近在Twitter的Storm上工作了一段時間,這讓我想知道,它與另一個高性能的并發數據處理框架Akka相比如何 。
什么是Akka和Storm?
讓我們從兩個系統的簡短描述開始。 Storm是一種分布式實時計算系統。 在Storm集群上,您執行拓撲 ,該拓撲處理元組 (數據)流。 每個拓撲都是一個由噴口 (生成元組)和螺栓 (轉換元組)組成的圖形。 Storm負責群集通信,群集之間的故障轉移和拓撲分布。
Akka是用于構建分布式,并發,容錯應用程序的工具包。 在Akka應用程序中,基本構造是actor ; actor異步處理消息 ,并且保證每個actor實例一次最多使用一個線程運行,從而使并發變得更加容易。 Actor也可以遠程部署。 即將提供一個集群模塊 ,該模塊將處理集群節點上的參與者的自動故障轉移和分配。 兩種系統都可以很好地擴展,并且可以處理大量數據。 但是何時使用一個,何時使用另一個?
關于該主題還有另一篇不錯的博客文章,但我想進一步進行比較:讓我們看看Storm中的基本構造與Akka中的基本構造相比。
比較基礎
首先,Storm中數據的基本單位是元組 。 一個元組可以有任意數量的元素,每個元組元素可以是任何對象,只要有一個序列化器即可。 在Akka中,基本單位是message ,它可以是任何對象,但是它也應該可序列化(用于將其發送給遠程參與者)。 因此,這里的概念幾乎是等效的。
讓我們看一下基本的計算單位。 在Storm中,我們有一些組成部分 : 螺栓和芽 。 螺栓可以是任何代碼,它可以對傳入的元組進行任意處理。 它還可以存儲一些可變數據,例如以累積結果。 此外,螺栓在單個線程中運行,因此,除非您在螺栓中啟動其他線程,否則不必擔心并發訪問螺栓數據。 這與演員非常相似,不是嗎? 因此,暴風雨螺栓/萌芽對應于Akka演員。 這兩個如何詳細比較? 參與者可以接收任意消息; 螺栓可以接收任意元組。 預計兩者都將根據接收到的數據進行一些處理。 兩者都具有內部狀態,該狀態是私有的,并且可以防止并發線程訪問。
演員和螺栓:差異
一個關鍵的區別是角色和螺栓之間的通信方式。 演員可以將消息發送給其他任何演員,只要它具有ActorRef (如果沒有,則可以按名稱查找演員)。 它還可以將回復發送給正在處理的郵件的發件人。 另一方面,暴風雨是單向的 。 您無法發送回郵件; 您也無法將消息發送到任意螺栓。 您還可以將元組發送到命名通道(流),這將導致元組(消息)廣播到拓撲中定義的所有偵聽器。 (螺栓還會向發短信確認消息,這也是通信的一種形式。)
在Storm中,可以并行運行螺栓/新芽代碼的多個副本(取決于并行性設置 )。 因此,這對應于一組(可能是遠程的)actor,在它們前面有一個負載均衡器actor 。 在Akka的路線中眾所周知的概念。 關于元組如何路由到Storm中的螺栓實例(隨機,字段上的一致性哈希),有兩種選擇,這大致對應于Akka中的各種路由器選項(輪詢,消息上的一致性哈希)。
螺栓和演員的“重量”也有所不同。 在Akka,通常會有很多演員 (多達數百萬)。 在Storm中,預期的螺栓數量要少得多; 無論如何這都不是Storm的缺點,而是設計上的決定。 同樣,Akka角色通常共享線程 ,而每個螺栓實例都傾向于具有專用線程 。
其他特性
Storm還具有一項現成的Akka尚未實現的關鍵功能: 保證消息傳遞 。 Storm跟蹤了整個元組樹,這些元組樹是由發芽產生的任何元組產生的。 如果未確認所有元組,則將重播該元組。
另外,Storm的群集管理更加先進(基于Zookeeper的自動故障轉移,群集中工作人員的自動平衡);以及 但是即將推出的Akka群集模塊應該可以解決這個問題。
最后,Storm中的通信布局-拓撲-是靜態的,并且是預先定義的。 在Akka中,通信模式可以隨時間變化,并且可以完全動態。 actor可以向其他任何actor發送消息,甚至可以發送地址(ActorRefs)。
因此,總體而言,Storm很好地實現了特定范圍的用法,而Akka則更多地是通用工具包。 可以在Akka之上構建類似于Storm的系統,但反之則不行(至少很難)。
翻譯自: https://www.javacodegeeks.com/2013/06/akka-vs-storm.html
阿卡接口
總結
以上是生活随笔為你收集整理的阿卡接口_阿卡vs风暴的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaParser生成,分析和修改Ja
- 下一篇: Qt中如何给生成的可执行文件设置图标