Erlang: Verteilte Anwendung Seltsames Verhalten

8

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

  • Wir haben 3 Knoten: n1 @ a2-X201, n2 @ a2-X201, n3 @ a2-X201
  • Wir haben eine Anwendung wd , die einige nützliche Aufgaben erledigt:)

Konfigurationsdateien:

  • wd1.config - für den ersten Knoten:
%Vor%
  • wd2.config für die Sekunde:
%Vor%
  • Für den Knoten sieht n3 ähnlich aus.

Starten Sie jetzt erlang in 3 separaten Terminals:

  • erl -sname n1 @ a2-X201 -config wd1 -pa $ WD_EBIN_PATH -boot start_sasl
  • erl -sname n2 @ a2-X201 -config wd2 -pa $ WD_EBIN_PATH -boot start_sasl
  • erl -sname n3 @ a2-X201 -config wd3 -pa $ WD_EBIN_PATH -boot start_sasl

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 :

%Vor%
  • Sieht so aus, als wäre es aufgehängt ...
  • Starten Sie es jetzt erneut unter n1
%Vor%

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?

    
Anton Prokofiev 19.06.2011, 14:13
quelle

2 Antworten

1

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.

    
legoscia 28.05.2012 17:07
quelle
0

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.

    
Kynth 21.06.2011 09:08
quelle

Tags und Links