每台机器启动多个erlang节点更好,还是每台机器只启动一个?

Age*_*nes 4 parallel-processing erlang scheduling

前言:当我在下面说“机器”时,我指的是物理专用服务器,或虚拟专用服务器。当我说“节点”时,我的意思是 erlang 虚拟机的一个实例,其中可以有多个作为单独进程在单个 unix 内核下运行。

我有一个涉及多个 erlang/OTP 应用程序的项目。这些应用程序将一起运行并在同一台机器上相互通信。它们都将访问磁盘,使用内存并生成 erlang 进程。他们还将使用网络资源,因为他们将与集群中运行相同应用程序集的类似机器进行通信。

几乎所有这些通信都是通过 HTTP 进行的。因此,我可以将每个 erlang OTP 应用程序分离到同一台机器上的 erlang VM 的单独实例中,并且它们仍然可以相互通信。

我的问题是:让它们全部运行在一个 erlang VM 下是否更好,以便这个 erlang VM 进程可以在它们之间分配对资源的访问,并安排各种 erlang 进程的执行。

还是在给定的服务器上有单独的 erlang 节点更好?

如果一个比另一个好,为什么?

我假设在单个 erlang vm 中运行所有这些应用程序,本质上,服务器的完整运行将导致更好的性能。操作系统只是在低级别管理磁盘和内存,并且只有一个重要的进程(erlang VM)可以切换……而当 erlang VM 具有所有的整体视图时,它在分配资源方面可能更聪明二郎进程。

这可能是我需要测试的东西,但我无法在短期内有效地这样做。

I G*_*ERS 5

答案是:视情况而定。

使用单节点的优点:

  • 内存由单个 Erlang VM 控制。这要容易得多。
  • 应用程序间通信(如果使用 erlang-messaging)更快。
  • 更少的操作系统上下文切换发生

使用多个节点的优点:

  • 如果系统以 C 代码链接到 VM,由于 C 中的错误导致的一个节点死亡不会杀死其他节点。