Akka和Vert.x的消息传递模型的区别

56

我是一名Scala程序员,从开发人员的角度理解Akka。我没有查看过Akka库的代码。我已经了解了Akka模型中的两种类型的actors - 基于线程的和基于事件的,但由于没有在大规模上运行过Akka,我没有配置Akka进行生产的经验。并且我对Vert.x完全不熟悉。所以,从构建响应式应用程序堆栈的选择方面来看,我想知道 -

  1. Akka和Vert.x之间的消息传递模型非常不同吗?如何不同?
  2. Akka的actors和Vert.x的verticles背后的数据结构在缓冲消息方面是否有很大不同?

4
澄清:在Scala Actor模型中有两种类型的演员。而Akka只有一种类型的演员。 - sourcedelica
感谢上帝,来自 Stack Overflow 的某人没有关闭这个问题。 - nomadSK25
2个回答

66
在表面上看,它们非常相似,尽管我个人认为Vert.x的思想更类似于某些MQ系统而不是Akka... Vert.x的拓扑结构更加扁平:一个垂直组件与另一个垂直组件共享消息并接收响应... 而Akka更像是一棵树,在其中你有几个Actor,但你可以使用其他Actor来监督Actor, 对于简单的项目可能并不是什么大问题,但对于大型项目,您可能会欣赏一个更“分层的系统”...
另一方面,Vert.x提供了在非常流行的语言之间更好的互操作性*。对我来说,这是一个重要的因素,因为您需要将Actor与MQ系统混合使用并处理更多的复杂性,而Vert.x使其变得简单而优雅...那么问题来了,哪个更好?......这取决于您的系统是否只基于Scala构建,如果是,则Akka可能是最好的选择...如果您需要与JavaScript、Ruby、Python、Java等通信,并且不需要复杂的层次结构,则Vert.x是最佳选择。
*(使用JSON,这可能与其他方式相比具有优点或缺点)
此外,您必须考虑到Vert.x是一个完整的解决方案,TCP、HTTP服务器、路由,甚至WebSocket!这非常惊人,因为它们提供了一个完整的栈,而且API非常简洁。如果您选择Akka,则需要使用像Play、Xitrum Ospray之类的框架。个人而言,我不喜欢它们中的任何一个。
还要记住,Vert.x是一个没有意见的平台,您可以与之一起使用Akka或Kafka,例如,几乎没有任何额外负担,系统的每个部分在垂直组件内部解耦使其变得非常简单。
Vert.x是一个很大的项目,前景非常好,但是真正新颖,如果您现在需要解决方案,可能不是最佳选择,幸运的是,您可以学习两者并将两者用于同一项目。

4
截至今日,Akka 支持 HTTP 集成。因此,Akka 和 Vert.x 的区别被最小化了。 - tuxdna
1
听起来vert.x就像一把瑞士军刀 - 而Akka只做一件事,即并发分布式系统。 - Kris
2
这个答案应该更新!因为Akka确实支持你提到的关于Vertx的所有内容。 - user1115139

40

经过一番谷歌搜索,我发现还没有对Akka与Vert.x进行详细比较的文章(至少我没有找到)。

计算模型:

  • Vert.x基于事件驱动模型。
  • Akka基于Actor并发模型。

响应式流:

  • Vert.x内置了响应式流。
  • Akka通过Akka Streaming支持响应式流。Akka有流操作符(通过Scala DSL),非常简洁干净。

HTTP支持

  • Vert.x具备创建网络服务(HTTP、TCP等)的内置支持。
  • Akka有Akka HTTP来实现这一点。

Scala支持

  • Vert.x是用Java编写的。
  • Akka是用Scala编写的,很有趣。

远程服务

  • Vert.x支持服务,因此我们需要显式地创建服务。
  • Akka有Actors,可以在网络上的任何地方部署,支持集群、复制、负载平衡、监管等功能。

参考资料:


2
你写道:“Vert.x是用Java编写的”。是的,vertx-core是用Java编写的,但是vert.x工具包被编写成多语言支持的,你可以使用任何基于JVM的语言进行开发,包括Scala:vertx-lang-scala - Arnold Schrijver
1
@ArnoldSchrijver:你说得对,这也适用于Akka(关于Java绑定)-- 这使它成为多语言 - http://doc.akka.io/docs/akka/current/java/index-actors.html - tuxdna
@tuxdna 清晰详细的解释。谢谢! - anhldbk
不错的比较!实际上,Akka是消息驱动的(https://www.lightbend.com/akka)。 - Kris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接