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
| Palabra | Qué significa |
|---|---|
| Consenso | el acuerdo de varios nodos sobre un único valor |
| Mayoría | más de la mitad de los nodos |
| Quórum | el número de nodos que debe responder para decidir |
| Líder | el nodo que dirige mientras dura su mandato |
| Elección | una votación para escoger al líder |
| Cerebro dividido | dos 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
| Nodos | Mayoría | Nodos que pueden caer |
|---|---|---|
| 3 | 2 | 1 |
| 4 | 3 | 1 |
| 5 | 3 | 2 |
| 7 | 4 | 3 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Fabricar un cliente pequeño llamado v
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
v SET lock:informe ana NX EX 120Se 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
v SET lock:informe bea NX EX 120Se 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
v GET lock:informeSe 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
# 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
# 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.