【问题标题】:Scaling Akka actors缩放 Akka 演员
【发布时间】:2019-01-16 13:23:08
【问题描述】:

我很想知道调整大小,或者在这种情况下特别增加单个节点系统上演员池中的演员数量是否真的会影响性能。

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

考虑以下场景。

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

【问题讨论】:

    标签: scala akka


    【解决方案1】:

    是的,增加参与者的数量确实会影响系统的性能。因此,每当我们指定 akka 调整大小时,我们都会指定上限和下限。理想情况下,必须仔细考虑配置这个限制,就好像我们为actor实例设置了一个非常高的上限,那么它会产生巨大的性能瓶颈。但是,为实例设置一个非常低的数量可能会破坏 akka 弹性的全部目的。

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

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

    【讨论】:

      【解决方案2】:

      您是对的,从 20 到 40 将一无所获。如果您真的完全受 CPU 限制,您实际上可能会获得一点点缩减到 8。与往常一样,在这种情况下,一个好的基准是要走的路!

      如果你想让这个缩放依赖于运行代码的计算机,Runtime.getRuntime.availableProcessors 可以为你准备 :-)

      【讨论】:

        【解决方案3】:

        不要增加演员池的大小,而是将其减少到最多八个,并使用一个自定义的dispatcher,最多限制为八个线程。例如,在您的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
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-09
          • 2015-03-25
          • 2012-10-14
          • 1970-01-01
          • 1970-01-01
          • 2019-04-23
          相关资源
          最近更新 更多