【问题标题】:Is it better to start multiple erlang nodes per machine, or just one per machine?每台机器启动多个 erlang 节点,还是每台机器只启动一个更好?
【发布时间】:2011-05-09 21:16:28
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: erlang parallel-processing scheduling


    【解决方案1】:

    答案是:视情况而定。

    使用单个节点的优势:

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

    使用多个节点的优点:

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

    【讨论】:

    • 多节点的另一个好处是不需要smp支持。
    【解决方案2】:

    同意@I GIVE CRAP ANSWERS

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

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

    我不会关心 VM 崩溃 - 您需要做好任何准备。 Heart 在相等单位的集群中效果特别好。

    【讨论】:

      【解决方案3】:

      我们一直为每个应用程序使用一个虚拟机,因为它更易于管理。

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

      【讨论】:

        猜你喜欢
        • 2013-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-06
        • 2018-04-05
        • 1970-01-01
        相关资源
        最近更新 更多