启动远程Erlang节点
问题描述:
我想在Erlang中编写一个主从应用程序。我想在下面的事情我从架构需要:启动远程Erlang节点
当主人去世奴隶应该不会死,而是尝试重新连接到它,而主跌
主应该会自动启动,如果他们不自动连接远程节点或者下降(可能在OTP上司的行为)
是否有OTP行为取向要做到这一点?我知道我可以使用slave:start_link()
启动远程节点,我可以使用erlang:monitor()
来监视节点,但我不知道gen_server
行为中可以如何组合这个节点。
答
我同意关于使用erlang:monitor_node和使用分布式应用程序的意见。
你不能只用从模块来实现这一目标,它明确规定“这是由一个主发表的所有从属节点将自动终止,主终止时”。
目前还没有OTP行为。监督树是分层的;看起来你正在寻找应用程序逻辑层次结构的东西,但是产卵是在点对点的基础上(或根据你的观点而定)。
如果你要使用多个虚拟机二郎,那么你应该仔细考虑你有多少运行,因为其中大量的可能会导致性能问题,由于进出OS交换OS过程。最佳性能的经验法则是针对每个CPU核心只有一个OS进程(即一个Erlang虚拟机)。
答
如果你有兴趣学习其他实现,芭蕉riak_core框架对分散的分布式应用的一个很好的起飞。
riak_core_node_watcher.erl最有它有趣的节点观察代码。
搜索,你会发现有相当多的talks and presentations about the framework。
erlang:monitor_node/2和erlang:monitor_node/3的功能也可用。 – 2010-07-02 17:07:47
您是否看到分布式应用程序部分? http://www.erlang.org/doc/design_principles/distributed_applications.html – Zed 2010-07-03 09:21:12
这里我们需要一些清晰的术语。你是否想通过多个erlang虚拟机来分发你的应用程序(这是运行多个节点()的)还是你想构建一个容错的进程树?从你的问题不完全清楚。 – 2010-12-06 15:07:18