Una tienda en rebajas se cae
Un sistema distribuido es un conjunto de ordenadores que trabajan juntos y se presentan al usuario como uno solo. Lo usan la banca, las tiendas en línea y las redes sociales.
Sirve para atender a más gente, responder más cerca de cada persona y seguir en marcha cuando una máquina falla. A cambio aparecen problemas nuevos, y esta lección los nombra.
Al final de esta lección
Nota
Puedo explicar por qué un sistema se reparte entre varias máquinas y qué problemas trae.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Nodo | una máquina que forma parte de un sistema |
| Sistema distribuido | varios nodos que cooperan por la red |
| Latencia | el tiempo que tarda una respuesta en llegar |
| Fallo parcial | una parte del sistema falla y el resto sigue |
| Disponibilidad | la parte del tiempo en que el servicio responde |
| Escalar | poder atender más trabajo añadiendo recursos |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un solo servidor tiene un límite
Un servidor aguanta un número fijo de pedidos por minuto. Si llegan más, las respuestas se retrasan o se pierden.
Hay dos salidas. Comprar un servidor más grande tiene techo y cuesta mucho. Añadir más servidores iguales reparte el trabajo y permite escalar. La segunda salida es la que usan los sistemas distribuidos.
Ejemplo: cuántos servidores hacen falta
| Momento | Pedidos por minuto | Un servidor aguanta | Servidores necesarios |
|---|---|---|---|
| Un martes cualquiera | 400 | 600 | 1 |
| Víspera de las rebajas | 1.200 | 600 | 2 |
| Primera hora de las rebajas | 3.000 | 600 | 5 |
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.
Preguntar a otro nodo si está vivo
v PINGSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Guardar un dato en ese nodo
v SET stock:lampara 25Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pedir el dato por la red
v GET stock:lamparaSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
La latencia suma las esperas en fila
Cada llamada por la red tarda un poco. Ese tiempo es la latencia, y se mide en milisegundos.
Si una página necesita cuatro servicios y los llama uno detrás de otro, las esperas se suman. Si los llama a la vez, la página espera solo al más lento. Repartir el trabajo ayuda, pero cada salto por la red añade tiempo.
Sumar esperas o esperar al más lento
# Una página llama a cuatro servicios. Tiempos en milisegundos.
llamadas = [["catalogo", 20], ["precios", 35], ["stock", 15], ["opiniones", 50]]
en_fila = 0
mayor = 0
for llamada in llamadas:
en_fila = en_fila + llamada[1]
if llamada[1] > mayor:
mayor = llamada[1]
print("Una detrás de otra:", en_fila, "ms")
print("Todas a la vez:", mayor, "ms")
# Cambia 50 por 200 y vuelve a ejecutar: ¿qué servicio manda ahora?
Un fallo parcial deja el sistema a medias
En un solo ordenador, o todo funciona o todo se apaga. En un sistema distribuido una máquina puede caer mientras las demás siguen. Eso es un fallo parcial.
Con varias copias de un servicio, el sistema aguanta la caída de una. La disponibilidad mide cuánto tiempo responde. Se acerca a 1 cuando hay copias de reserva.
Contar copias que siguen vivas
# Tres copias de un servicio. Cada una funciona (True) o ha caído (False).
copias = {"madrid": True, "valencia": False, "sevilla": True}
activas = 0
for nombre in copias:
if copias[nombre]:
activas = activas + 1
print("Copias activas:", activas, "de", len(copias))
if activas >= 1:
print("El servicio responde, aunque una parte ha caído.")
else:
print("El servicio no responde.")
# Pon False en sevilla y en madrid, y vuelve a ejecutar.
Un error muy común
Advertencia
Mucha gente cree que si un nodo no contesta, ha caído. Puede estar solo lento, o la red entre vosotros puede estar cortada. Desde fuera no se puede distinguir. Por eso se fija un tiempo de espera y se decide qué hacer cuando se agota.
Más lejos: la cadena y la reserva
Una compra pasa por tres piezas seguidas: la web, el pago y el almacén. Si cada una funciona el 90 % del tiempo, la compra funciona solo el 72,9 % (0,9 por 0,9 por 0,9).
Ahora duplica el pago, de modo que basten una de sus dos copias. Calcula la disponibilidad nueva de la cadena y comprueba que sube.