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

tvokkenx  于 2022-12-08  发布在  Erlang
关注(0)|答案(4)|浏览(224)

前言:当我在下面提到“机器”时,我指的是一个物理的专用服务器,或者一个虚拟的专用服务器;当我说“节点”时,我指的是一个erlang虚拟机的示例,在一个unix内核下,可以有多个作为独立进程运行的erlang虚拟机。
我有一个项目涉及多个Erlang/OTP应用程序。这些应用程序将在同一台机器上一起运行并相互通信。它们都将访问磁盘,使用内存并产生Erlang进程。它们还将使用网络资源,因为它们将与集群中运行相同应用程序集的相似机器通信。
几乎所有的通信都是通过HTTP进行的,因此我可以将每个Erlang OTP应用程序分离到同一台机器上的一个单独的Erlang VM示例中,它们仍然可以相互通信。
我的问题是:让它们都在一个Erlang VM下运行是否更好,以便该Erlang VM进程可以在它们之间分配对资源的访问,并调度各个Erlang进程的执行。
或者在给定的服务器上有单独的Erlang节点更好?
如果一个比另一个好,为什么?
我假设在一个Erlang虚拟机中运行所有这些应用程序,基本上,服务器完全运行,将产生更好的性能。操作系统只是在低级别管理磁盘和内存,只有一个重要的进程(Erlang虚拟机)切换...当Erlang虚拟机拥有所有Erlang进程的整体视图时,它可能在分配资源方面更聪明。
这可能是我需要测试的东西,但我没有能力在短期内有效地这样做。

kupeojn6

kupeojn61#

答案是:那要看情况。
使用单节点的优点:

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

使用多个节点的优点:

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

zvms9eto2#

Agree with @I GIVE CRAP ANSWERS
I would go with one VM. Here is why:

  • dynamic handling of run time queues belonging to schedulers (with varied origin of CPU load its important)
  • fewer VMs to monitor
  • better understanding of memory allocation and easier to spot malicious process (can compare all of them at once)
  • much easier inter app supervision

I wouldn't care about VM crash - you need to be prepared any way. Heart works especially well in the cluster of equal units.

vfhzx4xs

vfhzx4xs3#

我们一直为每个应用程序使用一个虚拟机,因为这样更易于管理。
Erlang中的调度程序和SMP支持在过去几年中取得了长足的进步,因此不再像过去那样需要在同一节点上运行多个VM。

piv4azn7

piv4azn74#

我同意前面的答案,但有一种情况是每个CPU有多个节点:当一个繁重的任务访问节点时。一个任务可能需要几分钟才能完成,在这种情况下,gen服务器将保留节点,直到任务完成。

相关问题