akka actor模型vs以下场景中的java用法

时间:2013-05-07 14:18:01

标签: performance scala scalability akka

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

如果这个问题仍然存在......

  1. Scala与Java

    • Scala为开发人员提供了生产力。
    • 不变性将调试降低到接近零水平。
    • GC完美应对浪费不可变的事。
  2. Akka Actors vs.其他方式

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

    • 有一个SynapseGrid库,它建立在Akka Actors之上,可以轻松构建分布在固定不朽Actors上的DataFlow系统。它甚至可以绘制整个系统的DataFlow图(在.dot format中)。 (与Scala一起使用库更方便。)