Ich muss den Sitzungsstatus für eine Webanwendung speichern, die auf mehreren Servern bereitgestellt wird. Ich möchte klebrige Sitzungen oder Sitzungsreplikation vermeiden, da ich möchte, dass die Anwendung in sich geschlossen ist und sich nicht auf Servlet-Container-spezifische Konfigurationen verlässt.
Logischerweise bleibt also nur die Möglichkeit, die Sitzung woanders zu verwalten, und die logische Richtung ist eine Datenbank, die alle Server gemeinsam nutzen. Aber das wird zu einem Engpass (und einem Single Point of Failure), außerdem ist eine relationale Datenbank nicht wirklich darauf ausgelegt, Sitzungsdaten zu speichern. Eine verteilte NoSQL-Lösung wäre eine bessere Wahl, aber auch das ist eine weitere zu verwaltende Komponente.
Also dachte ich an eine schnelle und verteilte einbettbare Java-Cache-Bibliothek, die die Daten über alle Knoten hinweg repliziert, sodass der Client unabhängig davon, welchen Server er erreicht, Zugriff auf den neuesten Stand hat.
Hazelcast scheint eine gute Wahl zu sein, aber ich würde nur eine Karte ohne andere Funktionen von Hazelcast brauchen, also scheint es ein bisschen zu viel für nur einen verteilten Container von Schlüssel-Wert-Paaren zu sein.
Aber ansonsten kann ich anscheinend keine andere Bibliothek finden, die den Anforderungen entspricht. Idealerweise sollte es eine Open-Source-Bibliothek sein, etwas, das ich in einem kommerziellen Produkt frei verwenden kann.
Irgendwelche Ideen?
Ehcache- und Guava-Caches sind ziemlich beliebte und nützliche In-Process-Caches. Wenn die Verwendung eines externen Prozesses für den Cache möglich ist, eignen sich Memcached und Redis gut für diesen Zweck.
Vollständige Offenlegung: Ich arbeite für Alachisoft.
Sie können NCache für .Net oder TayzGrid für verteilten Java-Cache überprüfen . Beide Projekte sind Open Source.
Ihre Anforderung ist zu bekommen;
schnelle und verteilte integrierbare Java-Cache-Bibliothek, die die Daten über alle Knoten hinweg repliziert, sodass der Client unabhängig davon, welchen Server er erreicht, Zugriff auf den neuesten Stand hat.
Dies ist, was diese beiden frei zur Verfügung stellen. Verwenden Sie es für das, wofür Sie es brauchen, und lassen Sie die anderen Funktionen weg.
Kurze Codeübersicht aus dem verlinkten Blog
import com.alachisoft.TayzGrid.web.caching.Cache;
import com.alachisoft.TayzGrid.runtime.*;
public class MyCachingSample {
private String url = "dbc:msql://20.200.20.1:1114/MyDatabase";
public Employee GetEmployee(String empId) throws Exception {
Employee emp = null;
try {
Cache cache = TayzGrid.initializeCache("MyDistributedCache");
emp = (Employee) cache.get(empId);
//If key not found in cache, Load from the database
if (emp == null) {
//Your logic goes here
ResultSet rs = stmt.executeQuery("SELECT * FROM Employee WHERE EmpId ='" + empId + "'");
if (rs.next()) {
emp = new Employee();
emp.EmpId = rs.getString("EmpId");
//Cache key for future use
cache.insert(empId, emp, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default);
}
}
} catch (Exception exp) {
throw exp;
}
//return the required object
return emp;
}
}
Sie müssen jedoch einen einfachen Sitzungsanbieter für sich selbst schreiben, um Sticky Sessions zu unterstützen, oder Sie könnten NCache oder TayzGrid kaufen, um diese Funktionen zu erhalten. TayzGrid oder NCache können und werden auch als verteilter Cache oder als In-Memory Data Grid oder manchmal als In-Memory Key Value Store verwendet. Es hängt ganz davon ab, was Ihre Bedürfnisse sind.
Wenn Sie Unterstützung benötigen oder planen, es für ein Unternehmen zu verwenden, können Sie jederzeit die kostenpflichtigen Lizenzen erwerben. Es ist eine funktionsreichere Version und bietet Unterstützung. Wir haben über 10 Jahre Branchenerfahrung, daher ist es stabil für eine vollständige Produktionsumgebung.
Nikolaus Raul
JohnDoDo
Nikolaus Raul
JohnDoDo
Nikolaus Raul
Karussell
Karussell
Nikolaus Raul