1

我想知道 Akka Actor 模型的适用性。

我知道它在创建和销毁大量 Actor 实例的情况下很有用。例如,一个呼叫服务器,每个来电都会创建一个参与者实例并与少数其他参与者通信,并在呼叫结束后被杀死。

在以下情况下是否也有用:

一个服务器有一些处理元素(10~50)在 Actor 上实现。这些处理元件的寿命是无限的。其中一些不保持状态,一些保持状态。处理元素处理消息并以固定方式将消息传递给其他参与者。系统从外部接收大量消息,并通过处理元素并离开系统。

我的直觉是,我们无法通过使用 Akka Actor 模型甚至在 Scala 中实现这个服务器来获得任何优势。因为 Akka 设计的用例在这里不适用。如果放大意味着动态增加处理元素,那么它将是适用的。

对于固定拓扑,我认为如果我在 Java 中实现它,它将在原始性能方面更有利。Scala 的“不变性”特性会导致更多的副本,从而降低性能。所以我相信我最好坚持 Java。

我的理解正确吗?我是一个坚果壳,我想知道为什么我应该离开 Java 并在上面的应用场景中使用 Scala/Akka。我的目标是每秒处理 100 万条消息。

4

1 回答 1

2

如果这个问题仍然是真实的......

  1. Scala 与 Java

    • Scala 为开发人员提供生产力。
    • 不变性将调试降低到几乎为零的水平。
    • GC 完美地处理了浪费的不可变对象。
  2. Akka Actors 与其他方式

    • Akka 有调度程序,可以跨固定线程池分配所有任务。这允许均匀地消耗可用资源。这种方法比固定的工作线程要好得多——处理资源提供给任务而不是 DataFlow 节点。
  3. 数据流实现

    • 有一个SynapseGrid库构建在 Akka Actors 之上,允许轻松构建分布在固定不朽 Actors 上的 DataFlow 系统。甚至可以画出整个系统的DataFlow图(.dot格式)。(该库与 Scala 一起使用更方便。)
于 2013-08-10T16:30:34.317 回答