Necesito almacenar el estado de la sesión para una aplicación web que se implementa en varios servidores. Quiero evitar las sesiones pegajosas o realizar la replicación de sesiones, ya que quiero que la aplicación sea independiente y no dependa de configuraciones específicas del contenedor de servlets.
Entonces, lógicamente, la única opción que queda es administrar la sesión en otro lugar y la dirección lógica es con una base de datos que comparten todos los servidores. Pero eso se convertirá en un cuello de botella (y un único punto de falla), además de que una base de datos relacional no está realmente diseñada para almacenar datos de sesión. Una solución NoSQL distribuida sería una mejor opción, pero aún así será otro componente para administrar.
Así que estaba pensando en una biblioteca de caché incrustable de Java rápida y distribuida que replique los datos en todos los nodos para que, sin importar a qué servidor llegue el cliente, tenga acceso al estado más reciente.
Hazelcast parece ser una buena opción, pero solo necesitaría un mapa sin ninguna otra característica de Hazelcast, por lo que parece demasiado para un contenedor distribuido de pares clave-valor.
Pero aparte de eso, parece que no puedo encontrar ninguna otra biblioteca que se adapte a la necesidad. Idealmente, debería ser una biblioteca de código abierto, algo que pueda usar libremente en un producto comercial.
¿Algunas ideas?
Divulgación completa: trabajo para Alachisoft.
Puede consultar NCache para .Net o TayzGrid para la caché distribuida de Java . Ambos proyectos son de código abierto.
Su requisito es obtener;
Biblioteca de caché incrustable de Java rápida y distribuida que replica los datos en todos los nodos para que, independientemente del servidor al que llegue el cliente, tenga acceso al estado más reciente.
Esto es lo que ambos proporcionan gratuitamente. Úselo para lo que lo necesite y deje de lado las otras características.
Breve resumen del código del blog vinculado
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;
}
}
Sin embargo, tendrá que escribir un proveedor de sesión simple para admitir sesiones persistentes o puede comprar NCache o TayzGrid para obtener estas funciones. TayzGrid o NCache también se pueden utilizar y se utilizan como una memoria caché distribuida o una cuadrícula de datos en memoria o, a veces, como un almacén de valores clave en memoria. Depende completamente de cuáles sean tus necesidades.
Si necesita soporte o planea usarlo para una empresa, siempre puede obtener las licencias pagas. Es una versión más rica en funciones y proporciona soporte. Tenemos más de 10 años de experiencia en la industria, por lo que es estable para un entorno de producción completo.
Nicolás Raúl
JuanDoDo
Nicolás Raúl
JuanDoDo
Nicolás Raúl
Karussell
Karussell
Nicolás Raúl