TCP-Sockets für Cluster

03/02/2013 - 21:48 von Gerald Breuer | Report spam
Ich habe da eine Idee von der ich mich frage ob die schon jemand
reali siert hat. Und zwar geht es darum, dass eine Anwendung zu
einem Cluster-Dienst mit Failover und Failback auf mehreren Rech-
nern eine einzige TCP-Verbindung zu mehreren Rechnern halten könn-
te. Alle Cluster-Anwendungen empfangen die gleichen Daten, spre-
chen sich aber untereinander gesondert ab damit der Client nicht
doppelte Antworten oder Datensalat (ineinander verschachtelte
Antworten im Bytestream) zu sehen bekommt. Man kann das also so
betrachten als würden mehrere Threads auf einem Socket arbeiten,
nur, dass jeder "Thread" ein Duplikat empfangener Daten bekommt
das er dann zusammen mit den Kontext-Informationen über den Ar-
beitszustand der anderen "Threads" ggf. ein Failover durchführen
kann. Das besondere ist aber, dass das Socket hier über unter-
schiedliche Prozessse auf unterschiedlichen Rechnern verteilt
wàre. D.h. die Netzwerkkarten der beteiligten Rechner müsssten
erstmal auf die selbe MAC-Adresse hören (gibt's überhaupt Swit-
ches die sowas könnten - oder müsste man das per MCast machen?).
Desweiteren müsste sichergestellt werden, dass Segmente erst
geACKt werden wenn wirklich alle Knoten das Segment bekommen
haben und nicht überflüssigerweise alle Knoten ein ACK auf das
selbe Segment verschicken.
Ich bin mir sicher, dass ich jetzt noch unzàhlige Details (wie
den Verbindungs-Auf- und -Abbau sowie das Failback eines Sockets
wenn ein Cluster neu hochfàhrt) vergesssen habe die notwendiger-
weise an der Idee noch dranhàngen. Aber im Wesentlichen sollte
klar sein, dass das technisch möglich wàre. Nur gibt's sowas?
Ich kenn bisher nur Cluster-Dienste wie JBoss wo der Client
entweder mehrere Verbindungen zu allen Cluster-Knoten hàlt
oder wo Broadcast-UDP genutzt wird.
 

Lesen sie die antworten

#1 Anonym
03/02/2013 - 22:26 | Warnen spam
Am 03.02.2013 21:48, pausierte Gerald Breuer von seinen Katzen und tönte:

Ich habe da eine Idee von der ich mich frage ob die schon jemand
reali siert hat. Und zwar geht es darum, dass eine Anwendung zu
einem Cluster-Dienst mit Failover und Failback auf mehreren Rech-
nern eine einzige TCP-Verbindung zu mehreren Rechnern halten könn-
te.



Aber ganz bestimmt.

Alle Cluster-Anwendungen empfangen die gleichen Daten, spre-
chen sich aber untereinander gesondert ab damit der Client nicht
doppelte Antworten oder Datensalat (ineinander verschachtelte
Antworten im Bytestream) zu sehen bekommt. Man kann das also so
betrachten als würden mehrere Threads auf einem Socket arbeiten,
nur, dass jeder "Thread" ein Duplikat empfangener Daten bekommt
das er dann zusammen mit den Kontext-Informationen über den Ar-
beitszustand der anderen "Threads" ggf. ein Failover durchführen
kann. Das besondere ist aber, dass das Socket hier über unter-
schiedliche Prozessse auf unterschiedlichen Rechnern verteilt
wàre. D.h. die Netzwerkkarten der beteiligten Rechner müsssten
erstmal auf die selbe MAC-Adresse hören (gibt's überhaupt Swit-
ches die sowas könnten - oder müsste man das per MCast machen?).



Wenn Du wüsstest, wovon Du redest, könntest Du diese Frage beantworten.

Desweiteren müsste sichergestellt werden, dass Segmente erst
geACKt werden wenn wirklich alle Knoten das Segment bekommen
haben und nicht überflüssigerweise alle Knoten ein ACK auf das
selbe Segment verschicken.



Ganz bestimmt.

Ich bin mir sicher, dass ich jetzt noch unzàhlige Details (wie
den Verbindungs-Auf- und -Abbau sowie das Failback eines Sockets
wenn ein Cluster neu hochfàhrt) vergesssen habe die notwendiger-
weise an der Idee noch dranhàngen. Aber im Wesentlichen sollte
klar sein, dass das technisch möglich wàre. Nur gibt's sowas?
Ich kenn bisher nur Cluster-Dienste wie JBoss wo der Client
entweder mehrere Verbindungen zu allen Cluster-Knoten hàlt
oder wo Broadcast-UDP genutzt wird.




Du solltest das mit den Katzen aufgeben.

Dann sind auch die Nachwehen nicht so schlimm.

Ähnliche fragen