Performanteste Kommunikationsmethode zwischen Client u. Server

inDex

Mitglied
Guten Tag zusammen,

ich habe eine Frage bzgl. der Performance, wenn es darum geht regelmäßig und in kurzen Zeitabschnitten
zw. verschiedenen Rechnern in einem Netzwerk zu kommunizieren. Dafür kurz eine Beschreibung der Situation.

Ich habe einen Rechner ("Leitrechner") im Netz, welcher Daten über eine Schnittstelle bekommt und diese bearbeitet und verwertet,
sowie in eine Datenbank schreibt. Diese müssen im Nachgang im Sekundentakt an verschiedene weitere Clients im Netzwerk verteilt werden.
Zusätzlich müssen die Clients einige Befehle an den Leitrechner senden können, die er ausführen muss.

Bisher habe ich es wie folgt gelöst: Jeder Client baut sekündlich eine Connection zum Leitrechner auf (über ein TCP Socket, Leitrechner hat einen Connection-Pool und ist der Server), fordert die Daten an, bekommt diese geschickt und schließt die Verbindung wieder. Je nach Bedarf kann er weitere Befehle senden, wie oben beschrieben.

Ist das Performance-technisch die beste Variante?
  • Sollten die TCP-Socket Verbindungen aller Clients lieber geöffnet bleiben?
  • Wäre es performanter wenn die Clients die Daten sekündlich aus der Datenbank beziehen (sind dort eh schon vorhanden)?
  • Wäre UDP und Broadcast eine Möglichkeit (Was ich eher nicht denke wegen Packet-Verlust, falsche Reihenfolge etc.)?
  • Gibt es evtl. noch eine bessere Möglichkeit die ich nicht auf dem Schirm habe?

Vorab vielen Dank für mögliche Ideen/Anmerkungen/Vorschläge!
 

LimDul

Top Contributor
Grundsätzlich gilt bei Performance-Analysen immer die Antwort "It Depends". Ohne Messungen ist es schwer was zu sagen.

Bauchgefühl: Verbindungsaufbau ist "relativ" teuer, daher würde ich dazu tendieren, die Verbindungen nicht abzubauen, wenn es in diesem Szenario bleibt.

Frage DB oder Kommunikation - da ist ein fundamentaler Unterschied - Push (Server sendet Daten an Client) vs. Poll (Client fragt DB ab). Da wäre die Frage, ob das nicht eher Auswirkungen hat und was davon sinnvoller ist. Auch ein DB Zugriff ist - solange es sich nicht um eine lokale DB handelt - auch immer mit TCP/IP Kommunikation verbunden + Overhead fürs Handling in der DB. Da würde ich eher bei der TCP/IP Verbindung bleiben

UDP: Nur wenn Reihenfolge relativ egal ist und einzelne Verluste auch kein Problem sind - ich glaube aber nicht an einen Performance Gewinn. UDP spielt seine Stärken meines erachtens aus, wenn Paketverluste egal sind und die Bandbreite höher ist. TCP hat ja ein Connection Handling, was die Paketgrößen dynamisch aushandelt. Solange es - wo ich jetzt erst mal von ausgehe - um eher geringe Datenmengen handelt, sehe ich da bei UDP keinen echten Mehrwert

Ich hätte aber noch eine andere Alternative - Message Queues. Die sind eigentlich genau dafür gedacht um Daten zwischen Systemen zu verteilen ohne das die Systeme alle direkt miteinander reden. Activemq wäre z.B. ein Vertreter davon. Die stellen sicher (bzw. man kann sie so einstellen), dass die Reihenfolge eingehalten wird, puffern Daten zwischen bis sie abgeholt werden (verkraften also auch, wenn ein System mal nicht erreichbar ist für ein paar Sekunden) etc.
 

KonradN

Super-Moderator
Mitarbeiter
Sollten die TCP-Socket Verbindungen aller Clients lieber geöffnet bleiben?
Ein klares Ja. Damit ersparst Du Dir die ständige Kommunikation für Verbindungsauf- und -abbau.

Wäre es performanter wenn die Clients die Daten sekündlich aus der Datenbank beziehen (sind dort eh schon vorhanden)?
Das erspart den Zwischenschritt des Servers. Das kann also prinzipiell sinnvoll sein. Nur wenn die Verbindung zwischen Client <-> Server langsamer oder unsicherer ist, dann ist der zentrale Server eben performanter (und ggf. auch sicherer).

MessageQueue wurde von @LimDul angesprochen.
 

inDex

Mitglied
Die Methode mit Message Oriented Middleware und MessageQueue hört sich sehr interessant an. Die Messages können dabei auch synchronized Objects sein wenn ich das so auf die schnelle richtig erkannt habe (?). Würdet ihr gegenüber den TCP Sockets eher zu dieser Variante tendieren?

Dann werde ich vor erst einmal den Code so umschreiben, dass die TCP Connections offen bleiben und mich längerfristig in das Thema der MessageQueues einarbeiten und mein Code dann entsprechend abändern.

Vielen Dank für den Input soweit!
 

mihe7

Top Contributor
Im Zusammenhang mit Message Queues wäre noch das "Protokoll des Internet of Things", aka MQTT, zu nennen. Da wird die Verbindung aufrecht erhalten, Verbindungsabbrüche "korrigiert", es gibt dort z. B. ein paar QoS-Einstellungen und der Spaß überträgt die Daten binär (das Protokoll ist für schwachbrüstige Clients wie kleine Sensoren ausgelegt).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Socket Netzwerk Übertragung zwischen 4 Clients Netzwerkprogrammierung 2
J VideoStreaming zwischen 2 Geräten Netzwerkprogrammierung 1
R Kommunikation zwischen Shell und Putty Netzwerkprogrammierung 5
temi (Netzwerk-) Kommunikation zwischen Anwendungen. Wie? Netzwerkprogrammierung 5
M Socket peer to peer Verbindung zwischen Java und Matlab Netzwerkprogrammierung 0
S Bluetooth Verbindung zwischen Android app und Raspberry Pi 3 Netzwerkprogrammierung 1
M Verbindung zwischen zwei Pc in dem Selben Netzwerk Netzwerkprogrammierung 8
O Client zwischen XML und JSON auswählen lassen Netzwerkprogrammierung 2
F Verbindung zwischen Server und handy Netzwerkprogrammierung 1
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
D Chatprogramm zwischen zwei ChatClients (aktiv/passiv) Netzwerkprogrammierung 1
J Direkter Datenaustausch zwischen Servern Netzwerkprogrammierung 5
V Unterschied zwischen cURL und HttpURLConnection?? Netzwerkprogrammierung 2
M RMI RMI Probleme zwischen Client und Server Netzwerkprogrammierung 5
N Datenaustausch zwischen Java-GUI und PHP-Programm über SOAP Netzwerkprogrammierung 19
C HTTP Studienarbeit Kommunikation via HTTP mit POST zwischen Server und Client Netzwerkprogrammierung 7
V Datensätze zwischen verschiedenen Datenbanken kopieren Netzwerkprogrammierung 2
F Peer to Peer Verbindung zwischen mehreren Clients? Netzwerkprogrammierung 8
G Verbindung zwischen PC und Handy Netzwerkprogrammierung 10
K Datenaustausch zwischen Applet und JSP Netzwerkprogrammierung 4
C Verbindung zwischen 2 Computern herstellen Netzwerkprogrammierung 12
M Kommunikation zwischen ServerSocket und Socket Netzwerkprogrammierung 2
L RMI-Objekt zwischen zwei RMI-Servern kopieren Netzwerkprogrammierung 2
J Socketverbindung zwischen Javaclient und C-Server Netzwerkprogrammierung 11
R Kommunikationsproblem zwischen JAVA-client und C-Server Netzwerkprogrammierung 5
B Verbindung zwischen Client und Server Netzwerkprogrammierung 2
0 Socketverbindung zwischen PHP und Java? Netzwerkprogrammierung 6
G Chat zwischen applets: möglich? Netzwerkprogrammierung 2
M RMI zwischen verschiedenen Java Versionen Netzwerkprogrammierung 2
N UDP zwischen Java und C++ funktioniert nicht. Netzwerkprogrammierung 4
M Objekte senden zwischen Java und PHP mit SOAP Netzwerkprogrammierung 9
S Objekte zwischen Client und Server über Sockets senden Netzwerkprogrammierung 2
D Kommunikation zwischen mehreren Servlets??? Netzwerkprogrammierung 3
P Zeit zwischen mehreren Client log-ins bestimmen. Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben