colombia-dev / bookclub

Grupo de Lectura de ColombiaDev
38 stars 0 forks source link

Designing Data-Intensive Applications: 5. Replication #8

Open guilleiguaran opened 5 years ago

guilleiguaran commented 5 years ago

Esta semana a cargo @fmauricios Siguiente semana @kuryaki

kmlroot commented 5 years ago

Capítulo 5 - Replicación

Replicación quiere decir que podemos tener una copia de los datos en muchas máquinas y así poder obtener ventajas como: alta disponibilidad, baja latencia, escalabilidad; en este capitulo el autor nos habla de 3 algoritmos para replicación de cambios entre nodos: un solo líder, multi-líder y sin lider.

Un solo líder

Cada vez que tenemos multiples replicas de nuestra base de datos debemos asegurar que toda la información sea consistente entre ellas, la solución que más usada es la replicación basada en un líder, en esta tenemos un líder y varios seguidores, cualquier cosa que el líder escriba en su estado local deberá ser transmitido a los nodos seguidores. Siempre podemos leer de cualquiera de los nodos, ya sea líder o seguidores, pero si queremos escribir solo podemos hacerlo en el líder.

Replicación Síncrona vs Asíncrona

La replicación síncrona tiene la ventaja de todos los nodos seguidores van a estar siempre actualizados, si por algún motivo el líder falla la información siempre va a estar disponible en uno de sus seguidores, sin embargo replicar de forma asíncrona totalmente no es conveniente, lo que se debería tener es un nodo con replicación síncrona y los demás con replicación asíncrona y si el nodo síncrono se empieza a poner lento uno de los que son asíncronos se deberá empezar a comportar de forma síncrona. En la replicación asíncrona si el líder falla vamos a tener serios problemas con la lectura de los datos ya que la información no alcanza a ser replicada en los nodos seguidores.

Manejo de fallas en un nodo

Implementación de logs replicados

Replication lag

Cuando una aplicación realiza lecturas a un "nodo seguidor" que funciona de forma asíncrona puede ver información desactualizada si el nodo está presentando alguna falla, por lo tanto tendremos información diferente entre el líder y ese "nodo seguidor" a esto se le conoce como consistencia eventual, sin embargo si se espera un tiempo determinado (no se sabe con certeza cuanto, pueden ser una fracción de segundo) los nodos estarán sincronizados nuevamente (si la falla no fue muy grave)

Existen algunos métodos para solucionar el problema anterior:

NOTA: Algunos sistemas que funcionan con el modelo de un solo lider son Raft, Kafka, Paxos

Una desventaja del modelo de un solo lider es que todas las escrituras pasan solamente por este, entonces si presenta una caida no se va a poder realizar la escritura hasta que se elija un nuevo lider.

Replicación multi-lider

En este modelo varios nodos pueden ser lideres, por lo tanto varios nodos pueden aceptar escrituras, en este modelo cada lider también actua como seguidores a los otros lideres.

Algunos casos de uso para la replicación multi-lider son:

Una desventaja de la replicación multi-lider es que los datos pueden ser modificados concurrentemente en dos diferentes datacenters.

Manejando conflictos en la escritura

Topologías en replicación multi-lider

Toplogías en replicación multi-lider

En las topologías circular y en estrella si un nodo falla este fallo puede interrumpir el flujo de replicación de mensajes.

Replicación sin lider

En la replicación sin lider no se fuerza a tener un order particular en las escrituras, estas se pueden enviar a varios nodos y también leer de varios nodos. Algunos motores de bases de datos como Riak, Cassandra y Voldemort usan la replicación sin lider, todos ellos inspirados en Dynamo

La replicación sin líder al igual que la replicación multi-lider también es adecuada para operaciones en multiples datacenters, ya que soporta escrituras concurrentes, interrupciones en la red, picos en la latencia, Cassandra implementa su soporte de multiples datacenters con este tipo de replicación.

Detectando escrituras concurrentes

Cualquier otro complemento es bienvenido, muchas gracias.