不同物理服务器上的 Erlang 模块
Posted
技术标签:
【中文标题】不同物理服务器上的 Erlang 模块【英文标题】:Erlang modules on different physical servers 【发布时间】:2016-01-31 20:58:07 【问题描述】:我有一个具有以下结构的 OTP 应用程序:
需要什么:
-
服务(1,2,3) 需要相互通信。
Service1 在一台物理服务器上,service2 在另一台物理服务器上,等等。
Mnesia 数据库为所有服务共享。
我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:您可能只需使用rpc
启动服务,然后手动链接以重现您指定的结构...
但是结构本身看起来不对。主要问题是您的集群最终与一些 main 和 slave 节点不对称。然而,通常你只生成一个推送到每个节点的 OTP 版本,因此在启动时执行的代码完全相同,因此所有服务都在每个节点上启动。
这让您更容易发布 故障转移更可靠因此,我建议您更改架构以支持这种工作方式。我假设您基本上希望每个服务都在负载平衡的单个节点上运行。因此,您可以尝试找到一个可以为您做到这一点的框架。
例如,您可以查看riak_core 来构建分布式应用程序
【讨论】:
我知道我可以在多个节点上运行同一个应用程序,但是其中一项服务通过 NIF 进行大量数学工作,这就是为什么我需要在专用服务器上部署该服务 这并不意味着你在每台服务器上都没有相同的代码,只是你有一个更复杂的逻辑来确定什么服务启动什么服务器,但我相信它仍然不应该被监督通过网络以上是关于不同物理服务器上的 Erlang 模块的主要内容,如果未能解决你的问题,请参考以下文章