Que es el Balanceo de Carga y para que lo quiero
Dice la wikipedia:
El balance o balanceo de carga es un concepto usado en informática que se refiere a la técnica usada para compartir el trabajo a realizar entre varios procesos, ordenadores, discos u otros recursos.
En nuestro caso vamos a hablar del balanceo de carga entre servidores web. En este caso un balanceador lo que hará es repartir las peticiones HTTP entre N servidores web según algún tipo de algoritmo. La primera pregunta es ¿Para que podemos querer un balanceador de carga? La cual tiene 2 respuestas:
- Para mejorar el rendimiento de nuestra plataforma web
- Para mejorar la disponibilidad de nuestra plataforma web
En el primer caso nuestro objetivo será superar la limitación de servir peticiones/segundo que nos da una sola instancia de un servidor web (digamos que es un LAMP). Cuando las visitas a nuestro sitio web aumentan podemos intentar añadir más capacidad de procesado (añadirle mas recursos ram, cpu, etc o cambiar a un servidor más potente). Pero esto no siempre es posible y solo nos queda la solución de recurrir al balanceado de carga.
En el segundo caso nuestro interés es evitar las paradas de servicio debido a….
- Tareas de mantenimiento en el servidor (actualizaciones de software del servidor, ajustes en la configuración,….) que provocan paradas de servicios que no siempre son deseadas/posibles
- Caídas del servidor. Sabemos que no debería pasar pero a veces algo se rompe 🙂
Como funciona y algunas soluciones posibles (OVH/Amazon/haproxy/…)
Sea cual sea nuestro objetivo lo que vamos a hacer es añadir más servidores que procesen las peticiones web y delante de ellos un sistema que haga 2 cosas:
- Reparta el trabajo (equitativamente, con pesos, en modo activo/pasivo,…)
- Si uno de los nodos deja de funcionar
Vamos a ver el diagrama más sencillo posible 2 servidores web y un balanceador delante:
A la hora de crear ese balanceador podemos usar distintas soluciones en función de nuestro escenario, agrupadas en 2 grandes grupos:
- Soluciones que implementamos nosotros:
- NGINX. El veloz servidor web también ofrece capacidad de balanceo de carga
- HaPROXY, posiblemente la solución más completa.
- Apache y su mod_proxy_balancer
- Soluciones ya implementadas
- Soluciones «hardware» como Cisco ACE o F5 que pueden dar muy buen rendimiento pero con un coste mayor.
- Soluciones de proveedor:
- Si usamos la nube de Amazon podemos usar su Elastic Load Balancing
- Si trabajamos con servidores dedicados de de OVH podemos usar su IP Load Balancing
Queremos tu opinión :)