Las rebajas de enero
Una tienda de ropa de Sevilla abre las rebajas a las nueve en punto. En un minuto entran veinte mil personas. Un solo servidor no puede con todas.
Por eso la tienda tiene cuatro servidores iguales y una pieza delante que reparte. Los clientes no lo saben: ven una sola web con un solo nombre. En esta lección ves qué piezas se ponen en medio y para qué.
Al final de esta lección
Nota
Puedo decir qué hacen un proxy, un proxy inverso y un balanceador de carga.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Intermediario | una máquina que recibe un mensaje y lo pasa a otra |
| Proxy | un intermediario que habla en nombre de los clientes |
| Proxy inverso | un intermediario que habla en nombre de los servidores |
| Balanceador de carga | un proxy inverso que reparte peticiones entre servidores |
| Comprobación de salud | una prueba periódica de que un servidor responde |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un proxy habla por los clientes
Muchas empresas no dejan que los portátiles salgan solos a internet. Todo pasa por un proxy.
El portátil le pide la web al proxy. El proxy la pide en su nombre y le pasa la respuesta. Así la empresa puede bloquear webs peligrosas y guardar un registro.
La web de destino solo ve la IP del proxy, no la del portátil.
Un proxy inverso habla por los servidores
Un proxy inverso está al otro lado, delante de los servidores. El cliente cree que habla con la web, pero habla con el proxy inverso.
Este decide a qué servidor de dentro pasa cada petición. A menudo también lleva el certificado y quita el cifrado TLS, para que los servidores no tengan que hacerlo.
nginx es un proxy inverso muy usado.
Un balanceador reparte el trabajo
Un balanceador de carga es un proxy inverso que reparte las peticiones entre varios servidores iguales.
La forma más sencilla es por turnos: uno, dos, tres, y vuelta a empezar. Otra forma es mandar cada petición al servidor con menos conexiones abiertas.
Si llega más gente, se añade otro servidor detrás. Los clientes no notan nada.
Prueba: reparte por turnos
# Tres servidores detrás de un balanceador que reparte por turnos
servers = ["app-1", "app-2", "app-3"]
for number in range(7):
# El resto de dividir entre 3 da 0, 1, 2, 0, 1, 2...
chosen = servers[number % len(servers)]
print("Petición", number + 1, "->", chosen)
# Añade "app-4" a la lista y pulsa Ejecutar.
Ejemplo: seis peticiones y tres servidores
| Petición | Turno | Servidor |
|---|---|---|
| 1 | primero | app-1 |
| 2 | segundo | app-2 |
| 3 | tercero | app-3 |
| 4 | vuelta a empezar | app-1 |
| 5 | segundo | app-2 |
| 6 | tercero | app-3 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Comprobar la salud de cada servidor
Si un servidor se cae, el balanceador no debe mandarle más clientes. Por eso hace una comprobación de salud cada pocos segundos, por ejemplo pedir /health.
Si no responde bien, lo saca del reparto. Cuando vuelve a responder, lo vuelve a meter.
Un error 502 suele significar que el proxy inverso no pudo hablar con el servidor de detrás.
Prueba: busca los errores en el registro
# Un registro de acceso de un proxy inverso, con el servidor que atendió cada petición
printf "10:01 GET /carrito app-1 200\n10:01 GET /carrito app-2 200\n10:02 GET /pago app-3 502\n10:02 GET /pago app-1 200\n10:03 GET /pago app-3 502\n" > acceso.log
# ¿Qué peticiones dieron error 502?
grep " 502$" acceso.log
# Cambia 502 por 200 y pulsa Ejecutar.
Un error frecuente
Advertencia
Mucha gente cree que un error 502 significa que el proxy inverso está roto. Casi siempre el proxy funciona y es el servidor de detrás el que no responde. Mira primero qué servidor atendió la petición en el registro.