Implementación de caché

He estado investigando esto durante una semana, pero me gustaría reflexionar sobre mi situación particular ...

2 servidores físicos:

  • Servidor A: guerra pública, guerra de administración

  • Servidor B - guerra pública

Requisitos:

  • Ambas WAR necesitan ver los mismos datos.

  • admin WAR modifica / agrega datos al caché.

  • Los WAR públicos modifican otras partes del caché / le agregan datos.

  • toda la memoria caché debe residir en la memoria en cada servidor físico (si agrego algo en el Servidor A admin WAR o public WAR, debe aparecer en el Servidor B public WAR), por lo que en caso de falla, no estamos esperando la mitad del caché que se rellenará

  • 1,500 usuarios / servidores activos, la gran mayoría del tráfico se lee, muy poca escritura

Hardware adicional está fuera de la cuestión.

¿Existe una buena solución de almacenamiento en caché de terceros para este escenario? Parece que la mayoría de los sistemas de almacenamiento en caché distribuidos quieren dejar la mitad de los datos en el Servidor A y la otra mitad en el Servidor B, lo que no satisfaría nuestras necesidades de rendimiento de conmutación por error.

Gracias por cualquier idea!

Respuesta 1

Eche un vistazo a las opciones replicadas para EhCache .

Parece que ha estado buscando información sobre "cachés distribuidos", que tiene una definición diferente que "caché replicado". Una memoria caché distribuida es un sistema de memoria caché más grande distribuido entre muchas máquinas, de modo que la pérdida de cualquier máquina en el clúster no reduce toda la memoria caché, sino solo una parte. En este escenario, el tamaño total de su caché puede alcanzar (número de máquinas por memoria de cada máquina).

En un caché replicado, los datos almacenados en caché se replican en cada máquina, lo que lo limita a un tamaño total de caché máximo (memoria de cualquier máquina).

Respuesta: 2

Deberías mirar a Redis

Respuesta: 3

http://www.gigaspaces.com/ tiene una solución para eso, le permite crear "Espacio" que sirve como caché en modo replicado, por lo que cada nodo tendrá una copia exacta de los datos.

También tienen una solución para fallas o espera activa.

Editar: Gigaspace es mucho más que un caché compartido, pero puede usar solo la solución de almacenamiento en caché. Se llama en la cuadrícula de datos en memoria. Han cambiado dramáticamente sus páginas web, así que no puedo encontrar la página exacta. Pero si busca en la documentación, la encontrará.

Puedes comenzar aquí http://www.gigaspaces.com/datagrid

Pero la tecnología no es gratuita.

Respuesta: 4

Parece que la mayoría de los sistemas de almacenamiento en caché distribuidos quieren dejar la mitad de los datos en el Servidor A y la otra mitad en el Servidor B, lo que no satisfaría nuestras necesidades de rendimiento de conmutación por error.

No, puedes ajustarlo fácilmente. De lo contrario, necesita una visión fija (debe saber exactamente qué caché almacena sus datos). Puede elegir cualquier solución en el mercado EhCache, GigaSpace, GridGain, etc. Recomendaría usar JBoss Cache, en mi opinión, el más simple y exactamente lo que necesita

Respuesta: 5

Hay muchas soluciones en este espacio.

Todos ellos pueden configurarse como cachés distribuidos. AFAIK Infinispan funciona mejor cuando se deja un caché incorporado en JBoss AS, la última vez que verifiqué que era difícil de integrar en otros servidores de aplicaciones. Si tiene dinero, recomendaría BigMemory de terracota. Es el derivado comercial de EhCache y ofrece muchas características adicionales agradables.

Respuesta: 6

Estoy tratando de entender mi cerebro en torno a la programación paralela / concurrente (en Java) y me estoy quedando atrapado en algunos fundamentos que no parecen estar cubiertos en ninguno de los tutoriales que he estado leyendo. Cuando ...

Después de esta respuesta sobre cómo imprimir un texto predefinido antes y después de una JTable (no encabezado y pie de página), quiero ir más allá. Con la clase Libro, es posible, como el ejemplo, imprimir ...

¿Cómo se puede especificar un paso para JSpinner? (por ejemplo, de 10 minutos en lugar de 1) Hay un modelo que permite seleccionar el tamaño del paso para los números SpinnerNumberModel (valor, min, max, step); pero como ...

Estoy ejecutando Glassfish 3.1.2 integrado en la unidad de prueba de mi aplicación. Configuré un ScatteredArchive como este: archive.addClassPath (nuevo archivo ("target / classes")); archive.addClassPath (nuevo archivo ("src / test / ...