Pregunta

Actualmente estoy implementación de un servicio REST web usando CouchDB y Restlet. La capa Restlet es principalmente para la autenticación y algunos menores de filtrado de los datos JSON servida por CouchDB:

Clientes <= HTTP => [Restlet <= HTTP => CouchDB]

Estoy usando CouchDB también a los datos de inicio de sesión almacén de usuarios, porque no quiero añadir un servidor de base de datos adicional para ese propósito. Por lo tanto, cada solicitud a mi servicio hace dos CouchDB pide realizado por Restlet (datos de autentificación de solicitud + "real"). Con el fin de mantener el servicio como eficiente como sea posible, quiero reducir el número de peticiones, en este caso redundantes solicitudes de datos de inicio de sesión.

Mi idea ahora es proporcionar una memoria caché (i.e.LRU-caché a través de LinkedHashMap) dentro de mi solicitud de inicio de sesión Restlet que cachés de datos, ya que el almacenamiento en caché HTTP probabily no será suficiente. Pero ¿cómo invalidar los datos de la caché, una vez que un usuario cambia la contraseña, por ejemplo. Gracias a descansar, la aplicación puede ejecutarse en varios servidores en paralelo, y no quiero crear una instancia central sólo para datos de caché de inicio de sesión.

En la actualidad, ahorro solicitaron los datos de autenticación en la memoria caché y trato de auth nuevas solicitudes mediante el uso de ellos. Si un error de autenticación o en la actualidad es de entrada disponible, voy a enviar una petición GET a mi almacenamiento CouchDB con el fin de obtener los datos de autenticación real. Por lo que en el peor de los casos, los usuarios que han cambiado sus datos serán quizás todavía ser capaz de iniciar sesión con sus credenciales antiguas. ¿Cómo puedo lidiar con eso?

O lo que es una buena estrategia para mantener la memoria caché (s) hasta a la fecha en general?

Gracias de antemano.

¿Fue útil?

Solución

A mí parece que has crecido lo suficiente como para utilizar un poco de solución de caché "profesional" (por ejemplo, EHCache ). Todos los cachés distribuidos permiten la replicación de nuevo y la invalidación de datos entre los diferentes nodos para su problema ya está resuelto.

Otros consejos

Un distribuye caché en memoria memcached como podría ser lo que buscas. Puede configurar la edad objeto, tamaño de la caché y también exponen a las devoluciones de llamada para eliminar objetos específicos de la memoria caché (como cuando la información es rancio).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top