Die Erlang-Fehlertoleranz (wie ich es verstehe) beinhaltet die Verwendung von Supervisor-Prozessen, um Worker-Prozesse im Auge zu behalten. Wenn also ein Worker stirbt, kann der Supervisor einen neuen starten.
Wie macht Erlang diese Überwachung, besonders in einem verteilten Szenario? Wie kann es sicher sein, dass der Prozess wirklich gestorben ist? Tut es Herzschläge? Ist etwas in die Laufzeitumgebung eingebaut? Was ist, wenn ein Netzwerkkabel nicht angeschlossen ist - geht es davon aus, dass die anderen Prozesse abgestorben sind, wenn es nicht mit ihnen kommunizieren kann? usw.
Ich habe darüber nachgedacht, wie ich die gleiche Fehlertoleranz erreichen kann, die Erlang in der JVM (in Java oder Scala) behauptet. Aber ich war mir nicht sicher, ob es Unterstützung brauchte, die in die JVM eingebaut wurde, und Erlang. Ich war noch nicht auf eine Definition von Erlang als Vergleichspunkt gestoßen.
Erlang OTP Supervision wird normalerweise nicht zwischen Prozessen auf verschiedenen Knoten durchgeführt. Es würde funktionieren, aber die beste Vorgehensweise ist, es anders zu machen.
Der allgemeine Ansatz besteht darin, die gesamte Anwendung so zu schreiben, dass sie auf jedem Computer ausgeführt wird, aber der Anwendung ist bewusst, dass sie nicht allein ist. Und ein Teil der Anwendung verfügt über einen Node-Monitor, so dass er auf Node-Downs aufmerksam wird (dies geschieht mit einem einfachen Netzwerk-Ping). Diese Knotenpunkte können zum Ändern der Lastenausgleichsregeln oder zum Umfallen auf einen anderen Master usw. verwendet werden.
Dieser Ping bedeutet, dass beim Detektieren von Node-Downs Latenz vorhanden ist. Es kann einige Sekunden dauern, bis ein toter Peer-Knoten (oder eine tote Verbindung dazu) erkannt wird.
Wenn der Supervisor und der Prozess lokal ausgeführt werden, ist der Absturz und das Signal für den Supervisor sofort spürbar. Es beruht auf einer Funktion, bei der ein abnormaler Absturz auf verknüpfte Prozesse übertragen wird, die ebenfalls abstürzen, sofern sie keine Exits abfangen.
Ich denke, du meinst durch Supervisor den Portmapper zu verarbeiten. Sie können den Erlang Portmapper / die Infrastruktur über das JInterface nutzen - damit vermeiden Sie, das Rad neu zu erfinden - für den Fall, dass Sie es tun Immer noch wollen Sie es zumindest alle dort beschriebenen Schnittstellen bekommen.
Erlang ist opensource, was bedeutet, dass Sie die Quelle herunterladen können und die endgültige Antwort darauf bekommen, wie Erlang es macht.
Wie macht Erlang diese Überwachung, besonders in einem verteilten Szenario? Wie kann es sicher sein, dass der Prozess wirklich gestorben ist? Tut es Herzschläge? Ist etwas in die Laufzeitumgebung eingebaut?
Ich glaube, es wurde in der BEAM-Laufzeit gemacht. Wenn ein Prozess stirbt, wird ein Signal an alle damit verbundenen Prozesse gesendet. Eine ausführliche Diskussion finden Sie in Kapitel 9 von Programmierung von Erlang .
Was ist, wenn ein Netzwerkkabel nicht angeschlossen ist - geht es davon aus, dass die anderen Prozesse abgestorben sind, wenn es nicht mit ihnen kommunizieren kann? usw.
In Erlang können Sie einen Knoten überwachen und die Nachrichten {node_up, Node}
und {node_down, Node}
empfangen. Ich nehme an, diese werden auch gesendet, wenn Sie nicht mehr mit einem Knoten sprechen können. Wie Sie damit umgehen, liegt an Ihnen.
Tags und Links erlang fault-tolerance