Lección 6: In-Memory Data Grids Flashcards
¿Qué es In-memory data grid (IMDG)?
las tecnologías dedicadas a
almacenar datos en memoria RAM distribuidos
en varios servidores.
- JCache en Java.
Características de los IMDG
- Estructura de almacenamiento clave/valor.
- Escalabilidad casi “infinita”.
- Auto gestión de nodos mediante “Quorum”.
- Soporte para expiraciones de datos y eventos.
- Estructuras de datos y ”locks” distribuidos.
- Ejecución de código distribuido.
- Mecanismos de “near cache”.
Ventajas de los IMDG
• Alto rendimiento de lectura/escritura.
• Ejecución de código sobre los datos.
• Uso como caché de nivel 2 sobre sistemas de
almacenamiento lentos (Base de Datos).
• Los valores almacenados pueden ser objetos complejos.
• Soporte para replicación entre clusters.
• Mayor seguridad ante perdida de datos.
• Lectura optimizada incluso entre múltiples regiones físicas.
Usos principales
• Sistemas que requieren tiempos de respuesta reducidos:
• Aceleración de BBDD (Caché nivel 2)
• Aceleración de fuentes de datos externas
• Sistemas con suscripción a eventos:
• Respuesta rápida y automática ante cambios
• Tratamiento de datos en el servidor:
• Evitar el movimiento de grandes cantidades de datos
utilizando ejecuciones en el “cluster”.
Quorum: ¿Qué es?
• “Numero de nodos requeridos en un sistema distribuido
para permanecer en funcionamiento”
• Si el número de nodos no es suficiente se rechazan
operaciones.
• Se suelen utilizar para elegir a un “líder” que hace de
“orquestador.”
• Los algoritmos de quorum funcionan mediante
“votaciones” que los nodos usan para ponerse de acuerdo.
• En general se necesitan los votos de la mayoría (mitad de
nodos + 1) para poder funcionar.
Quorum totalmente distribuido.
- Los nodos votan entre ellos para tomar decisiones.
- Todos los nodos hablan con todos.
- Los sistemas de data grid suelen utilizar este esquema.
- Requiere votos de la “mayoría” para evitar ”split brain”.
Mayoría de los votos en quorum.
Al menos, la mitad de los votos + 1.
Split Brain.
• Se denomina “split brain” a la división de un cluster
de nodos en dos o mas partes debido a un fallo.
• Se produce cuando únicamente una parte de los
nodos se ve entre sí.
• Da lugar a la formación de varios “clusters” de nodos.
• El problema mas típico es un fallo de red, que corta
la comunicación entre algunos nodos del cluster
Reconciliación tras split brain.
• Si una de las partes no tiene un dato y la otra si, no hay
problema, se añade el dato.
• Si ambas partes tienen el mismo dato ¿Qué hacer? Política de
“merge” personalizada:
• Mantener con la entrada más reciente de acuerdo al timestamp
de las máquinas (puede provocar errores, sobretodo si la escritura
depende del valor anterior).
• Lógica personalizada.
• Aplicar quorum y desactivar una de las islas del split brain para
evitar que los clientes la utilicen.
Almacenamiento clave-valor
• Almacenamiento similar a un Mapa en los lenguajes de
programación tradicionales.
• Los elementos están identificados por una clave única
• Si un elemento con la misma clave se añade al mapa, se sobrescribe el
anterior.
• La clave se utiliza para decidir el nodo donde se almacenará
el dato
• Se utiliza un hash o “huella” de la misma para calcular el nodo.
• Debemos definir tanto el tipo de la clave como del valor.
Caché distribuida
Existen copias del mismo dato en
múltiples nodos.
Caché replicada
Todos los nodos tienen copia de todos los
datos.
Cache distribuida: ¿Cómo funciona?
• Cada una de las claves se almacena en varios nodos.
• Cuando un nodo hace un get/put en la cache, calcula el hash de la clave
y envía/pide el dato directamente al nodo que tiene el dato.
• En el caso de los put, se envía de forma asícrona el dato también al los
nodos de backup.
• Para obtener mayor tolerancia a fallos, se puede (debe) indicar el
número de copias que se realizará de los datos.
• Recomendado para la mayoría de usos, excepto caches pequeñas con
pocas escrituras.
Cache distribuida: Factor replicación
• Indica el número de copias que existen de cada dato en otros
nodos.
• Se intenta mantener el número de copias de los datos tras una
caída.
• Un factor de replicación N permitiría una caída de N-1 nodos
simultánea sin pérdida de información.
Cache distribuida: Particiones
• Los datos se distribuyen en particiones. • En cada nodo se guardan varias particiones. • Cuando un nodo se cae, a nivel lógico los datos que se pierden/hay que restaurar son las particiones • El número recomendado de particiones debe ser bastante más alto que el de nodos • También se recomienda que sea un número primo
Caché replicada: ¿Cómo funciona?
• Todos los nodos tienen una copia de todos los datos.
• La lectura se hace de forma local, la escritura requiere copiar
el dato a todos los nodos del cluster.
• Recomendado para caches pequeñas con pocas escrituras
(generalmente metadatos).
• Rendimiento optimizado para lectura ya que el dato siempre lo
tiene el nodo al que se accede.
Near cache
• Cache/Mapa que mantiene los datos de la cache replicados
dentro de la aplicación:
• Aconsejado para escenarios con mucha lectura y poca escritura o con
requisitos de consistencia bajos.
Recuperación ante pérdida de nodos
• Cache Replicada:
• No es necesario recuperar los datos, los demás nodos siguen
sirviendo todo el conjunto de datos.
• Únicamente necesitaríamos recuperación si perdemos todo el
cluster.
• Cache distribuida:
• Si se pierden N nodos, donde N es el número de replicas de cada
dato, perdemos la información.
• Es necesario recuperar los datos de algún tipo de “backup”
Políticas de expiración
• Permiten borrar las entradas de cache basándose en
tiempo de vida, tiempo sin utilizar o tamaño del mapa.
Escalado
• Cuando se quiere ofrecer mayor capacidad de
almacenamiento o de cómputo existen dos posibilidades:
• Escalado horizontal (aumentar el número de máquinas)
• Escalado vertical (aumentar la capacidad de cada máquina)
Escalado horizontal en clusters IMDG
• Ventajas:
• Aumenta la capacidad de almacenamiento linealmente
• Aumenta la capacidad de computo linealmente
• Escalabilidad “ilimitada” (nuestro cuello de botella son las comunicaciones
entre nodos)
• Se puede realizar de forma sencilla con mínima afección al servicio
• Desventajas:
• Un cluster con más nodos es más difícil de mantener
• Mayor gasto en hardware (racks, redes…)
Escalado vertical en clusters IMDG
• Ventajas:
• Aumenta la capacidad de computo linealmente
• Aumenta la capacidad de almacenamiento linealmente
• Fácil de mantener
• Desventajas:
• Se debe realizar de forma incremental para minimizar el impacto
• Escalabilidad limitada por la tecnología y el hardware
• Almacenar mapas muy grandes causa problemas de Garbage Collection en
Java
Escalado vertical – Garbage Collection
• En Java la JVM se para completamente durante un pequeño periodo
de tiempo para limpiar objetos “muertos” en la memoria.
• Cuantos más objetos, mayor duración de parada, mayor
interrupción de servicio.
• Limita la capacidad de escalar verticalmente.
• Posibles soluciones:
• Utilizar memoria off-heap – La memoria está fuera de la JVM
• Levantar más de una JVM en cada nodo – Usamos una máquina mas grande
para hacer un escalado horizontal en número de nodos.
Listas/Colas
• Implementación de las interfaces List y
Blocking Queue
• Visibles desde múltiples máquinas
• Datos replicados al iterar sobre la lista
• Soportan listeners
• Podemos recibir eventos si se añade o
elimina un elemento.