2011-04-19 24 views
6

Estoy buscando una solución para compartir un caché entre dos aplicaciones web tomcat que se ejecutan en diferentes hosts. La memoria caché se utiliza para la sincronización de datos, por lo que debe garantizarse que la caché esté actualizada en todo momento entre las dos instancias de tomcat. (Lo siento, no estoy 100% seguro de que la terminología correcta para este requisito sea "consistencia" o algo más específico como tener propiedad ACID). Otro requisito es, por supuesto, que sea rápido acceder al caché, con aproximadamente el mismo número de escrituras como lecturas. Tengo acceso a un sistema de archivos compartido, eso es una consideración.Caché compartida entre aplicaciones web Tomcat

He visto algo así como ehcache, pero para obtener un caché compartido entre webapps tendría que implementarlo encima de un entorno de Terracota o utilizando el nuevo servidor de memoria caché ehcache. El primero (Terracotta) parece excesivo para esto, mientras que el servidor web de caché parece que no proporcionará el rendimiento rápido que yo quiero.

Otra solución que he analizado es construir algo simple sobre un almacén rápido de valores-clave como Redis o memcachedb. Redis está en la memoria, pero se puede configurar fácilmente para que sea un caché centralizado, mientras que memcachedb es un caché persistente basado en disco que podría funcionar porque tengo un sistema de archivos compartido.

Estoy buscando sugerencias sobre cómo resolver mejor este problema. La solución debe ser una tecnología relativamente madura, ya que se utilizará en un entorno de producción.

¡Gracias de antemano!

+0

Quizás elabore lo que necesita que el caché sea "100% actualizado en todo momento". La única manera de garantizar esto es bloquear el elemento de caché mientras está en uso, lo que significa que ya no es realmente un caché. Puede utilizar zookeeper para sus necesidades de sincronización y Memcache como caché, pero depende de sus necesidades. – sbridges

+0

¿El caché va delante o detrás de Tomcat? es decir, ¿necesita almacenar en caché las salidas o entradas? –

+0

Esencialmente, lo que intento lograr es la seguridad de subprocesos en el nivel de base de datos para una aplicación distribuida de Tomcat. Pero realmente no quiero usar el bloqueo de bases de datos o incluso el bloqueo a nivel de tabla. Por lo tanto, estaba tratando de implementar un tipo de mecanismo de bloqueo "de nivel de registro", y para que esto funcione en múltiples instancias de Tomcat, los mecanismos de bloqueo tendrían que ser accesibles para todas las instancias, por lo que me vino a la mente un "caché" compartido. y también por qué lo puse entre comillas porque probablemente no es la terminología correcta para él. – cambo

Respuesta

4

Estoy seguro de que no necesita un servidor de terracota o ehcache si necesita un caché distribuido. Ehcache con uno de los four replication mechanisms haría.

Sin embargo, según lo que ha escrito, creo que está buscando algo más que un caché. Memcached/Ehcache son ejemplos de lo que podría llamar una capa de almacenamiento en caché para su aplicación, nada más.

Si se encuentra usando palabras como '' actualizado '' 'ACID', es mejor utilizar un DB en memoria como Oracle Times Ten/MySQL Cluster/Redis con un disco persistente almacenamiento.

+0

Esto es en realidad con lo que fuimos, una tabla de base de datos en memoria que también podemos complementar con una tienda de clave/valor rápida con almacenamiento persistente. – cambo

3

Puede usar memcached (no memcachedb) para un almacenamiento en caché rápido y eficiente. Redis o memcachedb podrían ser una exageración a menos que desee el almacenamiento en caché persistente. Memcached se puede agrupar muy fácilmente y puede usar el cliente spymemcached java para acceder a él. Memcacached es muy maduro y se ejecuta en varios cientos de miles, sino millones de servidores de producción. Se puede controlar a través de los sistemas Nagios y Munin en producción.

Cuestiones relacionadas