阿卡接口_阿卡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

阿卡接口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c 语言已知两点求第三点,已知3点座标,求第一点到第二点和第三点构成的直线的距离。...

已知3点座标,求第一点到第二点和第三点构成的直线的距离。以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!已知3点座标,求第一点到第二点和第三点构成的直线的距离。解…

连续交付友好的Maven版本

持续交付管道需要可预测的软件和依赖版本。 Maven软件项目中常见的快照版本与“持续交付”背后的动机背道而驰。 为了将快照版本更新为发行版本,开发人员通常手动或通过诸如maven-release-plugin来编辑pom.xml文件。 但是,Maven还提供了将版本号定义为属…

android u盘检测工具,android USBU盘 接入检测

如果是在注册的静态广播一般必须含有以上的权限,这里必须注意添加如果在代码中注册广播则必须iFilter.addDataScheme("file")这样接受广播判断U盘public class RemovableDiskManagerReceiver extends BroadcastReceiver {public RemovableDiskManagerRece…

android 组合属性动画,Android属性动画组合(sequence串行、together并行)

在android中用原生api实现一系列复杂动画会很麻烦,所以对属性动画进行了一定封装,让使用起来更简单,能够按照人的思维依次编写动画。简单效果:使用方法:添加依赖:dependencies { compile"com.steven:A…

jta atomikos_带有Atomikos示例的Tomcat中的Spring JTA多个资源事务

jta atomikos在本教程中,我们将向您展示如何使用Atomikos Transaction Manager在Tomcat服务器中实现JTA多个资源事务。 Atomicos事务管理器为分布式事务提供支持。 这些是多阶段事务,通常使用多个数据库,必须以协调的方式提交。 分布式事务由…

android 音量键 广播,【Android 7.0 Audio】: 按键调节音量的调用过程

转载自http://blog..net/xiashaohua/article/details/53842337只简单描述调用过程,需对照代码看,不画图了,也不贴代码)1.在key Event处理部分,Phonewindow会捕获到音量按键事件,Phonewindow.onkeydown--MediaSessionLe…

台电+android+电话,通话系统_台电 G17s_平板电脑评测-中关村在线

通话系统将两张联通3G的SIM卡插入台电G17s之后,我们来感受一下它通话系统的使用是否令人满意。和一般的双卡Android手机平板一样,该机也不支持热插拔,需要将机器彻底关闭后插入SIM卡再开机。并且在开机后屏幕会弹出SIM卡信息,并询…

在Payara Server和GlassFish中配置密码

回答Stackoverflow问题可以为我发现我最喜欢的开源工具的正式文档中的空白提供很好的反馈。 我在这里回答的问题之一是如何在docker容器中更改Payara Server主密码 。 显然,在标准服务器安装中,这很简单–只需使用asadmin change-master-password命令&am…

功能Java示例 第2部分–讲故事

这是称为“ Functional Java by Example”的系列文章的第2部分。 我在本系列的每个部分中发展的示例是某种“提要处理程序”,用于处理文档。 在上一部分中,我从一些原始代码开始,并应用了一些重构来描述“什么”而不是“如何”。 为了帮助代…

OpenHub框架–下一个有趣的功能

这是有关OpenHub框架的系列文章中的第三篇,第一篇介绍OpenHub框架 ,第二篇介绍异步消息传递模型 。 该系列的最后一篇文章将更详细地介绍其他一些有趣的功能,并说明为什么OpenHub可以成为您的集成项目的理想选择的原因。 节流 节流是一种功…

tcga癌症亚型获取_将亚型多态性与通用多态性相关联的危险

tcga癌症亚型获取Java 5已将通用多态性引入Java生态系统。 即使我们都知道由于泛型类型擦除及其后果而引起的无数警告,这还是对Java语言的重要补充。 通用多态性(也称为参数多态性 )通常与可能预先存在的亚型多态性正交。 一个简单的例子是co…

在生产中运行Java:SRE的观点

作为站点可靠性工程师 (SRE),我确保我们的生产服务高效,可扩展且可靠。 典型的SRE是生产大师,必须对更广泛的体系结构有很好的了解,并精通许多更精细的细节。 SRE是会说多种语言的程序员,这是很…

android 退出多个activity,Android 中 退出多个activity的经典方法

1.使用list集合方式用list保存activity实例,然后逐一干掉import java.util.linkedlist;import java.util.list;import android.app.activity;import android.app.alertdialog;import android.app.application;import android.content.dialoginterface;import androi…

声明jpa批注处理器_如何使用反射基于JPA批注记录您的数据模型

声明jpa批注处理器因此,当您仅可以注释Java类时,使用JPA,Hibernate或EBeans很酷,但是您不是一直希望可以从代码“生成”数据模型的文档吗? 提取JPA / Hibernate和其他验证注释的信息? 假设您的bean中具有所…

在Grails战争中添加“精简” Groovy Web控制台

假设您已将Grails应用程序部署到服务器上–如何查找应用程序的配置方式? 如果您有来源,则可以查看Config.groovy , BuildConfig.groovy等(在这种情况下,我正在谈论Grails 2应用程序,但是这些想法可以推广到…

ubuntu生成密钥和证书_基于浏览器的密钥生成以及与浏览器的密钥/证书存储的交互...

ubuntu生成密钥和证书想象以下情况: 您需要从访问您的网站的用户那里获取一个密钥(在非对称情况下为用户的公共密钥 ),并希望浏览器记住私有部分,而不会因冗长的导入过程而困扰用户。 老实说,实际上&#…

JPA persistence.xml SQL脚本定义

您可以在将在运行时执行的JPA持久性上下文定义中定义并链接到SQL脚本。 有标准化的属性来定义脚本&#xff0c;以分别说明如何创建模式&#xff0c;批量加载数据和删除模式&#xff1a; <persistence version"2.1" xmlns"http://xmlns.jcp.org/xml/ns/persi…

如何使用JPA和Hibernate映射JSON集合

介绍 开源的hibernate-types项目允许您将Java对象或Jackson JsonNode为JPA实体属性。 最近&#xff0c;感谢我们的杰出贡献者&#xff0c;我们添加了对类型安全集合的支持&#xff0c;该集合也可以作为JSON持久化。 在本文中&#xff0c;您将了解如何实现此目标。 Maven依赖 …

android listview mapview,RelativeLayout和并列ListView/MapView

我尝试使用RelativeLayout并排放置ListView和MapView。然而我的MapView总是高于ListView。RelativeLayout和并列ListView/MapView这里是我的main.xml布局&#xff1a;android:orientation"vertical"android:layout_width"fill_parent"android:layout_heigh…

android数据流分类,【Android工程之类】1 MVVM架构 - MVVM与单向数据流

前言这个系列将讲述使用MVVM架构、LiveData、Room、Kodein、Retrofit、EventBus来建立一个统一的、优雅的、可维护的TODO程序&#xff0c;本系列分为多个章节&#xff0c;从0开始一步一步引入这些优秀的库。下图展示的是Jetpack组件库包含的内容&#xff0c;这套的架构方案的核…