2009-07-31 9 views
1

Ich muss eine Sequenz/einen Counter über einen Cluster mit acht Knoten replizieren. Dies bedeutet, dass jede HTTP-Anfrage den nächsten Wert in der Sequenz erhält, indem sie etwas wie getNextIntAndIncrement() aufruft, wobei der Sequenzstatus über alle Server hinweg synchronisiert wird. Um dies zu verdeutlichen, muss dies im Bereich application/global und nicht in der Sitzung vorhanden sein. Ich weiß, es klingt nach einer schrecklichen Idee und wird zweifellos zu Engpässen führen, aber das ist die Voraussetzung.Clustering/replizierender Counter-Status mit Gültigkeitsbereich auf Anwendungsebene

Meine Frage ist, was ist die beste Lösung? Ich habe Stateful Session-Beans betrachtet, aber sie scheinen für nur einen Client entworfen zu sein. Ich habe eine Datenbanksequenz betrachtet. Ich habe mir auch Terracotta-Clustering angesehen; Sie haben eine Sequenz Demo http://www.terracotta.org/web/display/orgsite/Recipe?recipe=sequencer Allerdings möchte ich Lösungen von Drittanbietern vermeiden, wenn eine J2EE-Lösung existiert. Ich benutze Weblogic 8.1.

Antwort

2

Einige Java EE-Anbieter haben Cache-Lösungen (z. B. WebSphere Object Grid) verteilt, und Sie haben bereits Angebote von Drittanbietern identifiziert, aber ich glaube nicht, dass ein tragbarer Standard existiert.

Was ist los mit der DB-Lösung? Es ist klar, dass Sperren erforderlich sein wird, also warum nicht zur DB gehen. Meine Vermutung ist, dass, wenn Sie echte inkrementelle Werte, keine Werte usw. benötigen, Transaktionsbeziehungen mit anderen Datenbankwerten wichtig sind, verwenden Sie die DB.

Wenn Sie die Notwendigkeit absoluter sequentieller Werte (dh Lücken) lockern können, dann können Sie Mengen von Zahlen austeilen und dadurch Konflikte erheblich reduzieren. Wenn Sie wirklich sequentielle Werte brauchen, keine Lücken, dann brauchen Sie ein gewisses Maß an Locking zwischen den Instanzen - Sie können nicht zulassen, dass ein zweiter "Thread" eine neue Sequenznummer erhält, bis Sie die Verwendung von "commit" der aktuelle. Wenn Sie es sich leisten können, die ungerade Sequenznummer zu verlieren, dann tun Sie viel besser. Oder, wenn Sie unabhängige Nummerierungsschemata zwischen Instanzen können Sie in einer viel besseren Positionen sind. Zum Beispiel Namen Sie Server a, b, c ... haben IDs A001, A002, B001, C001, C002 usw.

+0

Ich werde eine Datenbank-Lösung verfolgen. danke – Andrew

1

Ich denke, eine Datenbank-Sequenz würde wahrscheinlich das deterministischste Ergebnis, vor allem, wenn Sie hoch-serialisierte Transaktionen verwenden, um es anzufordern.

Allerdings würde ich ernsthaft die Gültigkeit von so etwas in Frage stellen, aber das sind nur meine 2 Cent.

0

Sie haben Weblogic in den Tags für diese Frage - Weblogic ermöglicht Cluster Singletons. z.B. Eine Instanz pro Cluster mit Failover-Unterstützung.

Dies sollte Ihre Anforderung erfüllen:

http://e-docs.bea.com/wls/docs100/javadocs/weblogic/cluster/singleton/SingletonService.html

+0

Ich verstehe (noch) nicht, wie das hilft. 1). Wie greift der HttpRequest-Prozessor in einem Server auf den im Singleton-Dienst verwalteten Wert zu? 2). Wenn die Singleton-Instanz (oder ihr Server) fehlschlägt, wie wird die Anzahl beibehalten? In einem DB oder einem anderen Mechanismus? – djna

+0

danke für den Vorschlag, aber wir verwenden weblogic 8.1 – Andrew

Verwandte Themen