¿Qué es el balanceo de carga?
El balanceo de carga (distribución de carga) es una tecnología que distribuye el tráfico entre múltiples servidores para mejorar la disponibilidad y el rendimiento general del sistema.
¿Por qué es necesario?: Es esencial para manejar grandes cantidades de solicitudes que un solo servidor no puede procesar, y para continuar el servicio en caso de fallo del servidor.
Configuración básica del balanceador de carga
flowchart TB
LB["Balanceador de carga"]
LB --> S1["Server 1"]
LB --> S2["Server 2"]
LB --> S3["Server 3"]
Los clientes acceden a la dirección IP del balanceador de carga, y el balanceador distribuye las solicitudes al servidor apropiado.
Balanceo de carga L4 y L7
Balanceo de carga L4 (capa de transporte)
Realiza la distribución de carga a nivel TCP/UDP.
- Funcionamiento: Distribuye por dirección IP y número de puerto
- Ventajas: Rápido, bajo overhead
- Desventajas: No puede ver el contenido HTTP
Balanceo de carga L7 (capa de aplicación)
Realiza la distribución de carga a nivel HTTP.
- Funcionamiento: Distribuye por URL, cabeceras, cookies, etc.
- Ventajas: Enrutamiento flexible
- Desventajas: Mayor carga de procesamiento
Ejemplo de balanceo de carga L7:
/api/* → Grupo de servidores API
/static/* → Servidores de archivos estáticos
/admin/* → Servidores del panel de administración
Principales algoritmos de distribución de carga
Round Robin
Distribuye las solicitudes a cada servidor en orden secuencial.
Solicitud 1 → Server A
Solicitud 2 → Server B
Solicitud 3 → Server C
Solicitud 4 → Server A (se repite)
Adecuado cuando: El rendimiento de los servidores es uniforme
Round Robin ponderado (Weighted Round Robin)
Ajusta la proporción de distribución según el rendimiento del servidor.
Server A (weight: 3) → 3 solicitudes
Server B (weight: 2) → 2 solicitudes
Server C (weight: 1) → 1 solicitud
Menor número de conexiones (Least Connections)
Distribuye al servidor con el menor número de conexiones actuales.
Server A: 10 conexiones activas
Server B: 5 conexiones activas ← La siguiente solicitud va aquí
Server C: 8 conexiones activas
Adecuado cuando: Hay variación en los tiempos de procesamiento
Hash de IP (IP Hash)
Determina el servidor basándose en el valor hash de la dirección IP del cliente.
hash(192.168.1.100) % 3 = 1 → Server B
hash(192.168.1.101) % 3 = 0 → Server A
Adecuado cuando: Se necesita mantener la sesión
Health Check
El balanceador de carga verifica periódicamente el estado de los servidores y excluye automáticamente los servidores con fallos.
Health Check activo
Balanceador de carga → GET /health → Cada servidor
↓
200 OK → Normal (incluido en la distribución)
5xx/Timeout → Anormal (excluido)
Health Check pasivo
Monitorea el éxito/fallo de las solicitudes reales.
5 fallos consecutivos → Servidor excluido
Después de 30 segundos → Se intenta distribuir nuevamente
Persistencia de sesión (Sticky Session)
Mecanismo para enviar continuamente las solicitudes del mismo usuario al mismo servidor.
Métodos de implementación
| Método | Descripción |
|---|---|
| Cookie | Almacena el ID del servidor en una cookie |
| Dirección IP | Fija por IP del cliente |
| Parámetro URL | Incluye el ID de sesión en la URL |
Consideraciones
Las sticky sessions pueden causar desequilibrio en la carga. Cuando sea posible, gestiona la información de sesión en un almacén externo (como Redis) y apunta a un diseño stateless.
Balanceadores de carga representativos
Software
| Nombre | Características |
|---|---|
| Nginx | Alto rendimiento, función de proxy inverso |
| HAProxy | Alta disponibilidad, funciones abundantes |
| Envoy | Cloud native, compatible con service mesh |
Servicios en la nube
| Servicio | Proveedor |
|---|---|
| ALB/NLB | AWS |
| Cloud Load Balancing | Google Cloud |
| Azure Load Balancer | Microsoft Azure |
Configuración de alta disponibilidad
La redundancia del propio balanceador de carga también es importante.
flowchart TB
VIP["IP Virtual<br/>(VIP/Floating IP)"]
VIP --> Active["LB (Activo)"]
Standby["LB (Standby)"] -->|Monitoreo| Active
Active --> Servers["Grupo de servidores"]
En una configuración Active-Standby, cuando el balanceador de carga activo falla, el standby toma el control automáticamente.
Resumen
El balanceo de carga es una tecnología esencial en los servicios web modernos. Mediante la selección apropiada de algoritmos, la configuración de health checks y una configuración de alta disponibilidad, se puede lograr una operación de servicio estable.
← Volver a la lista