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

每台机器启动多个erlang节点更好,还是每台机器只启动一个?,erlang,parallel-processing,scheduling,Erlang,Parallel Processing,Scheduling,前言:当我在下面说“机器”时,我指的是物理专用服务器或虚拟专用服务器。当我说“node”时,我指的是erlang虚拟机的一个实例,其中可能有多个作为单独进程在单个unix内核下运行 我有一个涉及多个erlang/OTP应用程序的项目。这些应用程序将一起运行,并在同一台机器上相互通信。它们都将使用内存和生成erlang进程来访问磁盘。他们还将使用网络资源,因为他们将与集群中运行相同应用程序集的类似机器进行通信 几乎所有这些通信都是通过HTTP进行的。因此,我可以将每个erlang OTP应用程序分

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

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

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

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

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

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

我假设在一个erlang虚拟机中运行所有这些应用程序,这基本上是服务器的完整运行,将带来更好的性能。操作系统只是在低级别管理磁盘和ram,并且只有一个重要的进程(erlang VM)可以切换。。。而且,当erlang VM拥有所有erlang进程的全局视图时,它在分配资源方面可能更聪明


这可能是我需要测试的东西,但短期内我无法有效地进行测试

答案是:视情况而定

使用单个节点的优点:

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

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

    • 同意@I给出垃圾答案

      我会选择一个虚拟机。原因如下:

      • 属于调度器的运行时队列的动态处理(CPU负载来源不同,这一点很重要)
      • 要监视的虚拟机更少
      • 更好地理解内存分配,更容易发现恶意进程(可以一次比较所有进程)
      • 更容易的应用程序间监督

      我不在乎虚拟机崩溃——你需要做好任何准备。Heart在相同单元的集群中工作得特别好。

      我们总是在每个应用程序中使用一个VM,因为它更易于管理


      Erlang中的调度器和SMP支持在过去几年中取得了长足的进步,因此不再像过去那样需要在同一个节点上运行多个VM。

      多个节点的另一个优点是不需要SMP支持。