I was recently working a bit with Twitter’s Storm, and it got me wondering, how does it compare to another high-performance, concurrent-data-processing framework, Akka. What’s Akka and Storm?Let’s start with a short description of both systems. Storm is a distributed, real-time computation system. On a Storm cluster, you execute topologies, which process streams of tuples (data). Each topology is a graph consisting of spouts (which produce tuples) and bolts (which transform tuples). Storm takes care of cluster communication, fail-over and distributing topologies across cluster nodes. |
译者信息
最近一段时间工作很多都在和Twitter’s Storm打交道,这使我想知道,它和另一个高性能、并发数据处理的框架Akka对比有什么优缺点呢? 关于Akka和Storm?让我们简单的描述一下两个系统。Storm是一个分布式实时计算系统。在一个Storm集群中,执行拓扑结构,在这个拓扑中进行元组(数据)流进程。每一 个拓扑是一个由喷嘴(他产生元组)和螺栓(他负责转化元组)组成。Storm负责集群通讯,容错和通过集群节点分配拓扑。 |
Akka is a toolkit for building distributed, concurrent, fault-tolerant applications. In an Akka application, the basic construct is an actor; actors process messages asynchronously, and each actor instance is guaranteed to be run using at most one thread at a time, making concurrency much easier. Actors can also be deployed remotely. There’s a clustering module coming, which will handle automatic fail-over and distribution of actors across cluster nodes. Both systems scale very well and can handle large amounts of data. But when to use one, and when to use the other? There’s another good blog post on the subject, but I wanted to take the comparison a bit further: let’s see how elementary constructs in Storm compare to elementary constructs in Akka. |
译者信息
Akka 是一个构建分布式、并发、容错应用程序的工具集。在Akka应用中,基本结构是一个物件;物件异步的处理消息,并且保证每一个物件在某一个时刻最多运行在一个线程中,这是的同步更加容易。物件也可以远程部署。这儿是一个集群模块,它可以自动处理实现容错和通过集群节点进行物件的分配。 两个系统都大型架构可以处理超大数量的数据。但是在使用时候我们怎么选择呢? 这儿有一个很好的博文论述了这个主题,但是我想跟进一步对他们做个比较:让我们看看两者最基本的结构有什么不同? |
Comparing the basicsFirstly, the basic unit of data in Storm is a tuple. A tuple can have any number of elements, and each tuple element can be any object, as long as there’s a serializer for it. In Akka, the basic unit is a message, which can be any object, but it should be serializable as well (for sending it to remote actors). So here the concepts are almost equivalent. Let’s take a look at the basic unit of computation. In Storm, we have components: bolts and sprouts. A bolt can be any piece of code, which does arbitrary processing on the incoming tuples. It can also store some mutable data, e.g. to accumulate results. Moreover, bolts run in a single thread, so unless you start additional threads in your bolts, you don’t have to worry about concurrent access to the bolt’s data. This is very similar to an actor, isn’t it? Hence a Storm bolt/sprout corresponds to an Akka actor. How do these two compare in detail? Actors can receive arbitrary messages; bolts can receive arbitrary tuples. Both are expected to do some processing basing on the data received. Both have internal state, which is private and protected from concurrent thread access. |
译者信息
基本比较首先,Storm最基本的数据部分是一个元组。一个元组有人以数量的元素构成,每一个元组元素可以是任意的对象,并且实现了序列化。而Akka的最基本单 元是消息,消息也可以是任意的对象,同样他应该可被序列化(为了把它送到远程的物件)。所以在概念上两者基本上是一样的。 让我们看看基本的计算单元。在Storm中,拥有组件:螺栓和喷嘴。一个螺栓可以是任意块的代码,可在随后的元组中处理任意的进程。他也可以存储一些动态 的数据。例如,累加的结果。同时,螺栓运行在单线程,所以除非你要在你的螺栓中开启一个新的线程,你不用担心并行处理数据的问题。这和物件非常像,不是 吗?因此,一个Storm螺栓/喷嘴相当于一个Akka物件。那两者的细节上有上有和异同呢? 物件可以接收任意消息;螺栓可以接收任意的元组。两者都被期望在接收到的数据上做一些处理。两者都有内部状态,包括对并发线程处理的私有的和受保护态 |
Actors & bolts: differencesOne crucial difference is how actors and bolts communicate. An actor can send a message to any other actor, as long as it has theActorRef(and if not, an actor can be looked up by-name). It can also send back a reply to the sender of the message that is being handled. Storm, on the other hand is one-way. You cannot send back messages; you also can’t send messages to arbitrary bolts. You can also send a tuple to a named channel (stream), which will cause the tuple (message) to be broadcast to all listeners, defined in the topology. (Bolts also ack messages, which is also a form of communication, to the ackers.) In Storm, multiple copies of a bolt’s/sprout’s code can be run in parallel (depending on the parallelism setting). So this corresponds to a set of (potentially remote) actors, with a load-balancer actor in front of them; a concept well-known from Akka’s routing. There are a couple of choices on how tuples are routed to bolt instances in Storm (random, consistent hashing on a field), and this roughly corresponds to the various router options in Akka (round robin, consistent hashing on the message). |
译者信息
物件和螺栓的不同一个显著的不同是两者的通讯方式。一个物件可以传递消息给任意的物件,只要有物件的引用(如果没有,一个物件可以通过名称查询出)。物件也可以给消息发送 者返回一个回复,说明消息已被处理。Storm处理的过程则是单向的。他不能返回消息。你也不能给任意的螺栓传递消息。你可以把一个元组放入一个命名通道 (流),这个通道可以把螺栓发出的消息在所在通道进行广播,在拓扑中定义(螺栓也确认消息,这也是一种通讯的方式,对确认者) 在Storm中,多份螺栓/喷嘴的代码拷贝可以并行执行(取决于并行设置)。这相当于一系列(可能是远程的)物件,但是在前端有一个负载均衡的物件;Akka中的概念叫路由。关于元组如何被传递给螺栓实例有很多中的算法,包括随机、一个域的相容哈希等。这和Akka中的多种路由选择类似(循环、消息相容哈希) |
There’s also a difference in the “weight” of a bolt and an actor. In Akka, it is normal to have lots of actors (up to millions). In Storm, the expected number of bolts is significantly smaller; this isn’t in any case a downside of Storm, but rather a design decision. Also, Akka actors typically share threads, while each bolt instance tends to have a dedicated thread. Other featuresStorm also has one crucial feature which isn’t implemented in Akka out-of-the-box: guaranteed message delivery. Storm tracks the whole tree of tuples that originate from any tuple produced by a sprout. If all tuples aren’t acknowledged, the tuple will be replayed. Also the cluster management of Storm is more advanced (automatic fail-over, automatic balancing of workers across the cluster; based on Zookeeper); however the upcoming Akka clustering module should address that. |
译者信息
在螺栓和物件在构成权重上有有所不同。在Akka,并列地存在这很多物件(可以到数百万)。在Storm中,预期的螺栓数量是很小的。没有任何的理由限制这个数量,这实际上是由设计初衷导致的。同时,Akka物件通常都是共享线程的。而螺栓实例却是独享线程。 其他特性Storm 也有一个重要的特性,有在Akka中所没有的:保证消息传递。Storm遍历整个元组数,这个数的根节点都是嘴发出的元组。如果所有的元组还没有被确认,元组将被重新遍历。 同时,Storm的集群管理也是更先进(自动容错,集群中自动负载均衡;基于Zookeeper)。一个好消息是Akka的集群模块将会增加这些特性。 |
Finally, the layout of the communication in Storm – the topology – is static and defined upfront. In Akka, the communication patterns can change over time and can be totally dynamic; actors can send messages to any other actors, or can even send addresses (ActorRefs). So overall, Storm implements a specific range of usages very well, while Akka is more of a general-purpose toolkit. It would be possible to build a Storm-like system on top of Akka, but not the other way round (at least it would be very hard). Adam |
译者信息
最后,Storm的层状通讯、拓扑是静态的,并且是事先定义的。Akka通讯模式可以通过时间转换,并且可以完全动态配置。物件可以传递消息给任何其他物件,也可以送抵到地址(物件引用)。 总而言之,Storm适用于特定范围的用户,而Akka是一个更加通用的工具集。基于Akka可以构建类似Storm的系统,但是相反做法是不可行的(至少可以可以说那将非常的艰难) 亚当
|
- 浏览: 5043960 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
发表评论
-
Kryo 使用指南
2017-12-05 20:14 20361、Kryo 的简介 Kryo 是一个快速序列化/ ... -
spring session序列化问题排查
2017-12-01 19:07 6280严重: Servlet.service() for ser ... -
利用junit对springMVC的Controller进行测试
2017-11-30 16:26 1451平时对junit测试service/D ... -
Java内存模型之重排序
2017-11-29 09:44 867在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重 ... -
pmd spotbugs 文档
2017-11-28 10:02 0https://pmd.github.io/pmd/pmd ... -
PMD、FindBug、checkstyle、sonar这些代码检查工具的区别?各自的侧重点是什么?
2017-11-28 10:01 2149可以说都是代码静态分析工具,但侧重点不同。pmd:基于源代码 ... -
阿里巴巴Java代码规约插件p3c-pmd使用指南与实现解析
2017-11-23 17:09 1608阿里巴巴Java代码规约插件安装 阿里Java代码规 ... -
静态分析工具PMD使用说明 (文章来源: Java Eye)
2017-11-23 17:07 1148质量是衡量一个软件是否成功的关键要素。而对于商业软件系统,尤 ... -
MyBatis 使用 MyCat 实现多租户的一种简单思路
2017-11-20 18:27 2851本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进 ... -
Spring+MyBatis实现数据库读写分离方案
2017-11-20 17:15 1097百度关键词:spring mybatis 多数据源 读写分离 ... -
数据库连接池druid wallfilter配置
2017-11-20 11:38 1351使用缺省配置的WallFilter <be ... -
java restful 实体封装
2017-11-16 09:47 1602package com.mogoroom.bs.commo ... -
dak
2017-11-15 11:21 0package zzm; import jodd.ht ... -
Java内存模型之从JMM角度分析DCL
2017-11-15 09:35 645DCL,即Double Check Lock,中卫双重检查锁 ... -
Java 打印堆栈的几种方法
2017-11-14 09:36 4763java 中可以通过 eclipse 等工具直接打印堆栈, ... -
Servlet Session学习
2017-11-10 09:25 558HTTP 是一种"无状 ... -
浅析Cookie中的Path与domain
2017-11-10 09:26 1064Path – 路径。指定与co ... -
入分析volatile的实现原理
2017-11-08 09:47 691通过前面一章我们了解了synchronized是一个重量级的 ... -
Spring MVC-ContextLoaderListener和DispatcherServlet
2017-11-15 09:35 690Tomcat或Jetty作为Servlet ... -
搭建spring框架的时候,web.xml中的spring相关配置,可以不用配置ContextLoaderListener(即只配DispatcherServl
2017-11-07 18:27 1440搭建spring框架的时候,web.xml中的sprin ...
相关推荐
Akka是一个用于构建分布式、高并发、容错性应用...《Akka实战》一书不仅涵盖了Akka的核心概念和技术细节,还提供了大量实战案例和最佳实践,是那些希望深入了解并使用Akka构建高性能并发应用程序的开发者的重要资源。
在Akka.NET中,你可以使用`ActorSystem`来创建和管理Actor。Actor通过`Receive`方法定义其行为,即它如何处理不同类型的消息。 2. **消息传递**:Actor之间的通信是通过发送和接收消息进行的,这些消息可以是任何...
以下是对Akka 2.0使用方法的详细讲解: 1. **Actor系统**:Akka的核心是Actor系统,它是所有Actor的容器。在使用Akka时,你需要创建一个ActorSystem实例,如`ActorSystem("MySystem")`,这将为你的应用提供上下文。...
下面我们将深入探讨如何使用Akka与Java来实现TCP远程调用,以及其中涉及的关键知识点。 首先,我们需要理解Akka的Actor系统。Actor是Akka的核心概念,每个Actor都是一个独立的执行单元,拥有自己的状态和邮箱,用于...
使用场景及目标 使用场景 物联网设备管理平台 高并发、分布式系统的开发 需要处理大量异步消息的系统 目标 实现设备的管理和监控 通过消息传递机制实现设备间的通信和协作 提供设备温度的记录和读取...
使用案例和部署场景 Akka使用实例 概述 术语,概念 Actor系统 什么是Actor? 监管与监控 Actor引用,路径与地址 位置透明性 Akka与Java内存模型 消息传递可靠性 配置 Actors Actors Akka类型 容错 ...
兼容性Scala 2.12 和 Akka 2.5.x使用0.9.0及以上版本resolvers += Resolver.jcenterRepo // Adds Bintray to resolvers for akka-persistence-redis and rediscalalibraryDependencies ++= Seq(...
Akka is a distributed computing toolkit that enables developers to build correct concurrent and distributed applications using Java and Scala with ease, applications that scale across servers and ...
- 提供了Actor系统的使用案例和部署场景。 - 解释了Actor模型、Actor系统、以及Actor引用、路径和地址的概念。 - 讲述了Akka和Java内存模型的关系,以及消息传递的可靠性。 - 介绍了Akka的监督、监控、故障容错、...
列举了一些实际项目中 Akka 的成功应用案例,如金融交易系统、游戏服务器、实时数据分析平台等,帮助读者了解 Akka 如何解决实际问题。 #### 二、一般概念 这一部分深入探讨了 Akka 的核心概念和技术细节。 ##### ...
Akka是一个基于Actor模型的高性能、容错的Java...Akka广泛应用于需要处理大规模并发和分布式计算的场景,如大数据分析、实时系统和微服务架构。通过理解和熟练使用Akka,开发者能够构建出更加可靠、可扩展的软件系统。
- **分布式键值存储**:通过 Akka 构建分布式键值存储系统,展示了如何使用 Actor 来管理数据和实现容错机制。 - **文章解析服务**:构建了一个文章解析服务,演示了如何利用 Akka 的并发和分布式特性来提高处理效率...
Akka 提供了一种易于理解和使用的模型来处理现代软件系统中的高并发需求。随着硬件的发展,多核处理器已经成为标准配置,因此如何有效地利用这些核心成为了一个重要的问题。Akka 通过 Actor 模型来实现这一点,Actor...
- **Lambda 表达式:** 在 Java 8 及以上版本中,可以使用 Lambda 表达式来定义 Actor 的行为。 - **简化 Actor 创建:** Lambda 表达式使得创建 Actor 更加简洁。 **3.3 故障容忍** - **监督策略:** 定义了当 ...
Akka 是一个强大的开源工具,主要用于构建高度并发、分布式和反应式的应用程序,主要在Java和Scala语言环境下使用。它的核心设计理念是Actor模型,这使得它能够处理大量的并发操作,同时保持系统的可扩展性和容错性...
文档中还可能包含了Akka的具体API使用示例,最佳实践,以及在实际项目中使用Akka的案例研究。这些信息将对理解Akka框架的核心概念和特性,以及如何在Scala项目中应用这些概念提供帮助。对于那些希望提升并发编程技巧...
Akka是一个开源的Java和Scala框架,它简化了容错性、高可伸缩性的actor模型应用的编写。...通过深入分析文档内容,读者将能够掌握使用Akka进行并发编程的高级技术,并能够应对分布式系统设计中的挑战。
Camel 是一个基于路线和端点的规则引擎,这部分讲解了如何在 Akka 中使用 Camel。 #### 7. Utilities 这部分介绍了 Akka 提供的一些实用工具,包括事件总线、日志记录、调度器等。 #### 8. How To: Common ...