请告诉我Apache Spark和AKKA之间的区别,我知道这两个框架意味着编程分布和并行计算,但我没有看到它们之间的链接或差异。 此外,我想获得适合他们每个人的用例。
最近我一直试图围绕着阿卡和基于演员的系统的概念。 虽然现在我对Akka的基础知识已经有了很好的理解,但是在集群和远程angular色方面,我还是苦苦挣扎了一些。 我将尝试使用Play Framework 2.0附带的WebSocket聊天示例来说明问题:有一个演员拥有WebSockets,并保存当前连接的用户列表。 演员在技术上和逻辑上基本代表聊天室。 只要在一台服务器上运行一个聊天室,这种方式就完全正常了。 现在我试图理解,当我们谈论运行在服务器集群上的许多dynamic聊天室(可以随时打开/closures新的房间)时,这个例子将不得不被延长(单个节点被添加或删除根据目前的需求)。 在这样的情况下,用户A可以连接到服务器1,而用户B连接到服务器2.两者都可以在同一个聊天室中通话。 在每台服务器上,仍然会有一个actor(对于每个聊天室?),该actor保存WebSocket实例以接收和发布事件(消息)给正确的用户。 但从逻辑上讲,服务器1或服务器2上应该只有一个聊天室参与者,该主持人拥有当前连接的用户(或类似任务)的列表。 你将如何去实现这个目标,最好是在“纯粹的阿克卡”中,而不需要增加额外的消息系统,如ZeroMQ或RabbitMQ? 这是我到目前为止,请让我知道这是否有道理: 用户A连接到服务器1,并分配一个演员来保存他的WebSocket。 参与者检查(使用Router?EventBus?其他?)在任何连接的群集节点上是否存在活动聊天室的“聊天室演员”。 因为它不会要求创build一个新的聊天室演员,并会发送和接收这个演员未来的聊天消息。 用户B在服务器2上连接并且一个演员也被分配给他的WebSocket。 它还检查所请求的聊天室的演员是否存在并在服务器1上find它。 服务器1上的聊天室演员现在充当给定聊天室的中心,将消息发送给所有“连接”的聊天成员演员并分发传入的聊天室。 如果服务器2出现故障,聊天室的参与者将不得不重新创build/移动到服务器2,尽pipe这不是我现在主要关心的问题。 我最想知道如何dynamic发现演员如何传播各种基本上独立的机器可以使用Akka的工具集。 我一直在看阿卡的文档已经有相当长的一段时间了,所以也许我在这里忽略了这个问题。 如果是这样,请赐教:-)
我只是比较斯卡拉演员与Java线程的performance。 我惊异地看到了差异,我观察到,在我的系统中,我能够产生最多2000线程(一次只能生活)。但是使用同一个系统,我能够产生大约50万个scala的演员。 这两个程序都使用了大约81MB的JVM堆内存。 你能解释一下java线程是如何比scala / akka actor更重吗? 什么是使scala-actor这么重量轻的关键因素? 如果我想获得最佳的可伸缩性,我应该去基于演员的Web服务器,而不是基于Java的传统的Web /应用服务器,如JBoss或Tomcat? 谢谢。
我目前正试图开始与阿卡,我面临一个奇怪的问题。 我的演员有以下代码: class AkkaWorkerFT extends Actor { def receive = { case Work(n, c) if n < 0 => throw new Exception("Negative number") case Work(n, c) => self reply n.isProbablePrime(c); } } 这就是我开始工作的方式: val workers = Vector.fill(nrOfWorkers)(actorOf[AkkaWorkerFT].start()); val router = Routing.loadBalancerActor(SmallestMailboxFirstIterator(workers)).start() 这就是我如何closures一切: futures.foreach( _.await ) router ! Broadcast(PoisonPill) router ! PoisonPill 现在会发生什么,如果我发送工作人员消息与n> 0(没有例外抛出),一切工作正常,应用程序正常closures。 但是,只要我发送一条消息导致exception,应用程序就不会终止,因为仍然有一个actor正在运行,但我无法弄清楚它来自哪里。 如果有帮助,这是所讨论的线程的堆栈: […]
我已经和Node.js一起工作了一段时间,认为自己对Java很好。 但是我刚刚发现了Akka ,并立即对其演员模式感兴趣(据我所知)。 现在,假设我的JavaScript技能与我的Scala / Java技能相当,我想把重点放在两个系统的实用性上。 特别是在Web服务方面。 我的理解是,Node在处理许多并发操作方面非常出色。 我想象一下,一个好的Node资源pipe理系统的Web服务在处理很多用户同时提交更改(在一个大型的,大stream量的应用程序中)方面会很出色。 但是在阅读完Akka的演员之后,它会觉得它会在同样的事情上performance出色。 我喜欢把工作减less到一口大小的想法。 此外,多年前我涉足Erlang,并爱上了它所使用的消息传递系统。 我在处理复杂业务逻辑的许多应用程序上工作,我认为是时候跳入一个或另一个。 尤其是升级传统的Struts和C#应用程序。 无论如何,避免圣战,这两个体系有什么根本的不同呢? 看起来两者都是为了同一个目标。 也许Akka的“自我修复”架构具有优势。 编辑 看起来我正在接近选票。 请不要把这个问题当作“哪个更好,节点还是阿卡?”。 我正在寻找的是像Node这样的基于事件驱动的库和Akka等基于actor的基本差异。
我听说过很多关于Akka框架(Java / Scala服务平台)的言论,但是到目前为止还没有看到很多用例的实例。 所以我会有兴趣听到开发人员使用它的事情。 只有一个限制:请不要包括编写聊天服务器的情况。 (为什么?因为这已被过度使用作为很多类似的事情的例子)