合肥百姓网网站建设,免费企业查询网站,企业建设网站怎么做账,鄂尔多斯市住房和城乡建设厅网站我最近在Twitter的Storm上工作了一段时间#xff0c;这让我想知道#xff0c;它与另一个高性能的并发数据处理框架Akka相比如何 。 什么是Akka和Storm#xff1f; 让我们从两个系统的简短描述开始。 Storm是一个分布式实时计算系统。 在Storm集群上#xff0c;您执行拓扑 … 我最近在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