Ala*_*ent 8 erlang fault-tolerance
Erlang容错(据我所知)包括使用管理程序进程来监视工作进程,因此如果工作者死亡,主管可以启动一个新的.
Erlang如何进行此监控,尤其是在分布式方案中?怎么能确定这个过程真的死了?它会做心跳吗?内置于运行时环境中的是什么?如果拔下网络电缆怎么办?如果无法与其通信,是否会假设其他进程已经死亡?等等
我在考虑如何在JVM(例如Java或Scala)中实现Erlang声称的相同容错等.但我不确定是否需要内置于JVM中的支持以及Erlang.虽然作为一个比较点,我还没有看到Erlang如何做到的定义.
Erlang OTP监管通常不在不同节点上的进程之间完成.它会起作用,但最佳做法是采用不同的方式.
常见的方法是编写整个应用程序,使其在每台机器上运行,但应用程序知道它并不孤单.应用程序的某些部分有一个节点监视器,因此它知道节点关闭(这是通过简单的网络ping完成的).这些节点缩减可用于更改负载平衡规则或转移到另一个主节点等.
此ping意味着在检测节点关闭时存在延迟.检测到死对等节点(或死对等节点)可能需要几秒钟的时间.
如果主管和进程在本地运行,则崩溃和向主管发出的信号几乎是即时的.它依赖于异常崩溃传播到链接进程的功能,这些进程也会崩溃,除非它们捕获出口.