我是一名 Scala 程序员,从开发人员的角度理解 Akka。我还没有查看 Akka 库的代码。已经阅读了 Akka 模型中的两种类型的参与者——基于线程的和基于事件的——但没有大规模运行 Akka,我没有配置 Akka 以进行生产的经验。我对 Vert.x 完全陌生。因此,从选择的角度构建我想知道的反应式应用程序堆栈 -
- Akka 和 Vert.x 的消息传递模型有很大不同吗?如何?
- Akka 的actors 和Vert.x 的verticles 缓冲消息的数据结构有很大不同吗?
从表面上看,它们确实很相似,尽管我个人认为 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 是一个具有惊人视角但又非常新的大型项目,如果您现在需要一个解决方案,也许这不是更好的选择,幸运的是您可以同时学习并在同一个项目中使用两者。
在做了一些谷歌搜索之后,我发现 Akka 与 Vert.x 的详细比较尚未完成(至少我找不到它)。
计算模型:
反应流:
HTTP 支持
斯卡拉支持
远程服务
参考: