前言:当我在下面提到“机器”时,我指的是一个物理的专用服务器,或者一个虚拟的专用服务器;当我说“节点”时,我指的是一个erlang虚拟机的示例,在一个unix内核下,可以有多个作为独立进程运行的erlang虚拟机。
我有一个项目涉及多个Erlang/OTP应用程序。这些应用程序将在同一台机器上一起运行并相互通信。它们都将访问磁盘,使用内存并产生Erlang进程。它们还将使用网络资源,因为它们将与集群中运行相同应用程序集的相似机器通信。
几乎所有的通信都是通过HTTP进行的,因此我可以将每个Erlang OTP应用程序分离到同一台机器上的一个单独的Erlang VM示例中,它们仍然可以相互通信。
我的问题是:让它们都在一个Erlang VM下运行是否更好,以便该Erlang VM进程可以在它们之间分配对资源的访问,并调度各个Erlang进程的执行。
或者在给定的服务器上有单独的Erlang节点更好?
如果一个比另一个好,为什么?
我假设在一个Erlang虚拟机中运行所有这些应用程序,基本上,服务器完全运行,将产生更好的性能。操作系统只是在低级别管理磁盘和内存,只有一个重要的进程(Erlang虚拟机)切换...当Erlang虚拟机拥有所有Erlang进程的整体视图时,它可能在分配资源方面更聪明。
这可能是我需要测试的东西,但我没有能力在短期内有效地这样做。
4条答案
按热度按时间kupeojn61#
答案是:那要看情况。
使用单节点的优点:
使用多个节点的优点:
zvms9eto2#
Agree with @I GIVE CRAP ANSWERS
I would go with one VM. Here is why:
I wouldn't care about VM crash - you need to be prepared any way. Heart works especially well in the cluster of equal units.
vfhzx4xs3#
我们一直为每个应用程序使用一个虚拟机,因为这样更易于管理。
Erlang中的调度程序和SMP支持在过去几年中取得了长足的进步,因此不再像过去那样需要在同一节点上运行多个VM。
piv4azn74#
我同意前面的答案,但有一种情况是每个CPU有多个节点:当一个繁重的任务访问节点时。一个任务可能需要几分钟才能完成,在这种情况下,gen服务器将保留节点,直到任务完成。