¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Consenso: quórum y elección de líder

Después de esta lección: Puedo explicar cómo varias máquinas acuerdan un líder o un valor con una mayoría.

Lección de 60 min4 comandosLaboratorio de Valkey: aprende un almacén clave-valor compatible con Redis, con expiración y listas

Dos servidores creen ser el líder

El consenso es el acuerdo de varias máquinas sobre un mismo valor o sobre quién manda, aunque algunas fallen. Se usa para elegir un líder, repartir un candado o confirmar una escritura.

Si dos servidores se creen el líder a la vez y escriben cosas distintas, los datos se corrompen. Se evita exigiendo que decida una mayoría.

Al final de esta lección

Nota

Puedo explicar cómo varias máquinas acuerdan un líder o un valor con una mayoría.

Palabras clave

PalabraQué significa
Consensoel acuerdo de varios nodos sobre un único valor
Mayoríamás de la mitad de los nodos
Quórumel número de nodos que debe responder para decidir
Líderel nodo que dirige mientras dura su mandato
Elecciónuna votación para escoger al líder
Cerebro divididodos grupos que actúan a la vez como si fueran el líder (split brain en inglés)

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una mayoría siempre se solapa con otra

Una mayoría es más de la mitad de los nodos. Con 5 nodos son 3. Dos mayorías cualesquiera comparten al menos un nodo, porque no caben dos grupos de 3 en 5 sin tocarse.

Por eso solo puede haber una decisión a la vez: dos grupos opuestos necesitarían un nodo en común que no votaría dos veces.

Ejemplo: mayoría y fallos que se aguantan

NodosMayoríaNodos que pueden caer
321
431
532
743

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Fabricar un cliente pequeño llamado v

Comando
v() ( printf '%s\r\n' "$*" | nc -w 1 valkey 6379 )

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ana pide el candado del informe

Comando
v SET lock:informe ana NX EX 120

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Bea pide el mismo candado

Comando
v SET lock:informe bea NX EX 120

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ver quién tiene el candado

Comando
v GET lock:informe

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

El líder se elige por mayoría de votos

Cuando falta líder, un nodo se presenta y pide votos. Cada nodo vota una sola vez por elección. Quien reúne una mayoría es el nuevo líder.

Si los votos se reparten y nadie llega a la mayoría, no gana nadie y se vota de nuevo. Mientras el líder es uno, los demás le obedecen.

Contar los votos de una elección

Código: python
# Cinco nodos votan a un líder. Un voto None es un nodo que no contestó.
votos = ["ana", "bea", "ana", None, "ana"]
nodos = 5
mayoria = nodos // 2 + 1
cuenta = {}
for voto in votos:
    if voto is not None:
        if voto in cuenta:
            cuenta[voto] = cuenta[voto] + 1
        else:
            cuenta[voto] = 1
print("Votos:", cuenta, "y hace falta", mayoria)
# Cambia el segundo voto por "ana" y vuelve a ejecutar.

Un error muy común

Advertencia

Mucha gente cree que la mitad de los nodos basta para decidir. Con 4 nodos, dos y dos podrían decidir cosas opuestas a la vez: es el cerebro dividido. Hace falta más de la mitad. Por eso se suelen usar un número impar de nodos.

Un quórum de lectura y escritura se solapa

Un dato se guarda en W copias y se lee de R copias, entre N copias en total. Si W más R es mayor que N, toda lectura toca al menos una copia con el dato nuevo.

Es el quórum. Con 3 copias, escribir en 2 y leer de 2 vale. Escribir en 1 y leer de 1 puede perder el dato nuevo.

Qué parejas de W y R valen

Código: python
# Un dato se escribe en W copias y se lee de R copias, entre N copias en total.
n = 3
for w in [1, 2, 3]:
    for r in [1, 2, 3]:
        if w + r > n:
            print("W", w, "R", r, ": la lectura siempre toca una copia con el dato nuevo")
        else:
            print("W", w, "R", r, ": la lectura puede perderse el dato nuevo")
# Cambia n a 5 y mira qué parejas siguen valiendo.

Para ir más lejos: el árbitro único

En el laboratorio, un solo almacén decide quién tiene el candado. Es simple y siempre da una respuesta clara, pero si ese almacén cae, nadie puede conseguir el candado.

Escribe qué pasaría con tres almacenes y una mayoría de dos. Anota cuántos pueden caer y qué se gana.

Sobre este laboratorio y su código: Laboratorio de Valkey: aprende un almacén clave-valor compatible con Redis, con expiración y listas

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.