Siempre que queremos conectarnos a Internet, necesitamos que los sitios web sean accesibles lo más rápido posible, para tener la mejor experiencia de usuario. Sin embargo, debemos recordar que estos sitios web están alojados en servidores web y estos, a su vez, cuentan con un límite de capacidad. Una web con alta demanda no podría, realmente, subsistir sin un balanceador de carga. Esta herramienta permite que el sitio web que administremos esté siempre disponible, y sea capaz de servir todas las peticiones a la máxima velocidad posible. Este tutorial te explicará de qué manera puede un balanceador de carga, o también conocido como Load Balancer, mejorar el rendimiento de tu web.
Los sitios web que ofrecen servicios como compras en línea, prensa online, o servicios multimedia, tiene una gran demanda de tráfico de manera casi continua, sobre todo por la tarde-noche que es cuando más tráfico de Internet hay porque todas las personas están en sus casas descansando de un duro día de trabajo. Los servidores web son los principales responsables de que cuando visitamos un determinado sitio web, la carga de la página sea muy rápida para proporcionar la mejor experiencia de usuario posible.
Cada uno de los negocios en línea (e-commerce) debe tener presente que es obligatorio contar con servidores web de alto rendimiento y disponibilidad. Tan sólo unos breves eventos de lentitud o no acceso a los sitios de compras, e incluso problemas a la hora de realizar los pagos, puede influir en la decisión del cliente de volver a realizar sus compras en tales sitios.
¿En qué puede ayudar un balanceador de carga (Load Balancer)?
Si eres el responsable de la infraestructura que da vida a sitios web de alta demanda como los de e-commerce, y quieres garantizar que los servidores web mantengan altos niveles de servicio, debes tener muy en cuenta montar una infraestructura con balanceo de carga, o también conocido como Load Balancing.
¿Para qué sirven? Estos aseguran que el tráfico web no se concentre en un sólo servidor, el cual eventualmente acaba saturándose debido a las miles de peticiones por segundo que recibe de los diferentes clientes. A su vez, esa saturación desemboca en extrema lentitud de los sitios web o simplemente, que el mismo no se encuentre disponible y nos devuelva un error. De hecho, el «rol» de Load Balancer lo puede cumplir un servidor web en sí. En vez de estar invirtiendo constantemente en la adquisición de un sólo servidor de cada vez mayor capacidad, se podría optar por dos o más servidores de prestaciones idénticos con el fin de balancear el tráfico en cada uno de ellos.
Para aplicar ese proceso de balanceo, se acostumbra a optar por la funcionalidad de DNS Round-Robin para distribuir de forma equitativa las peticiones de los clientes a los servidores web. El resultado es una disponibilidad y rendimiento constante de los servidores. La desventaja que tiene este proceso es que no es aplicable en un escenario en donde los servidores tengan prestaciones y capacidades diferentes entre sí. Round-Robin trata a todos los servidores disponibles de manera equitativa y no verifica si se encuentran operando o no disponibles.
A raíz de esto, los distintos proveedores aplicaron mejorías. Lo hicieron mediante la creación de herramientas que aseguran que los servidores sean tolerantes a fallos: los balanceadores de carga. Esto, mediante el redireccionamiento de tráfico y clientes de parte de un servidor fallido a otro disponible. Así, los usuarios percibirán muy pocos inconvenientes y cero fallos. Estas herramientas pueden ser utilizadas tanto en entornos de sitios web múltiples, como los que cuentan con uno sólo.
Esquema de funcionamiento
Como hemos mencionado, un balanceador de carga es una herramienta, la cual direcciona a un cliente al servidor web que se encuentre con mayor disponibilidad entre los que cuentan con el mismo contenido. Este proceso es completamente transparente para quien accede a determinado sitio, por lo que a simple vista no podemos detectar esto. Podemos valernos de este esquema para entender mejor cómo funciona:
- Se cuenta con dos servidores web que se encargan de alimentar a un sólo sitio web. Las direcciones de IP son:
- 192.168.0.4 para el servidor web1.ejemplo.com
- 192.168.0.5 para el servidor web2.ejemplo.com
- Se encuentra implementado un balanceador de carga que tiene como nombre de host virtual www.ejemplo.com y su IP virtual 192.168.0.10. Ese host virtual, con nombre e IPs virtuales, es lo que servirá al servidor DNS para resolver el acceso al sitio web «ejemplo»
- Una persona quiere acceder a www.ejemplo.com, entonces lo que sucede es que la misma realmente está realizando una solicitud para acceder al balanceador de carga de los servidores que alojan originalmente al sitio web.
- Ese balanceador de carga ahora verifica cuál es el servidor web que se encuentra disponible para la solicitud del usuario. Una vez hecho eso, el servidor elegido recibe la solicitud.
- Una vez que haya logrado procesarlo, el propio servidor responde la solicitud proporcionando el acceso al sitio web www.ejemplo.com. Esto podría cambiar de acuerdo a cómo se ha implementado.
Tipos de balanceadores de carga
Fundamentalmente se clasifican en tres tipos:
- De tipo hardware: Consiste en un servidor dedicado con un sistema operativo en concreto, y un software para hacer el proceso de balanceador de carga. Este servidor integra los servidores web mediante las soluciones Plug and Play, lo que significa que tan pronto se conectan, funcionan con poco o nada de ajustes previos.
- De tipo switch: Un balanceador de carga de este tipo necesita de un switch Layer 2 o Layer 3 para la integración del proceso de balanceo. No se necesita de ningún dispositivo intermediario entre el switch y el servidor web.
- Basado en software: para este caso no es necesario modificar ninguna característica de conectividad de red. Puedes instalar el software para el propósito en los propios servidores web. Sin embargo, puedes optar por un servidor dedicado para cumplir el rol de balanceador de carga.
En cualquiera de los casos, se cumplen con la finalidad fundamental: el monitoreo de la capacidad de los servidores web, la selección del servidor adecuado para las solicitudes de cada cliente y la redirección de tráfico entre el cliente y el servidor.
Si entramos más al detalle con los tipos de balanceadores, incluso podemos hacer algunas diferencias en cuestión del tipo de balanceo que realizan, y que los podemos englobar en los que comentamos anteriormente. Estos son:
Application Load Balancer
Este tipo toma las decisiones de enrutamiento en la capa de aplicación. También admite que esté basado en rutas, pudiendo redirigir todas las solicitudes a uno o más puertos de cada instancia de contenedores. Nos podemos encontrar que admite que mapeamos los puertos de host dinámico. Por ejemplo, si tenemos una definición de contenedor, con una tarea específica en el puerto 80, para un puerto NGINX y el puerto para el puerto de host, el que corresponde al host será elegido de forma dinámica y siempre dentro del rango de puertos efímeros del contenedor.
Cuando se procede a enviar la tareas, NGINX se registrará en el Application Load Balancer, siendo una combinación de ID de la instancia y el puerto. Este tráfico será distribuido con el ID de la instancia y al puerto que le corresponda del contenedor. Esto nos permite tener diferentes tareas en un único servicio, para una misma instancia de contenedor.
Network Load Balancer
Este tipo se encarga de tomar las decisiones del enrutamiento en la capa de transporte, pudiendo atender a una gran cantidad de solicitudes por segundo. Cuando el balanceador recibe una conexión, este selecciona el destino dentro de un grupo de estos, y lo hace por medio de un algoritmo hash de flujo de redireccionamiento. Luego tratará de abrir una conexión TCP con un destino seleccionado en el puerto indicado. Acto seguido, reenviará la solicitud sin modificar sus encabezados.
Este tipo de balanceadores admite el mapeo de puertos con host dinámico.
Classic Load Balancer
Este lo podemos tomar casi como una combinación de los anteriores. Pues toma sus decisiones de enrutamiento en la capa de transporte o aplicación, sin limitarse a solo una de ellas. Estos requieren una relación fija entre el puerto encargado de balancear la carga y el puerto del contenedor.
Este tipo de mapeo estático, requiere la utilización de un cluster, que tenga al menos tantas instancias como tendrá el contenedor.
Cómo se logra redireccionar el tráfico
Como ya sabemos uno de los fines principales de un balanceador de carga es la redirección del tráfico del cliente hacia el servidor adecuado. A continuación, compartiremos de qué manera lo hacen:
MAT
Estas siglas corresponden Media Access Control Address Translation. Este método requiere que cada servidor web utilice la dirección IP del balanceador de carga como una dirección de interfaz de tipo loopback, además de su propia IP. Cuando el balanceador de carga recibe la solicitud del cliente, comienza a seleccionar al servidor web apropiado. Después, cambia la dirección MAC de destino en el paquete de datos que compone la solicitud del cliente por la del servidor web elegido. Después, esa solicitud viaja al servidor, el cual contiene como dato la dirección de IP del cliente. De esta manera, garantiza una respuesta directa al mismo.
Un punto a considerar es que siempre que el servidor web «elegido» responde a la solicitud del cliente, enmascara su IP original con la que corresponde a su balanceador de carga. Como si fuera que el cliente realiza una solicitud a éste originalmente.
NAT
El método consiste en el cambio de la dirección IP de destino de la solicitud del cliente. Originalmente, este último se dirige a la IP del balanceador de carga. Sin embargo, el popular proceso de «nateo» cambia dicha IP y asigna la que corresponde al servidor «elegido». Este proceso lo realiza el propio balanceador de carga mediante su dirección de IP asignada. Además, en medio de este proceso, la dirección de IP de origen es la del balanceador de carga en vez de la dirección IP del cliente. Una vez que el balanceador de carga redirecciona la respuesta al cliente, el mismo cambia la dirección IP de destino por la que corresponde al cliente. En consecuencia, la dirección IP que figura como fuente es la del balanceador de carga.
Lo que se logra es esconder la IP original del servidor web, que la misma no sea visible para los clientes. Por lo que los servidores web se pueden valer de cualquier IP, incluso si esta es privada. Estos servidores no necesitan conectarse directamente al balanceador de carga en el sentido de pertenecer al mismo segmento de red local. Siempre que los servidores web y los balanceador de carga puedan comunicarse mediante rutas estáticas o protocolos de ruteo de red, no será necesario.
Puerta de enlace TCP
En este método, los balanceador de carga tienen que redireccionar el tráfico en la capa TCP y más arriba. Tanto este como el cliente que realiza la solicitud de conexión, establecen una conexión TCP. Por lo que el balanceador de carga recibe los datos de la solicitud ya antes de realizar la búsqueda del servidor más apropiado. Después, el balanceador de carga establece una conexión TCP con el servidor ya designado para transmitir la solicitud del cliente. Dicho balanceador de carga también pasa la respuesta del servidor al cliente mediante la conexión TCP. Así, vemos que el protocolo TCP actúa como un intermedio entre los potenciales servidores de destino, el balanceador de carga y el cliente.
Monitorizar balanceador de carga
Como en prácticamente todo lo que está destinado al sector empresarial, es bueno tener cierto control sobre los sistemas que están en funcionamiento. Y los balanceadores de carga no son una excepción. Estos se pueden monitorizar, analizando los patrones de tráfico y aplicar las soluciones correspondientes a los posibles problemas. Esto no solo nos ayudará a mantenerlos con el funcionamiento adecuado, si no que puede hacer que mejore el rendimiento si vemos que algo se puede optimizar.
Una de las prácticas más recomendables, es el disponer de las estadísticas del balanceador. Las cuales se utilizan para ver que todo está funcionando según lo esperado, pero que nos dan información valiosa sobre el cuando entran en funcionamiento. La aplicación que tiene esto, es con la mejora de los flujos de trabajo. Al capturar todo el tráfico entrante y saliente y analizarlo, podremos establecer un punto claro donde trabajar sobre algún tipo de mejora.
La seguridad también juega un papel importante. Y es que el guardar registros de acceso es otra buena práctica. En este caso no estamos ante inicios de sesión, si no que hablamos de solicitudes TLS por ejemplo. Estas de nuevo nos permiten analizar patrones de tráfico, para que se pueden aplicar las mejoras oportunas en caso de ser necesarias. Estos registros también se pueden realizar sobre las llamadas a las API del balanceador. Esto nos da un registro sobre las llamadas que se efectúan, las direcciones IP de origen, quién ha realizado, o cuando. Entre otros muchos datos, los cuales podemos elegir.
Mejorar los flujos de trabajo del balanceador, nos permite obtener un rendimiento de todos los sistemas más óptimo. Y no solo para ver si todo funciona correctamente. Luego también nos encontramos el aspecto económico. Donde el aplicar soluciones o mejoras, puede suponer un gran esfuerzo. En todo caso, es algo que ya recae en la administración de los sistemas para ser aplicadas.
Como vemos, la función que cumple un balanceador de carga se ha vuelto cada vez más esencial. Principalmente, porque los sitios web están contando con cada vez más solicitudes de clientes, es decir, más usuarios que quieren acceder a las distintas páginas. No sólo el e-commerce es uno de los sectores que debe adoptar este tipo de herramientas sino también, cualquier otro que cuente con un alto tráfico de usuarios día a día.