2010-12-03 3 views
3

Wir entwickeln eine Anwendung, die normalerweise auf einem einzelnen Webserver bereitgestellt wird. Jetzt überprüfen wir, wie es in einer Clusterumgebung ausgeführt wird, da einige Kunden Cluster verwenden.J2EE-Cluster: Gibt es eine allgemeine Möglichkeit, die zentrale Konfiguration zu handhaben?

Das Problem ist die App erstellt eine lokale Konfiguration (in der Registrierung/Datei), die keinen Sinn in einem Cluster macht. Die Konfiguration wird von der Anwendung geändert. Gibt es eine generische Möglichkeit (wie eine Schnittstelle), eine zentrale Konfiguration vorzunehmen, so dass die Konfigurationsdatei (-datei) selbst nicht auf jedem Knoten dupliziert wird, wenn die Anwendung in einem Cluster bereitgestellt wird? Irgendwelche anderen empfohlenen Optionen? (tun es manuell mit der Konfiguration auf Netzwerk-Freigabe/in der Datenbank/einige MBean?)

Warum generisch? Es muss auf verschiedenen Application-Servern (wie Tomcat, Jboss, Webspere, Weblogic ...) laufen, so dass wir einige serverspezifische Funktionen nicht verwenden können.

Danke.

Antwort

0

Der einfachste Weg für die zentrale Konfiguration ist das Dateisystem. Auf diese Weise können Sie das Dateisystem auf Ihrem Betriebssystem bereitstellen und es Ihrem App-Server unabhängig von Marke oder Version zur Verfügung stellen.

Wir machen dies für einige unserer Anwendungen. Gemeinsame Bibliotheken und/oder Eigenschaftendateien, die uns wichtig sind (in unserem Fall). Wir richten entweder JVM parms- oder JNDI-Umgebungsvariablen ein (versuchen, zu diesen zu wechseln), sodass wir zur Laufzeit den Pfad zum bereitgestellten Laufwerk nachschlagen und die Daten aus den Dateien laden können.

Funktioniert ziemlich glatt für uns.

Wenn Sie jetzt Informationen schreiben, ist das eine andere Geschichte. Da müssen Sie sich Sorgen darüber machen, wie Sie Ihren Cluster betreiben (ist es nur hoch verfügbar? Load-Balanced?). Läuft die App in beiden Clustern, als wäre es eine App? Oder läuft es unabhängig auf jedem Clusterknoten? Wenn ja, müssen Sie sich möglicherweise um gleichzeitige Schreibvorgänge kümmern. Wahrscheinlich besser, mit einer Datenbank oder einer der anderen oben genannten Lösungen zu gehen.

Aber wenn alles, was Sie tun, liest Konfiguration ist, würde ich für das angehängte Dateisystem entscheiden, wie es am einfachsten ist.

+0

ok, ich vermutete so etwas. Eigentlich möchten wir nicht zusätzliche Informationen von unserem Kunden benötigen (wie eine Konfigurationsdatenbank). Mein Team und ich werden Ihre Ideen berücksichtigen. Vielen Dank. –

0

Sie können eine Bibliothek wie Commons Configuration verwenden und eine clusterfreundliche Implementierung wie JDBC oder JNDI auswählen.

0

Ich würde JDBC und JDNI zuerst betrachten, aber wenn Sie wollen, dass Ihre Server unabhängig laufen können, würde ich ein Dateiverteilungssystem wie subversion/git/mercurial vorschlagen, dh wenn Ihre zentralen Konfigurationsserver ausgefallen oder nicht erreichbar sind Ich will nicht, dass die Produktion aufhört.

Eine Version gesteuerte System bietet eine Geschichte, die dem gemacht, was, wann und kontrollierte Freisetzungen (und Rollback von Freisetzungen)

Eine Möglichkeit, ändert sich die Ausgabe des zentralen Servers Hinzufügen eines weiteren Point of Failure zu vermeiden, ist eine zu verwenden, Datenbankserver, auf den Sie bereits angewiesen sind (vorausgesetzt, Sie haben einen) mit der Begründung, dass wenn Sie nicht laufen, Sie sowieso nicht arbeiten werden.