扩展Akka演员

时间:2018-08-09 07:15:08

标签: scala akka

我很想知道是否调整大小,或者在这种情况下,具体增加单个节点系统上的参与者池中的参与者数量是否确实会影响性能。

根据系统上的压力,akka resizer可以在同一角色池中创建更多角色实例。但是,如果所有这些操作都在同一硬件上运行,是否真的会影响性能?

请考虑以下情形。

我有一个带有超线程的四核系统。在任何给定的点,系统可以运行8个线程。假设actor执行的大多数操作都受CPU限制,那么通过将池中actor的数量从20增加到40,一个人可以获得什么呢?

3 个答案:

答案 0 :(得分:2)

您是对的,从20变到40不会有任何好处。如果您确实完全受CPU限制,那么实际上可能会稍微减少到8。一如既往,在这种情况下,好的基准测试是可行的!

如果要根据运行代码的计算机进行这种缩放,则Runtime.getRuntime.availableProcessors可以为您提供:-)

答案 1 :(得分:1)

与其增加actor池的大小,不如将其减小到最大为8的大小,并使用一个自定义dispatcher,它最多限于8个线程。例如,在您的application.conf中:

my-thread-pool-dispatcher {
  type = Dispatcher
  executor = "thread-pool-executor"
  thread-pool-executor {
    core-pool-size-min = 2
    core-pool-size-factor = 2.0
    core-pool-size-max = 8
  }
  throughput = 100
}

答案 2 :(得分:0)

是的,增加参与者的数量确实会影响系统的性能。因此,无论何时指定akka大小调整器,我们都将指定上限和下限。理想情况下,必须考虑到如何配置此限制,就像我们在actor实例上设置了非常高的上限一样,这会造成巨大的性能瓶颈。但是,为实例设置一个非常低的数字可能会破坏akka弹性的全部目的。

对于四核系统,我的上限为100,参与者的下限为10,到目前为止,我们还没有遇到任何问题。 您可以将.conf文件设置为

akka.actor.deployment {
  /myrouter2 {
    router = round-robin
    resizer {
      lower-bound = 10
      upper-bound = 100
    }
  }
}