阿卡接口

我最近在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

阿卡接口

阿卡接口_阿卡vs风暴相关推荐

  1. 微信小程序实名认证接口_人脸核身接口整理

    一.微信小程序实名认证接口_人脸核身接口整理 开场一个字: 悲观.目前实名接口,人脸识别接口开放度不高."实名信息授权"已经回收. 二.人脸核身接口 1.使用条件 需要现申请通过才 ...

  2. PbootCMS发布接口_免登陆开源

    由于之前的接口需要每次发布都需要登录一次,太麻烦,于是这次就搞了个免登陆的接口,设置一次可以一直使用,方便多了.(下载地址见文章最下方) 最新的这个PbootCMS发布插件是免登陆的,开源的,免费的, ...

  3. 2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型

    2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型 Collection集合 java.util.coLlection接口 所有单列集合的最 ...

  4. 抖音小店商品接口_抖音接口

    抖音小店商品接口_抖音接口 {"msg": "","code": 200,"data": {"toast&qu ...

  5. c语言实现java接口_五分钟带你了解Java是如何从容而优雅地实现接口数据校验

    本篇文章给大家分享平时开发中总结的一点小技巧!在工作中写过Java程序的朋友都知道,目前使用Java开发服务最主流的方式就是通过Spring MVC定义一个Controller层接口,并将接口请求或返 ...

  6. golang 接口_「实战」助力数据库开发之接口篇 - Golang 连接 Greenplum

    Greenplum 作为一款强大的 HTAP 数据库,针对大多数流行语言都有相应的连接库.大部分均是与 PostgreSQL 采用相同的接口,但是也有部分接口是 Greenplum 专门优化后用于自身 ...

  7. html调用接口_搜狗ocr识别接口

    详细情况在代码中说明,如果不想自己使用TensorFlow,可使用下面接口 这是要识别的图片: 最终识别的结果: This is a lot of 12 point text to test the ...

  8. 免费idc公益接口_数据科学促进社会公益免费开放数据的最佳来源

    免费idc公益接口 内容(Contents) Introduction 介绍 What is Open Data? 什么是开放数据? Open vs. Free vs. Online Data 开放与 ...

  9. VBS 请求WebAPI接口_从零开始实现简单的webapi框架【Golang 入门系列十一】

    之前,已经讲过很多Golang的东西,比如基础语法,mysql的使用,redis的使用等等,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/ca ...

最新文章

  1. iOS游戏框架Sprite Kit基础教程第1章编写第一个Sprite Kit程序
  2. 闪电模型数学_初中数学|23种几何模型汇总(中)
  3. PHP中使用redis 执行lua脚本
  4. 时间序列趋势分解 seasonal_decompose
  5. 《架构探险》第三章 项目核心实现
  6. 一阶线性微分方程的初等积分法例题
  7. 华为鸿蒙p9刷机包,华为P9原版rom系统刷机包_华为P9最新版升级包更新下载
  8. [Git]删除git文件历史记录
  9. 高性能服务器开发基础系列 (七)——开源一款即时通讯软件的源码
  10. 大名鼎鼎的 Linux —— 进程,线程,协程
  11. 哪个软件测试手机电池续航好,6款手机电池续航测试排名:iPhone12mini险些垫底,第1名是小米10...
  12. 图片不变形,按照等比例缩小或扩大显示
  13. java word 批注_Java 添加Word批注(文本、图片)
  14. 程序员成长之旅——同步IO和异步IO(五种IO模型)
  15. 【比赛回顾】广工2020程序设计初赛B-秋夜easy
  16. 利用最小二乘法做线性回归
  17. Kratos,RPC服务调用过程
  18. 如何检查内存泄露问题
  19. Android实习周记:第二周,(IT==不停的学习) is TRUE
  20. jvm.dll+0x4c4686异常

热门文章

  1. 2017西安交大ACM小学期数据结构 [树状数组,极大值]
  2. SpringCloud Greenwich(五)之nacos、dubbo、Zuul和 gateway集成
  3. maven中scope属性的
  4. C#的foreach
  5. 《白鹿原》金句摘抄(一)
  6. java实现邮件发送准备工作(前期配置)
  7. 希尔排序+移位法(吊打交换法)
  8. LC67---删除有序链表中重复的元素---牛客---JAVA
  9. 三种获取Class类型的实例的方法
  10. 基于Spring boot,使用idea方便地切换启动环境