Verbindung nach Serverabsturz wieder aufbauen

Status
Nicht offen für weitere Antworten.
M

mdsnake

Gast
Hallo Leute,

ich bräucht mal Hilfe bei folgendem Problem:

Ich habe eine Controller-Klasse die Daten mit Hilfe einer XML-Datei als Eingabe erhält. Mit Hilfe dieser Daten soll eine sehr komplexe(zeitaufwendige) Berechnung (Parameterstudie) gestartet werden. Es soll natürlich möglich sein nacheinander mehrere Parameterstudien zur parallelen Berechnung zu initialisieren. Meine erste Idee war, im Controller einfach für jede Studie einen Thread zu erstellen und fertig. Das Problem dabei ist, dass die einzelnen Studien durchaus tagelang rechnen können. Aus diesem Grund ist es sicher ratsam die einzelnen Studien und den Controller zu entkoppeln und einzeln laufen zu lassen, um bei eventuellem Absturz einer Studie o des Controllers nicht immer gleich alles zu verlieren und alle Studien von vorne Starten zu müssen. Meine Idee war eine Client/Server Struktur zu bauen. Der Controller ist der Server und startet für jede Studie einen Client. Der Client meldet sich in regelmäßigen Abständen beim Server,dass er noch lebt. Wenn er das nicht mehr tut -> Neustart des Clients. Aber was mache ich wenn der Server abschmiert. Klar, es wird wieder neuer gestartet. Dann muss er aber irgendwie nach laufenden Clients schauen und diese veranlassen sich wieder mit der neuen Serverinstanz zu verbinden oder so... ???:L

Geht das ?? Und wenn ja, wie ??

Danke im vorraus, mfg mdsnake
 

MPW

Top Contributor
Naja, du musst ein Modell entwickeln die zwischen Ergebnisse effizient zwischenzuspeichern. Du musst ja irgendwoher wissen, was der Server gerade gemacht hat, und dann musst du an der Stelle wieder anfangen.

Mit ist die Thematik nicht klar, aber warum laesst du den Server nicht erstmal alleine das Ding zu ende rechnen(oder braucht der immer Usereingabe?) und sobald das fertig ist, machst du eine allgemeine Ausgabe. Dann kann einer von den Clients kommen und sich die Auswertung abholen.

Zum Zwischenspeichern, je nachdem wie du das aufgebaut hast, koennte man alle 10-30 Minuten den Serialiser drueberlaufen lassen und beim naechsten Programmstart, dieses wieder einlesen und die Threads neu starten...
 
M

mdsnake

Gast
MPW hat gesagt.:
Naja, du musst ein Modell entwickeln die zwischen Ergebnisse effizient zwischenzuspeichern. Du musst ja irgendwoher wissen, was der Server gerade gemacht hat, und dann musst du an der Stelle wieder anfangen.

Die Idee hatte ich auch. Das Problem ist, dass für die einzelnen Berechnungen Klassen benutzt werden die vom User mitgegeben werden und deren Struktur ich nicht kenne. Somit dürfte es schwierig werden, den Zustand der Berechnung in regelmäßigen Abständen zu speichern, da ich wenig über den Aufbau weiß.

MPW hat gesagt.:
Mit ist die Thematik nicht klar, aber warum laesst du den Server nicht erstmal alleine das Ding zu ende rechnen(oder braucht der immer Usereingabe?) und sobald das fertig ist, machst du eine allgemeine Ausgabe. Dann kann einer von den Clients kommen und sich die Auswertung abholen.

Das war anders gemeint. 1. Idee(nix Client/Server): Der Controller startet für jede Studie einen Thread. In diesem findet die eigentliche Berechnung statt. Sind die Ergebnisse berechnet gibt der Controller sie z.b. aus. Problem war, wenn mehrere Studien(also mehrere Threads) laufen führt ein Fehler in einem Thread immer zu Absturz aller (incl. Controller). Das will ich vermeiden durch die Aufteilung in eine Client/Server Struktur (2.Idee). Sollte ein Client abschmieren, so startet der Controller(Server) ihn einfach von vorne (neu). Alle anderen Berechnungen bleiben davon aber unberührt(müssen nicht neu gestartet werden). Schmiert der Controller warum auch immer ab(Server) so wird er über einen autom. Systemjob neugestartet, wodurch sich aber das Problem des reconnect ergibt.

mdsnake
 

MPW

Top Contributor
Hm, warum trennst du die Threads nicht sauber und machst ein generelles Exception handling um den gesammten Thread, wenn du einfach eine Exception catched, stuerzt maximal ein Thread ab.
 
M

mdsnake

Gast
Ok, könnte gehen. Aber bleibt immer noch dass Problem, dass wenn der komplette Controller abschmiert alle Threads verloren sind. Mit Serialize ab und zu speichern und im Falle eines Absturzes die Situation wieder herzustellen geht halt nur, wenn User für seine Berechnungen meine standard-Implementierung nutzt. Nutzt er seine eigene wirds problematisch mit serialize. Aber für den Fall das er meine nutzt, werd ich mit serialize ne "Backup-Variante" bauen. Für den Fall, dass er eigene Klasse nutzt muss dann halt die komplette Berechnung neu gestartet werden,pech...
Ich könnte ihn natürlich zwingen mit seiner Klasse Serializable zu implementieren, was aber trotzdem nicht davor schützt, dass er nicht serialisierbare Elemente verwendet und dann kein sinnvolles Backup möglich ist, oder?? Gibts ne möglichkeit, die zu 100% sicher stellt, dass ein serialize funktioniert (also keine nicht serilisierbaren Elemente verwendet werden) ??
 

MPW

Top Contributor
Aehm, ich stehe gerade auf dem falschen Fuss, was laber ich da fuer einen Muell, ein Thread kann prinzipiell nicht abstuerzen, wenn in einem anderen ein Fehler auftritt, das muss andere Ursachen haben, greifen die vllt. auf gleiche Methoden zu, die dann in beiden Faellen zum Absturz fuehren?
 
M

mdsnake

Gast
Ich denke aber das ein "bösartiger" Thread durchaus die ganze JVM abschießen kann,oder??. Bsp: Problemimplementation kommt vom Nutzer -> der könnte so nen Müll gebaut haben, wird in Thread benutzt -> Absturtz. Deswegen ja auch meine Idee mit der Verteilung mit Client/Server. Aber egal, in der Threadvariante berechnet jeder Thread ein Problem und meldet sein Ergebniss bei Fertigstellung dem Controller, der es weiterverarbeitet(ausgibt). Die Threads sind also absolut unabhängig. Das Hauptproblem ist auch eher das der Controller nie abschmieren darf. Bsp: irgend ne blöde XML-Eingabe-Variante die ich nicht bedacht hab führt zum Absturtz des Controllers oder viel einfacher aus irgend einem Grund muss der Admin den Prozess beenden... aller Berechnungsfortschritt futsch....
 

MPW

Top Contributor
theoretisch schon, aber da musst du schon ziemlich viel bloedsinn anstellen.....selbst wenn der hauptspeicher voll ist oder so, betrifft das nur deinen Thread, du darfst nur nicht system.exit(0); aufrufen, alles andere sollte kein Problem darstellen.
 
M

mdsnake

Gast
Nun gut, dann bleib ich bei der Threadvariante und verzichte erstmal auf Client/server. Werd den Controller so sicher wie möglich bauen und die erwähnte Backup-Geschichte so weit wie möglioch ausbauen. Sollte fürs erste reichen...
Vielen Dank

Gruße mdsnake
 

MPW

Top Contributor
Kenne mich damit nicht aus, aber vllt. kannst du ein spezielles Sicherheitsnetz um die Threads bauen, dass die nicht System.exit aufrufen duerfen oder so....aber da muessen mal andere was zu sagen, da hab ich null Ahnung ovn
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Nach Verbindung gleich ObjectStream empfangen Netzwerkprogrammierung 1
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
D Verbindung zu Geräten mit gleicher IP aber in unterschiedlichen VLans aufbauen Netzwerkprogrammierung 2
M Socket Socket lehnt Verbindung ab Netzwerkprogrammierung 3
IAmFloppy Socket Nachstellen der Verbindung Netzwerkprogrammierung 6
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
M Socket peer to peer Verbindung zwischen Java und Matlab Netzwerkprogrammierung 0
S Bluetooth Verbindung zwischen Android app und Raspberry Pi 3 Netzwerkprogrammierung 1
S Peer2Peer Verbindung trotz NAT Netzwerkprogrammierung 2
T VPN-Verbindung über Java Netzwerkprogrammierung 4
Aruetiise Socket Verbindung Überprüfen Netzwerkprogrammierung 18
F Socket Verbindung mit Verschlüsselung und Authentifierzung Netzwerkprogrammierung 1
F Probleme mit Connection Reset bei Telnet Verbindung Netzwerkprogrammierung 1
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
M Verbindung zwischen zwei Pc in dem Selben Netzwerk Netzwerkprogrammierung 8
P Socket Socket-Verbindung Input sehr langsam Netzwerkprogrammierung 1
S FTP Verbindung zu einem BS2000 Großrechner mit Commons Net Netzwerkprogrammierung 0
F Einfache Socket Verbindung Netzwerkprogrammierung 2
F Verbindung zwischen Server und handy Netzwerkprogrammierung 1
M TCP Verbindung Byte-weise lesen? Netzwerkprogrammierung 5
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
I Swing hängt sich auf bei Verbindung zum Server Netzwerkprogrammierung 3
P RMI Hohe CPU Last RMI Verbindung Netzwerkprogrammierung 4
J Pc - Handy Verbindung? Netzwerkprogrammierung 3
M Socket 2x Proxy multithread-server mit Cross Verbindung Netzwerkprogrammierung 0
T Verbindung zum Server fehlgeschlagen Netzwerkprogrammierung 7
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
R Dauerhaft offene Socket-Verbindung? Netzwerkprogrammierung 3
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
S Socket Socket Verbindung wiederherstellen Netzwerkprogrammierung 16
T Socket Bidirektionale Verbindung mit Sockets Netzwerkprogrammierung 8
N (TCP) Verbindung ohne Portforwarding Netzwerkprogrammierung 12
N Lan-Verbindung erstellen Netzwerkprogrammierung 2
H Socket Java Chat - Verbindung zum Server fehlgeschlagen. Netzwerkprogrammierung 5
A TCP über UDP Verbindung? Netzwerkprogrammierung 10
D TCP Verbindung (Java Client und Visual Basic Server) Netzwerkprogrammierung 12
E Verbindung zu SQL-Datenbank auf einem Server Netzwerkprogrammierung 13
S Socket Applet Client bekommt keine GLOBALE Verbindung zum Server Netzwerkprogrammierung 25
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
V NullPointerException bei Verbindung zu RabbitMQ-Server Netzwerkprogrammierung 4
B FTP commons net verschlüsselte verbindung Netzwerkprogrammierung 11
C Verbindung zu einem Hostrechner über das Internet herstellen Netzwerkprogrammierung 15
T Socket Client versucht zyklische Verbindung zum Server Netzwerkprogrammierung 4
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
A Socket Socket Verbindung unterbrochen --> keine Exception Netzwerkprogrammierung 7
S SVNKit - Verbindung zum Repository trennen? Netzwerkprogrammierung 2
P Socket neuer Client - neue(r) Socket/Verbindung geöffnet? Netzwerkprogrammierung 6
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
X SSH Verbindung zu Remote Datenbank Netzwerkprogrammierung 2
S TCP Verbindung zu Beamer Netzwerkprogrammierung 8
Y server client socket verbindung übers internet aufbauen Netzwerkprogrammierung 8
M ganymed-ssh2.har: ftp-Verbindung über ftp-Proxy Netzwerkprogrammierung 2
D Verbindung zw. zwei Rechnern funzt nicht Netzwerkprogrammierung 5
F Socket Socket Verbindung Netzwerkprogrammierung 10
E Server schließt einfach verbindung? Netzwerkprogrammierung 6
Shoox VPN-Verbindung für Datenbankzugriff Netzwerkprogrammierung 2
X Socket Handy/PC Verbindung unterscheiden Netzwerkprogrammierung 18
O Telnet verbindung Netzwerkprogrammierung 4
Dit_ UDP Verbindung durch Proxy Netzwerkprogrammierung 4
H Socket Client server,verbindung läst sich nicht abbauen&code optimierung Netzwerkprogrammierung 3
V Verbindung zweier Rechner über das Internet mit Sockets Netzwerkprogrammierung 8
M HTTP HTTPS-Verbindung mittels Java und Javascript Netzwerkprogrammierung 2
N Verbindung zu Fritzbox Socket/Telnet ??? Netzwerkprogrammierung 5
multiholle RMI Verbindung Linux <-> Windows Netzwerkprogrammierung 4
S netzwerkprotokoll auf basis einer tcp verbindung erstellen Netzwerkprogrammierung 9
S SSH Verbindung mit j2ssh Netzwerkprogrammierung 3
H Socket Mit Applet Verbindung zu eigener Website aufbauen Netzwerkprogrammierung 4
H Socket Socket verbindung mit einem TeamSpeak2 Server Netzwerkprogrammierung 5
H TCP verbindung hinter NAT Netzwerkprogrammierung 28
G TCP SSL Verbindung Netzwerkprogrammierung 3
P Java / My-Sql Verbindung herstellen Netzwerkprogrammierung 6
W Socket Shellscript über ssh Verbindung aufrufen Netzwerkprogrammierung 14
N Socket Verbindung wird immer verweigert Netzwerkprogrammierung 5
Dit_ UDP-Verbindung, DatagramPakete Netzwerkprogrammierung 3
S Socket verbindung trennen Netzwerkprogrammierung 3
D Verbindung zu einem Server - POST Netzwerkprogrammierung 2
musiKk SSL-Verbindung mit Client-Zertifikat (Private Key) scheitert Netzwerkprogrammierung 13
D Socketprogrammierung Verbindung C++=>Java Netzwerkprogrammierung 23
B Probleme mit FTP verbindung Netzwerkprogrammierung 22
T Mac Adresse über Socket Verbindung abfragen? Netzwerkprogrammierung 9
L SSL Verbindung aber Server wird erst im Programm festgelegt Netzwerkprogrammierung 4
L Https Verbindung wird aus jar heraus nicht aufgebaut Netzwerkprogrammierung 12
M Verbindung über Proxy// Problem mit Outputstream bei URLConn Netzwerkprogrammierung 5
O TCP Socket-Verbindung überprüfen Netzwerkprogrammierung 4
F Peer to Peer Verbindung zwischen mehreren Clients? Netzwerkprogrammierung 8
F applet verbindung zum server Netzwerkprogrammierung 6
T Verbindung über das Internet Netzwerkprogrammierung 2
G Verbindung zwischen PC und Handy Netzwerkprogrammierung 10
B Bibliothek, um Eckdaten zur Internet-Verbindung rauszufinden Netzwerkprogrammierung 2
C Verbindung zwischen 2 Computern herstellen Netzwerkprogrammierung 12
G USB-Verbindung herstellen Netzwerkprogrammierung 3
O SSH-Verbindung (trilead-ssh2-build212) Netzwerkprogrammierung 2
K Verbindung mit Unix Server aufnehmen Netzwerkprogrammierung 2
J close() Socket Verbindung nötig ? Netzwerkprogrammierung 3
U problem mit verbindung zu einem irc server Netzwerkprogrammierung 3

Ähnliche Java Themen


Oben