2017-07-15 10 views
0

Ich habe zwei Server und ein Programm, das ich auf ihnen ausführen möchte (nicht notwendigerweise gleichzeitig).Lassen Sie die Programmausführung zwischen Computern/Servern wechseln

Nennen wir einen Server "SA" und den anderen "SB".

SB ist ein Backup für SA, und ich möchte, dass, während mein Programm auf SA ausgeführt wird, wenn SA fehlschlägt, das Programm sofort dort aufhebt, wo es aufgehört hat, und weiter auf SB.

Wie kann ich das am einfachsten erreichen?

+0

Sie müßten Ihre Daten in einem gemeinsamen Standort bestehen bleiben. Dann beobachtet SB vielleicht die Datenbank und wenn etwas nicht für 1 Minute geschrieben ist (oder was auch immer Ihr Intervall ist), wird es sich einschalten und die Datenbank lesen, um herauszufinden, woran es arbeitet. – mrogers

+2

Sie können nicht. Ihre Erwartungen sind unrealistisch. Sie können eine App auf dem zweiten Computer ausführen und den Status von Anfang an laden, aber sie können den Code des anderen nicht nahtlos ausführen. –

Antwort

0

Es gibt wahrscheinlich eine Menge Möglichkeiten, dies zu tun, aber ich würde eine exklusive Dateisperre verwenden, um es zu tun. Um dies zu ermöglichen, benötigen Sie genügend Netzwerkverbindung zwischen den beiden Servern, die beide eine Datei zum Schreiben öffnen können.

Ihr Basis-Algorithmus (Pseudocode) lautet wie folgt:

File f; 
while (true) { 
    myTurn = false 
    try { 
     Open Network file for writing 
     myTurn = true; 
    } catch (IOException e) { 
     // not logging anything because this is expected. 
     // you might log that you tried maybe 
     myTurn = false; 
    } 
    if (myTurn) { 
     Do all of your actual work here. 
     loop many times if that's what you're doing. 
     don't exit this bit until your server wants to shut down 
      (or crashes). 
     But don't close the file 
    } 
} 

Im Grunde, was passiert, ist, dass Ihre Anwendung eine Datei ausschließlich zu öffnen versucht.

Wenn es nicht geöffnet werden kann, ist der andere Server gesperrt, daher sollte dieser Server ruhig bleiben.

Wenn es kann öffnen Sie die Datei, dann wird der andere Server nicht ausgeführt und dieser Server sollte die Arbeit tun.

Damit dies funktioniert, ist es absolut wichtig, dass die "Arbeit" Routine nicht hängt - solange der Prozess des anderen Servers aktiv ist, wird es auf diese Netzwerkdatei Sperre hängen. Wenn also der andere Server in eine Endlosschleife geht, haben Sie kein Glück.

Und denken Sie daran, beide Server versuchen, die gleiche Netzwerkdatei zu öffnen. Wenn sie versuchen, eine lokale Datei zu öffnen, wird es nicht funktionieren.

Diese Frage hat ein Beispiel, das Sie wahrscheinlich wieder verwenden könnten: Getting notified when a file lock is released

Verwandte Themen