Tomcat Datensynchronisation

X3TitanCore

Bekanntes Mitglied
Hallo!

Ich habe gerade folgendes Problem.

Die Anwendung läuft mit einem Load Balancer. Wie synchroniseren ich meine Daten wenn ich mehrere Tomcat Instanzen auf dem Server laufen habe. Sprich User 1 auf Tomcat 1 speichert etwas, dann müssen irgendwie die Daten bei den anderen Tomcats neu geladen werden, damit die User auf den anderen Tomcats diese sehen können. Alle Daten liegen im Arbeitsspeicher und werden nicht bei jedem Request aus der Datenbank geholt.

Welche Varianten sind da möglich?

Gruss
 
In einem Cluster synchronisieren die verschiedenen Tomcatinstanzen ihre Daten automatisch. Sofern Deine Daten im Application- oder Sessionscope landen, sollte das keine Probleme machen. Oder hast Du ein konkretes Problem? Dann beschreibe es und wir suchen eine Lösung.
 
Zuletzt bearbeitet von einem Moderator:
Ich habe momentan 5 Tomcat Instanzen in einem Load Balancer ohne Clustering laufen. Bei einem Test war der eine User auf Tomcat 1 der andere auf Tomcat 3. Der User auf Tomcat 3 hat etwas gespeichert, was aber der User auf Tomcat 1 nicht sehen konnte. Ich nehme mal an das die Daten von beiden Tomcat nicht die gleichen sind. Die Daten werden in eine Datenbank gespeichert.

Das Problem ist wie kriege ich alle anderen Tomcats dazu sich die neuen Daten zu holen?
Oder gibt es eine Möglichkeit das alle auf die gleichen Daten im Arbeitsspeicher zugreifen?
 
Ok, Du musst Deine 5 Instanzen zu einem Cluster zusammenfügen. Damit habe ich selbst leider wenig Erfahrung. Darum kann ich nicht viel mehr tun als Dich auf die Doku zu verweisen: Apache Tomcat 6.0 - Clustering/Session Replication HOW-TO

Edit1: Warte mal
Alle Daten liegen im Arbeitsspeicher und werden nicht bei jedem Request aus der Datenbank geholt.
Und
Die Daten werden in eine Datenbank gespeichert.
Welche Daten willste überhaupt synchronisieren? Die im Arbeitsspeicher oder die aus der Datenbank? Datenbank ist leicht, das sind sie ja zentral. D.h. da muss man sie einfach nur immer neu draus laden. Arbeitsspeicher siehe Cluster.
 
Zuletzt bearbeitet von einem Moderator:
Ich will nur das wenn egal auf welcher Instanz einer speichert alle anderen Tomcats die neuen Daten laden. Evtl. über einen Listener der alle anderen informiert das sich was geändert hat.

Also die Daten aus der Datenbank in die Tomcats synchronisieren.

Da weiss ich z.B. nicht wie der speichernde Tomcat den anderen mitteilen kann das sich was geändert hat, bzw. was die beste vorgehensweise ist.
 
Zuletzt bearbeitet:
Auch, wenn du es für Deinen konkreten Anwendungsfall (noch) nicht brauchst, würde ich die Tomcat-Instanzen zu einem Cluster zusammenfügen. Dann hast du neben Load-Balancing auch Ausfallsicherheit erhöht.

Und zur Vorgehensweise:
Ich würde die Webanwendung so programmieren, dass sie sich die benötigten Daten immer aus der Persistenzschicht holt (das ist noch nicht die Datenbank). Also nicht selbs eine Art Cache programmieren. Die Persistenzschicht sollte dann mit einem Framework wie Hibernate programmiert werden. Diese Frameworks enthalten out of the Box Funktionen für's Caching und einen Mechanismus namens "Optimistic Locking". Der funktioniert so, dass zu jeder gespeicherten Entity noch eine Spalte "version" gespeichert wird, die eine Nummer enthält, die bei jedem Update hochgezählt wird. Wenn Deine Webanwendung nun Daten aus der Persistenzschicht anfordert, wird bei bereits gespeicherten Entities geschaut, ob die Versionsnummer sich erhöht hat. Falls ja, wird frisch aus der Datenbank nachgeladen. Falls nein, eben nicht. Zur Kontrolle der Versionnummer ist zwar auch ein SELECT auf die Datenbank nötig. Aber das ist immer noch effizienter als die kompletten Daten zu laden.

Evtl. über einen Listener der alle anderen informiert das sich was geändert hat.
Dafür müsste die Datenbank von sich aus in der Lage sein, änderungen an ihre Clients zu melden. Ich glaube, dass das bei jdbc nicht geht. Da geht die Abfrage immer vom Client aus.
 
Zuletzt bearbeitet von einem Moderator:
Erst mal ein fettes Danke für Deine schnelle Hilfe.

Das hat mir sehr geholfen. Manchmal braucht mal einfach eine Richtung in die man gucken muss. :toll:

Das Clustern habe ich als nächstes auf dem Zettel, wenn ich hiermit fertig bin. :rtfm:
 

Neue Themen


Zurück
Oben