不同物理服务器上的 Erlang 模块

Posted

技术标签:

【中文标题】不同物理服务器上的 Erlang 模块【英文标题】:Erlang modules on different physical servers 【发布时间】:2016-01-31 20:58:07 【问题描述】:

我有一个具有以下结构的 OTP 应用程序:

需要什么:

    服务(1,2,3) 需要相互通信。 Service1 在一台物理服务器上,service2 在另一台物理服务器上,等等。 Mnesia 数据库为所有服务共享。

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

您可能只需使用rpc 启动服务,然后手动链接以重现您指定的结构...

但是结构本身看起来不对。主要问题是您的集群最终与一些 mainslave 节点不对称。然而,通常你只生成一个推送到每个节点的 OTP 版本,因此在启动时执行的代码完全相同,因此所有服务都在每个节点上启动。

这让您更容易发布 故障转移更可靠

因此,我建议您更改架构以支持这种工作方式。我假设您基本上希望每个服务都在负载平衡的单个节点上运行。因此,您可以尝试找到一个可以为您做到这一点的框架。

例如,您可以查看riak_core 来构建分布式应用程序

【讨论】:

我知道我可以在多个节点上运行同一个应用程序,但是其中一项服务通过 NIF 进行大量数学工作,这就是为什么我需要在专用服务器上部署该服务 这并不意味着你在每台服务器上都没有相同的代码,只是你有一个更复杂的逻辑来确定什么服务启动什么服务器,但我相信它仍然不应该被监督通过网络

以上是关于不同物理服务器上的 Erlang 模块的主要内容,如果未能解决你的问题,请参考以下文章

Erlang的从属模块:代码和IO分发

SpaceVim 语言模块 erlang

是否可以在不同物理服务器上的 oracle 数据库和 postgresql 数据库之间使用数据库链接

Erlang TCP 服务器总是在接受时关闭

Erlang模块在运行时编译后不起作用

[erlang]cowboy handler模块的使用