56

我是一名 Scala 程序员,从开发人员的角度理解 Akka。我还没有查看 Akka 库的代码。已经阅读了 Akka 模型中的两种类型的参与者——基于线程的和基于事件的——但没有大规模运行 Akka,我没有配置 Akka 以进行生产的经验。我对 Vert.x 完全陌生。因此,从选择的角度构建我想知道的反应式应用程序堆栈 -

  1. Akka 和 Vert.x 的消息传递模型有很大不同吗?如何?
  2. Akka 的actors 和Vert.x 的verticles 缓冲消息的数据结构有很大不同吗?
4

2 回答 2

66

从表面上看,它们确实很相似,尽管我个人认为 Vert.x 的想法与某些 MQ 系统比与 Akka 更相似…… Vert.x 拓扑更平坦:一个 Verticle 与其他 Verticle 共享消息并接收响应...相反,Akka 更像是一棵树,其中您有几个演员,但您可以使用其他演员监督演员,..对于简单的项目可能没什么大不了的,但对于大型项目,您可以欣赏更多“等级制度”...

另一方面,Vert.x 在非常流行的语言之间提供了更好的互操作性*。对我来说,这很重要,您需要将参与者与 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 与它一起使用,几乎没有任何开销。系统的每个部分在 Verticle 中解耦的方式使它变得如此简单。

Vert.x 是一个具有惊人视角但又非常新的大型项目,如果您现在需要一个解决方案,也许这不是更好的选择,幸运的是您可以同时学习并在同一个项目中使用两者。

于 2014-05-31T04:09:27.187 回答
42

在做了一些谷歌搜索之后,我发现 Akka 与 Vert.x 的详细比较尚未完成(至少我找不到它)。

计算模型:

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

反应流:

  • Vert.x 内置了 Reactive Streams
  • Akka 通过 Akka Streaming 支持 Reactive Streams。Akka 有非常简洁和干净的流操作符(通过 Scala DSL)。

HTTP 支持

  • Vert.x 内置支持创建网络服务(HTTP、TCP 等)
  • Akka 有 Akka HTTP

斯卡拉支持

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

远程服务

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

参考:

于 2016-04-05T10:18:19.783 回答