充分利用在独立物理服务器上运行的Akka应用程序

时间:2014-11-22 09:57:36

标签: performance akka scalability

让我们假设我们正面临一个新的非常低预算的Scala / Akka项目(一个Web服务堆栈)。根据要求,我们意识到我们可以将我们的项目要完成的任务分为两个不同的类别,而不是彼此相关。所以我们可以考虑将项目分成两个不同的应用程序。

如果这两个应用程序部署在独立服务器上,我想知道两者之间的性能/可扩展性是否会有显着差异**

1)创建两个应用程序
2)将所有任务放在一个应用程序中。

我意识到这个问题可能听起来模糊不清但我想收集一些反馈意见,你将如何面对一个建立在Akka之上的低预算项目,以便从独立服务器硬件中获得最大收益(不是“什么”我可以得到“),所以我希望得到一些适用于任何独立硬件配置的一般提示。

(**)我知道可扩展性的想法在独立服务器上可能听起来很奇怪,这里我只是指能够处理每秒增加的呼叫率达到硬件限制。

关于要使用的软件堆栈的选择(Spray vs Play,MySQL vs Maria DB等),请考虑它的主题。我们将继续基准测试。

1 个答案:

答案 0 :(得分:1)

不,不会有任何“性能/可伸缩性显着差异”的来源。与两个独立应用程序中的两个独立系统相比,一个应用程序中的单个ActorSystem具有两种不同的性能特征只有两种方式:

  1. 进程处理:如评论中所述,添加第二个应用程序将把更多CPU资源管理责任移交给OS。但是,这是繁琐的工作,因为与管理n应用程序相比,现代OS内核在管理n+1应用程序时的行为几乎完全相同。
  2. 线程池管理:ActorSystem负责dispatching work from Actor instances to an underlying thread pool。如果ActorSystem对Actor集合之间的工作分配有更完整的了解,那么分配线程池的资源将更加有效。但是,操作系统也很擅长资源分配,因此性能提升应该可以忽略不计。