Synchronisieren einer Methode über JVMs hinweg

8

Wie wird eine Methode über JVMs hinweg synchronisiert?

Mein Beispiel ist eine Webanwendung, die einschränkt, dass ein Benutzername mehr als einmal angemeldet wird (mit anderen Worten, der erste Benutzer kann sich anmelden, aber wenn sich ein anderer Benutzer mit demselben Benutzernamen anmeldet, wird er zurückgewiesen).

Die Webanwendung wird auf mehreren Servern bereitgestellt. Daher gibt es mehrere JVMs, und Benutzer können versuchen, sich je nach Lastenausgleich mit unterschiedlichen Servern anzumelden.

So sieht die Methode aus

%Vor%

Es funktioniert auf 1 Anwendungsserver aufgrund der synchronisierten Methode, aber über mehrere JVMs hinweg? Zwei Benutzer könnten gleichzeitig versuchen, sich bei verschiedenen Web-Apps anzumelden. Wie würde ich das verhindern?

* BEARBEITEN * Die App verwendet auch Memcached, wenn Ihre Lösung einige transaktionale Cache-Methoden nutzen möchte.

    
bluedevil2k 15.10.2013, 20:02
quelle

1 Antwort

10

Sie haben nach Synchronisierungsmethoden für JVMs gefragt. Dies erfordert eine Bibliothek, die verteilte Prozesse behandelt. Es gibt viele Möglichkeiten, hier sind nur ein paar:

  1. Terracotta - Unterstützt das Konfigurieren bestimmter Felder als "freigegeben" über JVMs hinweg, sodass Sie die standardmäßige JVM-Sperrung wie das synchronisierte Schlüsselwort verwenden können Arbeit an mehreren JVMs.
  2. JGroups - Jgroups ist ein Toolkit für verteilte Anwendungen. Sperren ist eine der Funktionen, die es bietet. Hier finden Sie ein Beispiel aus der Dokumentation

Das Einrichten verteilter Sperren ist nie einfach, unabhängig davon, welche Bibliothek Sie verwenden. Wenn Sie es brauchen, gut, aber für Ihr Beispiel scheint das wie Overkill. Andere Optionen:

  • Fügen Sie eine Eindeutigkeitseinschränkung in der Datenbank hinzu und lassen Sie die Eindeutigkeit erzwingen. Dies kann sich auf die Leistung der Datenbank auswirken. Es hängt also davon ab, wie viel Datenverkehr Sie erwarten.
  • Lassen Sie den Load Balancer den Benutzernamen (oder einen Hash davon) als Schlüssel verwenden, mit dem Anforderungen an einen Webserver zugewiesen werden. Dies garantiert, dass Anfragen von demselben Benutzernamen jedes Mal auf demselben Webserver ankommen - keine Notwendigkeit für eine verteilte Sperre, sondern nur eine reguläre.
Barak 15.10.2013, 21:16
quelle

Tags und Links