我想在Erlang中编写一个主从应用程序。我正在考虑从架构中需要的以下内容:
当主人死亡时,奴隶不应该死,而是在主人关闭时尝试重新连接奴隶
如果远程节点没有自动连接或者它们已经关闭(可能是OTP中的主管行为)
是否有针对OTP的行为?我知道我可以使用slave:start_link()
启动远程节点,我可以使用erlang:monitor()
监控节点,但我不知道如何将其合并到gen_server
行为中。
答案 0 :(得分:1)
我同意有关使用erlang:monitor_node和使用分布式应用程序的评论。
您不能只使用从模块来实现这一点,它清楚地指出“当主设备终止时,主设备启动的所有从设备节点将自动终止”。
目前还没有OTP行为。监督树是分层的;看起来你正在寻找在应用程序逻辑方面存在层次结构的东西,但是产生是在点对点的基础上完成的(或根据你的观点以个体为基础)。
如果您要使用多个Erlang VM,那么您应该仔细考虑运行的数量,因为大量的Erlang VM可能会因操作系统交换OS进程而导致性能问题。最佳性能的经验法则是每个CPU核心只有一个OS进程(即一个Erlang VM)。
答案 1 :(得分:1)
如果您对研究其他实现感兴趣,Basho的riak_core框架可以很好地利用分布式分布式应用程序。
riak_core_node_watcher.erl包含大部分有趣的节点观察代码。
搜索,你会发现有不少talks and presentations about the framework。