Ich bezahle mit verteilten Erlang-Anwendungen.
Konfiguration und Ideen stammen aus:
http: /www.erlang.org/doc/pdf/otp-system-dokumentation.pdf 9.9. Verteilte Anwendungen
Konfigurationsdateien:
Starten Sie jetzt erlang in 3 separaten Terminals:
Starten Sie die Anwendung auf jedem der Erlang-Knoten: * Anwendung: Start (wd).
%Vor% %Vor% %Vor%Im Moment ist alles in Ordnung. Wie in der Erlang-Dokumentation geschrieben: Die Anwendung läuft am Knoten n1 @ a2-X201
Töte jetzt den Knoten n1 : Die Anwendung wurde nach n2
migriert %Vor%Setze unser Spiel fort: töte den Knoten n2 Ein weiteres Zeitsystem funktioniert gut. Wir haben unsere Anwendung am Knoten n3
%Vor%Stellen Sie jetzt die Knoten n1 und n2 wieder her. Also:
%Vor% Knoten n1 und n2 sind zurück.
Sieht so aus, als müsste ich die Anwendung jetzt manuell neu starten:
* Machen wir es zuerst am Knoten n2 :
Es funktioniert. Und der Knoten n2 hat ebenfalls OK zurückgegeben:
%Vor%Am Knoten n3 sehen wir:
%Vor%Im Allgemeinen sieht alles in Ordnung aus, wie in der Dokumentation geschrieben, mit Ausnahme der Verzögerung beim Starten der Anwendung am Knoten n2 .
Töte nun den Knoten n1 noch einmal:
%Vor%Ops ... alles hängt. Die Anwendung wurde nicht an einem anderen Knoten neu gestartet.
Tatsächlich, während ich diesen Beitrag geschrieben habe, habe ich realisiert, dass irgendwann alles okay ist, irgendwann habe ich ein Problem.
Irgendwelche Ideen, während es beim Wiederherstellen des "primären" Knotens und beim erneuten Töten Probleme geben könnte?
Wie bei Learn You Some Erlang erklärt (scrolle nach unten), funktionieren verteilte Anwendungen nur dann gut, wenn sie als gestartet werden Teil einer Veröffentlichung, nicht wenn Sie sie manuell mit application:start
starten.
Die Wahrscheinlichkeit ist groß, dass Sie Ihre Anwendung wahrscheinlich vollständig auf den Knoten n1 / n2 neu starten, während n3 noch unter der anfänglichen Anwendungsinitialisierung läuft.
Wenn Ihre Anwendung systemweite Prozesse startet und ihre PIDs verwendet, anstatt registrierte Namen zu verwenden, die beispielsweise mit global, pg oder pg2 festgelegt wurden, arbeiten Sie möglicherweise mit zwei Gruppen des globalen Status.
Wenn dies der Fall ist, empfiehlt es sich, sich auf das Hinzufügen / Entfernen von Knoten aus einer vorhandenen Anwendung zu konzentrieren, anstatt eine Anwendung vollständig neu zu starten. Auf diese Weise verlassen Knoten und fügen sich in einen bestehenden Satz von initialisierten Werten ein.