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.
Topics
• Implementación de sistema de productor/consumidor.
• Las aplicaciones se subscriben a un topic y escuchan los
mensajes.
• Los productores enviarán mensajes al topic.
• Permite utilizar el grid como sistema de mensajería.
Locks:
• Locks distribuidos que pueden utilizarse para sincronizar procesos.
• Un hilo de uno de los procesos lo obtiene y lo debe liberar, el
resto espera
Semáforos
• Semáforo distribuido.
• Uno o varios hilos pueden entrar en la sección, el resto espera
hasta que se libere, puede liberarlo cualquiera.
Contadores
• Contadores distribuidos y atómicos que se pueden utilizar para
contar o sumar diferentes elementos.
• Al ser atómicos se pueden utilizar simultáneamente desde varios
hilos de forma segura.
• Visibles desde todos los nodos.
• Por ejemplo, se pueden utilizar para contar el número de clientes
diferentes que se han conectado al cluster de manera sencilla.
IdGenerator:
• Generador de ids único a nivel de cluster.
• Cada proceso pide una ID y se le reserva un número de valores, de
esta forma se pueden obtener Ids únicos garantizados sin
necesidad de realizar comunicación de red.
• Es muy útil si tenemos que generar Ids únicos entre múltiples
aplicaciones de forma rápida.
• Es posible generar Ids únicos sin contar con el cluster:
• Es lento, los Ids son muy grandes y depende del generador de números
aleatorios.
Los sistemas de “In memory data grid” son capaces de crear grandenes volúmenes de almacenamiento de datos en memoria gracias a su capacidad de distribuir los datos entre múltiples nodos.
Seleccione una:
Verdadero
Falso
Verdadero
El escalado horizontal consiste en añadir mas nodos al sistema para aumentar la potencia
Seleccione una:
Verdadero
Falso
Verdadero
Cuando se realizan despliegues de IMDG en arquitecturas pequeñas se suelen utilizar las propias aplicaciones como nodos de almacenamiento para crear el cluster de IMDG y ahorrar costes.
Seleccione una:
Verdadero
Falso
Verdadero
Los locks distribuidos se pueden utilizar para sincronizar procesos en distintas máquinas
Seleccione una:
Verdadero
Falso
Verdadero
Los índices en los IMDG se aplican sobre la clave para realizar búsquedas rápidas sobre los datos almacenados.
Seleccione una:
Verdadero
Falso
Falso
Los sistemas de IMDG permiten almacenar únicamente tipos simples en estructuras de tipo mapa clave/valor
Seleccione una:
Verdadero
Falso
Falso
La clave del dato se utiliza en los sistemas de IMDG para decidir en que nodo se almacenará el dato, generalmente mediante la aplicación de una función hash sobre la clave
Seleccione una:
Verdadero
Falso
Verdadero
El número de nodos en una caché distribuida debe ser bastante mas alto que el de particiones lógicas de los datos.
Seleccione una:
Verdadero
Falso
Falso
Podemos almacenar los datos en “Off-Heap” en Java en sistemas de IMDG para evitar que el recolector de basura de problemas al realizar escalado vertical de los datos
Seleccione una:
Verdadero
Falso
Verdadero
Las votaciones de los sistemas de quorum requieren los votos de la mitad de los nodos para ser aceptadas.
Seleccione una:
Verdadero
Falso
Falso
Todos los sistemas de IMDG utilizan el mismo sistema de serialización de objetos para guardar los datos en memoria.
Seleccione una:
Verdadero
Falso
Falso
Cuando se añade un nuevo nodo a una caché distribuido, los datos se redistribuyen de nuevo entre todas las cachés de acuerdo a las particiones lógicas de estos.
Seleccione una:
Verdadero
Falso
Verdadero
La “near cache” consiste en mantener los últimos datos que se han usado de la caché distribuida en la aplicación para lograr un acceso mas rápido a los mismos.
Seleccione una:
Verdadero
Falso
Falso
En IMDG con caché distribuida, cada nodo tiene todos los datos de la cache, lo que facilita la lectura / escritura por parte del cliente ya que no hay que hacer movimiento de datos entre los distintos nodos
Seleccione una:
Verdadero
Falso
Falso
El escalado vertical en los sistemas de IMDG me permite escalabilidad ilimitada en el tamaño de almacenamiento
Seleccione una:
Verdadero
Falso
Falso
Los sistemas de IMDG se suelen utilizar para…
Seleccione una o más de una:
a. Acelerar sistemas mas lentos, actuando como caché de nivel 2
b. Replicar todo el set de datos de base de datos para acceso rápido
c. Ejecución de datos en el servidor para evitar mover los datos
a. Acelerar sistemas mas lentos, actuando como caché de nivel 2
c. Ejecución de datos en el servidor para evitar mover los datos
Supongamos que tenemos una caché distribuida con 5 nodos y factor de replicación 2.
Los 5 nodos se encuentran al máximo de su capacidad.
Si perdemos un nodo, ¿que sucedería? Indica todas las correctas.
Seleccione una o más de una:
a. Perderíamos datos ya que las nos nodos ya están a máxima capacidad.
b. Los datos perdidos se replicarán en el resto de nodos hasta tener dos copias
c. No podemos mantener 2 réplicas de cada partición al no haber espacio libre en los demás nodos
d. Si perdemos otro nodo en algún momento podemos perder datos
e. El cluster se detendría por falta de espacio
c. No podemos mantener 2 réplicas de cada partición al no haber espacio libre en los demás nodos
d. Si perdemos otro nodo en algún momento podemos perder datos
De las siguientes, ¿cuales son características típicas de los sistemas de IMDG?
Seleccione una o más de una:
a. La estructura de almacenamiento suele ser de tipo árbol binario.
b. Soporte para estructuras de datos y “locks” distribuidos
c. Soporte para replicar la caché remota en local
d. Soporte para ejecución de código distribuido
e. Lento en lectura pero rápido en escritura
b. Soporte para estructuras de datos y “locks” distribuidos
c. Soporte para replicar la caché remota en local
d. Soporte para ejecución de código distribuido
La mayor ventaja de quorum distribuido entre todos los nodos son que no existe un punto único de fallo
Seleccione una:
Verdadero
Falso
Verdadero
Si tenemos un cluster de 7 nodos configurados con quorum. ¿Cuantos nodos podremos perder y seguir manteniendo el cluster funcionando?
3
El algoritmo de Paxos es mas sencillo de implementar que el quorum con prioridad, ya que no requiere establecer un orden de prioridad entre los nodos.
Seleccione una:
Verdadero
Falso
Falso
¿Para que podemos utilizar Quorum?
Seleccione una o más de una:
a. Para decidir que miembros forman parte de un cluster
b. Para descubrir rápidamente si se ha perdido algún nodo
c. Para escoger un líder de entre todos los miembros del cluster
d. Para evitar situaciones de “Split Brain”
a. Para decidir que miembros forman parte de un cluster
b. Para descubrir rápidamente si se ha perdido algún nodo
c. Para escoger un líder de entre todos los miembros del cluster
d. Para evitar situaciones de “Split Brain”
El proceso de reconciliación tras un split brain en un sistema de IMDG consiste en recuperar una visión común de los datos del grid considerando que los datos pueden ser diferentes una vez se unan de nuevo los nodos tras el split brain.
Seleccione una:
Verdadero
Falso
Verdadero
¿Que sucede en una caché distribuida si caen nodos del cluster?
Seleccione una o más de una:
a. Nunca se pierden datos gracias a la replicación
b. Los datos que contenía los nodos que se han perdido deben replicarse en los demás para mantener el nivel de replicación
c. Las necesidades totales de memoria para el almacenamiento se mantienen en la mayoría de los casos
b. Los datos que contenía los nodos que se han perdido deben replicarse en los demás para mantener el nivel de replicación
c. Las necesidades totales de memoria para el almacenamiento se mantienen en la mayoría de los casos
Un “Split Brain” se produce cuando los nodos de un cluster pierden parte de la visibilidad entre ellos, creándose dos o mas clusters independientes con menor número de nodos.
Seleccione una:
Verdadero
Falso
Verdadero
En una cache replicada podemos perder datos si el numero de nodos que se pierden es mayor o igual que el factor de replicación
Seleccione una:
Verdadero
Falso
Falso
La configuración de caché replicada en IMDG implica que las lecturas son muy rápidas ya que podemos leer de cualquier nodo, pero las escrituras son mas lentas por tener que escribir el mismo dato en todos los nodos.
Seleccione una:
Verdadero
Falso
Verdadero
Las políticas de expiración me permiten descartar datos de la caché automáticamente de acuerdo a criterios de tiempo de vida, tiempo sin acceder o tamaño de la caché.
Seleccione una:
Verdadero
Falso
Verdadero
El escalado vertical es muy problemático en Java, ya que al aumentar el número de objetos también aumentan las interrupciones por recolección de basura en la JVM
Seleccione una:
Verdadero
Falso
Verdadero
Tras un split brain en un IMDG, los dos sub-clusteres que se unen pueden tienen el mismo dato con la misma clave pero distinto valor. Para evitar esto siempre se debe utilizar quorum y desactivar una de las islas del split brain cuando sucede para evitar que los clientes puedan escribir el mismo dato en las dos islas.
Seleccione una:
Verdadero
Falso
Falso
En los despliegues de IMDG para soluciones enterprise se suelen utilizar las versiones Open Source gratuitas de los productos con el fin de ahorrar costes.
Seleccione una:
Verdadero
Falso
Falso