远程启动Erlang节点

10

我想在Erlang中编写一个主从应用程序。我考虑以下架构方面的需求:

  • 当主节点宕机时,从节点不应该停止运行,而是在主节点重新上线时尝试重新连接

  • 如果远程节点没有自动连接或者已经宕机,主节点应该自动启动这些节点(可能使用OTP中的supervisor行为)

是否有基于OTP行为可以实现这个功能? 我知道可以使用slave:start_link()启动远程节点,并可以使用erlang:monitor()监控节点,但我不知道如何将其整合到gen_server行为中。


函数erlang:monitor_node/2和erlang:monitor_node/3也是可用的。 - Roberto Aloi
2
你看到分布式应用程序部分了吗?http://www.erlang.org/doc/design_principles/distributed_applications.html - Zed
我们需要一些明确的术语。您是想在多个Erlang VM上分发应用程序(即运行多个node()),还是想构建一个容错的进程树?从您的问题中并不完全清楚。 - I GIVE CRAP ANSWERS
2个回答

1

我同意使用erlang:monitor_node和分布式应用程序的评论。

你不能仅仅使用slave模块来完成这个任务,它明确说明“所有由主节点启动的从节点将在主节点终止时自动终止”。

目前还没有OTP行为可以做到这一点。监管树是分层的;看起来你正在寻找一些应用逻辑层次结构的东西,但生成是基于对等或个体的(取决于你的观点)。

如果您要使用多个Erlang VM,则应仔细考虑运行多少个VM,因为大量VM可能会导致性能问题,因为操作系统会交换进程。最佳性能的经验法则是每个CPU核心只有一个操作系统进程(即一个Erlang VM)。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接