阿卡接口_阿卡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的系统,但反之则不行(至少很难)。

参考: Adam Warski博客的Blog中来自JCG合作伙伴 Adam Warski的Akka vs Storm

翻译自: https://www.javacodegeeks.com/2013/06/akka-vs-storm.html

阿卡接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值