Load balancer

Un componente que distribuye el tráfico entrante entre varios servidores para evitar sobrecarga.

¿Qué es un load balancer?

Pensá en un load balancer como un policía de tránsito en una intersección muy transitada. En vez de que todos los autos vayan por la misma calle y se genere un embotellamiento, el policía los distribuye entre varias calles para que el tráfico fluya. Un load balancer (balanceador de carga) hace exactamente eso con las peticiones que llegan a tu aplicación: las reparte entre varios servidores para que ninguno se sature.

¿Por qué necesitás uno?

Un solo servidor tiene límites: puede manejar cierta cantidad de peticiones por segundo, tiene una cantidad finita de memoria y CPU. Cuando tu aplicación crece y empezás a recibir más tráfico del que un servidor puede manejar, tenés dos opciones:

  • Escalar verticalmente: ponerle más recursos al mismo servidor (más RAM, mejor CPU). Tiene un techo.
  • Escalar horizontalmente: agregar más servidores y repartir la carga entre ellos. Mucho más flexible.

El load balancer es la pieza clave del escalado horizontal. Sin él, no tenés forma de distribuir las peticiones entre múltiples servidores.

Without load balancer:
Users ──────────→ Single server (overloaded)

With load balancer:
                ┌──→ Server 1
Users ───→ LB  ├──→ Server 2
                └──→ Server 3

Algoritmos de distribución

El load balancer usa distintos algoritmos para decidir a qué servidor mandar cada petición:

AlgoritmoCómo funcionaCuándo usarlo
Round RobinReparte en orden: 1, 2, 3, 1, 2, 3...Servidores iguales, peticiones similares
Least ConnectionsManda al servidor con menos conexiones activasPeticiones con tiempos de respuesta variables
IP HashSiempre manda al mismo servidor según la IP del usuarioCuando necesitás que un usuario vaya siempre al mismo servidor
WeightedAsigna más tráfico a servidores más potentesServidores con distintas capacidades

Health checks

Un buen load balancer no solo reparte tráfico, también verifica que los servidores estén vivos. Hace health checks periódicos (por ejemplo, un GET a /health cada 10 segundos) y si un servidor no responde, deja de mandarle tráfico hasta que se recupere:

# Nginx configuration as load balancer upstream my_app { server 10.0.0.1:3000; server 10.0.0.2:3000; server 10.0.0.3:3000; } server { listen 80; location / { proxy_pass http://my_app; proxy_next_upstream error timeout; } }

Herramientas populares

  • Nginx: extremadamente popular, puede funcionar como servidor web y load balancer al mismo tiempo
  • AWS ALB (Application Load Balancer): servicio administrado de Amazon, ideal si estás en AWS
  • HAProxy: open source, muy eficiente y usado en aplicaciones de alto tráfico
  • Cloudflare Load Balancing: integrado con su CDN, distribuye tráfico a nivel global

El load balancer es fundamental para la escalabilidad de cualquier aplicación seria. Mirá cómo los servidores trabajan en conjunto para manejar millones de peticiones, y cómo una CDN complementa al load balancer cacheando contenido estático más cerca de los usuarios.