运行多个Erlang应用程序。一个或多个虚拟机?

运行多个Erlang应用程序。一个或多个虚拟机?,erlang,virtual-machine,Erlang,Virtual Machine,我想运行多个Erlang应用程序,一个是Riak,另一个是web服务器。我应该在同一个单独的Erlang虚拟机中运行它们吗?为什么?如果它们不需要彼此做任何事情:不。您可能需要为其中一个应用程序重新启动虚拟机,这将导致两个应用程序都停机。这被称为“命运共享”,这是一个常见的设计决策。共享公共资源的子系统越多,它们的“命运”就越紧密地联系在一起。在发生故障/失效的情况下,“命运共享”越多-->系统失效的可能性越大 如果您可以在单独的虚拟机中使用每个虚拟机,那么我会说这样更好 虽然许多人会推荐这些子

我想运行多个Erlang应用程序,一个是Riak,另一个是web服务器。我应该在同一个单独的Erlang虚拟机中运行它们吗?为什么?

如果它们不需要彼此做任何事情:不。您可能需要为其中一个应用程序重新启动虚拟机,这将导致两个应用程序都停机。

这被称为“命运共享”,这是一个常见的设计决策。共享公共资源的子系统越多,它们的“命运”就越紧密地联系在一起。在发生故障/失效的情况下,“命运共享”越多-->系统失效的可能性越大


如果您可以在单独的虚拟机中使用每个虚拟机,那么我会说这样更好

虽然许多人会推荐这些子系统,但我会采取相反的方法。Erlang有一个内置的策略,可以在同一个服务器上运行多个服务器。如果您的应用程序直接相互通信,那么将它们捆绑到一个版本中可能是有意义的。这将加快应用程序之间的调用。有些人会争辩说,如果您需要关闭系统进行升级,而只有一个应用程序需要升级,那么您所有的应用程序现在都有相同的命运。在Erlang中,这是一个没有实际意义的问题,您可以在多个节点上分发应用程序。大多数升级也可以使用。

使用单独的虚拟机,您会失去很多erlang好处。

我认为erlang虚拟机没有停机?重新启动的原因之一是修改虚拟机选项。如果不重新启动,则无法执行此操作。进一步:在这种情况下,可能会发生故障转移,因此应用程序不会关闭,只有一个节点:复制到更新的Erlang VM版本也需要重新启动。这是否意味着我应该在单独的VM中运行所有服务器进程?:)@泽德:这不完全是这个意思(注意大写字母中的“如果”)。总有一个SPOF(单一故障)存在于某个地方——它归结为在给定成本点下管理系统以获得可接受的可用性水平。但你知道所有这些,我知道你在这一点上是在开我的玩笑!干杯。失去了什么好处?