每台机器启动多个erlang节点或每台机器只启动多个erlang节点会更好吗?

时间:2010-11-14 17:34:02

标签: erlang parallel-processing scheduling

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

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

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

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

或者在给定服务器上使用单独的erlang节点会更好吗?

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

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

这可能是我需要测试的东西,但我不能在短期内有效地做到这一点。

3 个答案:

答案 0 :(得分:2)

答案是:这取决于。

使用单个节点的优点:

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

使用多个节点的优点:

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

答案 1 :(得分:2)

同意@I GIVE CRAP ANSWERS

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

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

我不关心虚拟机崩溃 - 你需要做好任何准备。心脏在同等单位的群体中特别有效。

答案 2 :(得分:1)

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

在过去几年中,Erlang中的调度程序和SMP支持已经走过了漫长的道路,因此没有像过去那样在同一节点上运行多个虚拟机的原因。