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.
¿Cómo funciona el balanceador de carga?
Cuando un usuario accede a un sitio web, el balanceador de carga recibe la solicitud y decide a qué servidor enviarla. Utiliza diferentes algoritmos para determinar la distribución más eficiente de las solicitudes, teniendo en cuenta factores como la capacidad de procesamiento de cada servidor, la carga actual y la disponibilidad.
Existen varios tipos de balanceadores de carga, como los balanceadores de carga basados en hardware, que son dispositivos físicos dedicados, y los balanceadores de carga basados en software, que se ejecutan en servidores virtuales. Independientemente del tipo, el balanceador de carga realiza las siguientes funciones:
- Recepción de solicitudes: El balanceador de carga actúa como punto de entrada para las solicitudes de los usuarios. Recibe las peticiones y las redirige a los servidores disponibles.
- Distribución de carga: Utilizando algoritmos de balanceo, el balanceador de carga decide a qué servidor enviar cada solicitud. Los algoritmos más comunes son el Round Robin, donde se asigna secuencialmente cada solicitud a un servidor, y el Least Connections, que envía las solicitudes al servidor con la menor carga actual.
- Monitorización de servidores: El balanceador de carga supervisa constantemente el estado de los servidores. Si detecta que un servidor no responde o está sobrecargado, lo excluye temporalmente de la distribución de carga para evitar interrupciones en el servicio.
- Tolerancia a fallos: En caso de que un servidor falle, el balanceador de carga redirige automáticamente las solicitudes a los servidores restantes. Esto asegura que el sitio web siga funcionando sin interrupciones, minimizando el impacto de cualquier problema en un servidor individual.
- Escalabilidad: A medida que la carga de trabajo aumenta, es posible agregar nuevos servidores al grupo y configurar el balanceador de carga para que distribuya la carga de manera equitativa entre ellos. Esto permite escalar horizontalmente el sistema, aumentando la capacidad de procesamiento según sea necesario.
- Sesiones persistentes: En algunos casos, es necesario mantener la conexión del usuario con el mismo servidor durante toda su sesión. El balanceador de carga puede configurarse para asignar una sesión persistente a un servidor específico, asegurando la continuidad de la experiencia del usuario.
Qué ventajas hay de equilibrar la carga
El hecho en sí de equilibrar la carga de un servidor con un load balancer o también conocido como balanceo de carga nos ofrece una serie de beneficios. Y todo porque a raíz de las diferentes funcionalidades que ofrece se consiguen cumplir diferentes aspectos. Por ejemplo, con la distribución del tráfico en diferentes servidores se hace que los tiempos de respuesta se puedan reducir de manera notable. De esta manera, si el tráfico de un servidor era lento, se consigue que se transfiera a uno más rápido e incluso con un mayor número de peticiones al mismo tiempo.
Sin embargo, la distribución como tal del tráfico no es el único aspecto positivo que tiene, también hay que hablar en términos de seguridad. Y todo porque se lleva la seguridad a otro nivel en cuanto a posibles fallos o caídas de las webs y servicios. Por lo que se garantiza que una página pueda seguir funcionando incluso cuando el servidor deje de estar disponible por cualquier problema en concreto. Otra de las grandes ventajas de equilibrar la carga en un server.
Por otro lado, lo cierto es que también llega a ser un beneficio en el momento de realizar el mantenimiento del sistema de los servidores. A la hora de las actualizaciones y las correspondientes configuraciones del servidor en cuestión, si se equilibra la carga se consigue que no pierda rendimiento cuando haya que llevar a cabo estas labores de mantenimiento. Y todo porque el balanceador reconoce el estado como tal del mantenimiento y hace que las peticiones se desvíen de manera correcta.
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
Una vez que se tiene en cuenta que dentro del sector de las redes y servidores, los balanceadores de carga tienen un papel importante en el caso de conseguir una distribución eficiente de las aplicaciones de los usuarios entre los diferentes servidores que están disponibles, toca conocer cuáles son los tipos. 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. Además están pensando para dar un rendimiento alto, al igual que son realmente confiables. A esto hay que sumar que cuentan con recursos de procesamiento dedicados y, por lo general, ofrecen diferentes características más avanzadas de tolerancia a fallos.
- 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. Por otro lado, hay que señalar estos son más flexibles y admiten una configuración y personalización de enrutamientos. Al igual que hay que señalar que son escalables y suelen ser más económicos que otros tipos.
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. Y en cada uno de estos casos se dan una serie de características en particular por lo que es importante elegir en función de las necesidades.
Por otro lado, 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. Y es que los servicios pueden usar diferentes tipos de balanceo en función de las necesidades para dirigir el tráfico: 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. En este caso, en el momento de enviar tareas, NGINX se llega a registrar en el Network Load Balancer como una combinación de ID de instancia y puerto, además de que se consigue que el tráfico se distribuya al ID tanto de la instancia como al puerto que corresponda a ese contenedor. Por lo tanto, este mapeo en concreto permite tener diferentes tareas también en un solo servicio y dentro de la misma instancia de contenedor.
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.
Esta acción en particular 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. Por lo que es una de las prácticas que no hay que dejar de hacer con el fin de que también lleguen a funcionar de manera correcta en todo momento.
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.