ITPub博客

首页 > 大数据 > 数据分析 > Akka与Storm的对比

Akka与Storm的对比

数据分析 作者:破棉袄 时间:2015-09-24 16:09:49 0 删除 编辑

 

学习spark时看到Akka,研究后发现Actor模型的处理和Strom非常相似,转载此文以作记录:

Akka vs Storm

简短的描述一下这两个系统: Storm是一个分布式的,实时计算系统。在一个Storm集群中,通过执行的topology,实现处理tuples数据流。每个拓扑由Spout(产生tuple)和Bolt(转换tuple)。Storm需要关注集群通信,故障切换和分配群集节点间的拓扑。AKKA是一个工具包,用于构建分布式,并发,容错的应用。在一个akka应用,基本结构是一个Actor,actor异步地处理消息,并保证每个actor实例运行使用的时间,最多只有一个线程,这样并发实现容易得多。actor也可以远程部署。有一个集群模块,能处理自动故障切换和Actor群集节点间的分布。

这两个系统规模非常好,可以处理大量的数据。但是,何时使用?
Storm的tuple和Akka的message两者概念几乎相差不多。
Storm的Bolt以单线程运行,除非你在Bolt中启动新的线程,因此不必担心并发访问你,这和类似Actor,Storm的bolt/sprout相当Akka的actor,两个都有内部状态,都是私有的,在线程并发访问时受保护的。

那么Actors和bolts区别是什么?
明显区别是两者的联系方式,Actor是发送消息给另外Actor,只要它有一个ActorRef,如果没有根据名称查找,它也发回消息给之前发送者,而Storm是单边的one-way,你不能发送回消息,你能发送tuple给一个命名的Stream通道,将tuple广播到所有监听者,这些都是在topology中定义。
在Storm中,多个Bolt/Sprout代码的拷贝能并行运行,当然取决于并行设置,而对于一系列Actors,有一个负载平衡Actor在他们前面,也就是Akka的routing,在Storm中tuple如何路由到bolt有很多选择,而Akka也是有多个选项,如round robin 消息一致哈希等等。
bolt和actor在重量上有区别,actors可以有很多,而storm中bolt数量明显少,并不是其缺点,而是设计决定的,Akka的Actors是共享线程,而bolt实例都是有一个定制线程。

其他特性:
Storm有一个重要特性是Akka没有实现的, guaranteed message delivery确保消息传递,Storm跟踪整个tuple树,从原始到最后,如果所有的tuple没有完成,将重新播放。
Storm集群管理也是更高级,自动容错 自动负载平衡,基于zookeeper。
最后,Storm的通讯布局,也就是topology是静态的,而akka的通讯能时刻改变,是动态的。

Storm执行特定用途很好,而akka是通用的工具包,也可能基于akka建立类似storm的系统。也许比较难


虽然Storm和akka都是基于事件驱动的,他们工作原理非常相似,主要区别还是其架构决定的, Storm是一个完整分布式系统,而Akka是可以手工构建分布式系统。

构建一个分布式系统是要遵循一些规则,比如数据的切分和复制,时钟和确保事件顺序性。

遵循这些原则使用Akka手工构建类似Storm的系统,有可能更加符合业务特点,而且底层基础结实。


原文:
http://www.jdon.com/45859

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29754888/viewspace-1808310/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Hello , Actor、Akka
下一篇: spark Shuffle相关
请登录后发表评论 登录
全部评论

注册时间:2014-07-16

  • 博文量
    180
  • 访问量
    1110259