9 Stimmen

Wie man Anwendungen über Knoten verteilt, ohne alle Anwendungen als Teil des verteilten Handshakes zu starten.

Hintergrund

  • Ich habe eine Anwendung, die automatisch gestartet wird, wenn ein Knoten gestartet wird (unter Verwendung von .rel, .boot usw.)
  • Ich möchte, dass die Anwendung auf andere Knoten ausweicht, wenn ein erster Knoten ausfällt.
  • Ich verwende die Distributed Application-Fähigkeit von Erlang, um Ausfall und Übernahme zu behandeln.

Problem

Das Problem besteht darin, dass ein Teil der Verhandlungen der verteilten Anwendungen darin besteht, dass die Anwendungen gestartet werden, wenn die Knoten sich absprechen, um festzustellen, welcher Knoten aktiv bleibt und welcher inaktiv wird. Ich muss verhindern, dass die Anwendung möglichst auf mehreren Knoten aktiv ist.

Frage

  • Gibt es eine Möglichkeit, dass Knoten meine Anwendung automatisch starten, außer wenn sie an den Verhandlungen zum Starten der verteilten Anwendungen beteiligt sind? Alternativ,
  • Wie erreiche ich es, dass meine Anwendung auf unbeaufsichtigte Weise startet und ausfällt, ohne dass meine Anwendung auf mehreren Knoten (auch nur kurzzeitig) aktiv ist?

4voto

Roberto Aloi Punkte 29588

Leider sind die Übernahme- und Ausfallsicherungsfunktionen von Erlang heutzutage ziemlich begrenzt, daher muss Ihre Anwendung auf allen Knoten ausgeführt werden, damit diese Funktionen funktionieren.

Die einzige Idee, die mir kommt, ist ein wenig verrückt und beinhaltet eine weitere Ebene von Indirektion, aber es könnte tatsächlich funktionieren.

Sie könnten eine gefälschte, leichte, Wrapper-Anwendung schreiben, die dann auf allen Knoten gestartet wird. Diese Anwendung verwendet die standardmäßigen Erlang-Verteilungsfunktionen. Sie implementieren dann Ihre Übernahmefailover-Strategien, indem Sie einfach Ihre originale Anwendung starten:

-Modul(wrapper).
-Verhalten(Anwendung).

[...]

start({Übernahme, _Knoten}, _Argumente) ->
  anwendung:start(original_anwendung).

[...]

Außerdem sollten Sie beachten, dass wenn Sie anwendung:start(meine_anwendung) für eine verteilte Anwendung in allen Ihren Knoten eingeben, die Anwendung nicht auf allen Knoten gestartet wird. Sie können dies überprüfen, indem Sie anwendung:welche_anwendungen() auf jedem der Knoten eingeben. Sie werden feststellen, wie die Anwendung auf einem einzigen Knoten läuft.

Zu guter Letzt, darf ich fragen, warum Sie die Anwendung nicht auf mehr als einem Knoten starten können?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X