Índice del contenido[Esconder][Espectáculo]
La disponibilidad de las aplicaciones nunca se ha tomado tan en serio como hoy en día, cuando las usamos para algo más que la comunicación, ya sea personal o profesional, y cuando las aplicaciones son el negocio.
Las aplicaciones que no están constantemente en línea, o que son inestables, pierden usuarios y relevancia, y eventualmente se vuelven obsoletas. Sucedió en un instante. Debido a que Internet nunca duerme y funciona las 24 horas del día, los 7 días de la semana, la misma idea debe aplicarse a las aplicaciones.
La escalabilidad es fundamental para hacer esto y garantizar la disponibilidad de la aplicación. El equilibrio de carga es uno de los componentes más importantes para garantizar la disponibilidad. Mucha gente todavía cree que el equilibrio de carga se puede lograr con un script simple.
Sin embargo, éste no es el caso. Solo proporciona acceso a programas en todo el mundo, en cualquier momento y desde cualquier dispositivo.
En esta publicación, analizaremos en profundidad el equilibrio de carga, sus algoritmos y cómo se relaciona con los microservicios, entre otras cosas. ¡Vamos a empezar!
¿Qué es el equilibrio de carga?
A medida que crece la demanda de un sitio web o una aplicación comercial, un solo servidor pronto no podrá manejar toda la carga. Las organizaciones distribuyen la carga de trabajo entre numerosos servidores para satisfacer la demanda. Este método, conocido como "equilibrio de carga", evita que un solo servidor se sobrecargue, lo que puede hacer que se ralentice, deje de solicitar solicitudes o incluso se bloquee.
El equilibrio de carga distribuye el tráfico de red por igual para evitar fallas debido a la sobrecarga de recursos. Las aplicaciones, los sitios web, las bases de datos y otros recursos informáticos funcionan mejor y están más disponibles con este método. También ayuda en el procesamiento adecuado y oportuno de las solicitudes de los usuarios.
Desde la perspectiva del usuario, el equilibrio de carga sirve como un intermediario invisible entre un cliente y una colección de servidores, lo que garantiza que las solicitudes de conexión no se interrumpan. Las aplicaciones, los sitios web, las bases de datos y los servicios en línea probablemente colapsarían si la demanda fuera demasiado alta sin el equilibrio de carga.
Se pueden enviar cientos de miles de solicitudes de usuarios a un solo sitio web de alto tráfico al mismo tiempo. Se requieren varios servidores para llenar correctamente las páginas web con el contenido solicitado, como texto, imágenes, video y transmisión de audio. El equilibrio de carga se emplea comúnmente en granjas de servidores de sitios web de alto tráfico, así como en servidores DNS, bases de datos y sitios de Protocolo de transferencia de archivos (FTP).
Si un solo servidor está sobrecargado, este podría funcionar mal o incluso bloquearse. Los balanceadores de carga reducen la posibilidad de tiempo de inactividad al distribuir las solicitudes de los usuarios de manera uniforme entre una colección de servidores. Si uno de los servidores del grupo falla, el tráfico se redirige a otros servidores del grupo. Un equilibrador de carga agrega automáticamente nuevos servidores en el proceso de distribución del tráfico cuando se agregan al grupo de servidores.
¿Cómo funciona el equilibrio de carga?
Funciona de la siguiente manera:
- Cuando un cliente recibe una solicitud, ya sea a través de un navegador o una aplicación, intenta conectarse con el servidor.
- Cuando un equilibrador de carga recibe una solicitud, la enruta a uno de los servidores de un grupo de servidores según los patrones establecidos por el algoritmo (o granja).
- El servidor recibe la solicitud de conexión y responde al cliente a través del balanceador de carga.
- Cuando el balanceador de carga recibe la respuesta, hace coincidir la dirección IP del cliente con la dirección IP del servidor seleccionado. A continuación, la respuesta se transmite con el paquete.
- La descarga de SSL es el proceso de descifrado de datos mediante el protocolo de cifrado Security Socket Layer para que los servidores no tengan que hacerlo.
- El proceso se repite hasta que finaliza la sesión.
Métodos de equilibrio de carga
Para seleccionar cuál de los servidores de una granja de servidores recibe la siguiente solicitud, cada técnica de equilibrio de carga utiliza un conjunto de criterios. Hay cinco enfoques típicos para el equilibrio de carga:
- Round Robin: Este es el enfoque predeterminado y funciona tal como suena. El equilibrador de carga distribuye las solicitudes en un patrón rotativo, comenzando con el primer servidor del grupo y continuando hasta el final, donde espera que se le llame nuevamente. Este método garantiza que cada servidor maneje aproximadamente la misma cantidad de conexiones.
- Round Robin Ponderado: este enfoque asigna a cada servidor un peso (o preferencia) que generalmente es proporcional a su capacidad. Cuantas más solicitudes recibe un servidor, mayor es el peso. Por ejemplo, un servidor con un valor de ponderación de dos recibe el doble de solicitudes que un servidor con un valor de ponderación de uno.
- Sesión pegajosa: este enfoque, también conocido como persistencia de sesión, conecta ciertos clientes y servidores durante la duración de una sesión. Para establecer el enlace, el balanceador de carga utiliza una cookie o la dirección IP del usuario para identificar un atributo del usuario. Una vez establecida la conexión, las solicitudes del usuario se dirigen al mismo servidor hasta que finaliza la sesión. Esto optimiza los recursos de la red al mismo tiempo que mejora la experiencia del usuario.
- Conexiones mínimas: esta estrategia supone que todas las solicitudes dan como resultado una carga de servidor igual. Como resultado, el servidor con el menor número de solicitudes recibe la siguiente solicitud.
- hash de ip: este algoritmo genera una clave hash única basada en las direcciones IP de origen y destino del cliente y del servidor. La clave se utiliza para enrutar la solicitud y permite reanudar una conexión perdida con el mismo servidor.
hardware contra Equilibradores de carga de software
Equilibrador de carga de hardware
El hardware físico, como un dispositivo, forma balanceadores de carga de hardware. Estos enrutan el tráfico a los servidores según factores como la cantidad de conexiones existentes, el uso del procesador y el rendimiento del servidor. Los balanceadores de carga de hardware tienen firmware patentado que debe mantenerse y actualizarse cuando estén disponibles nuevas versiones y correcciones de seguridad.
Los balanceadores de carga de hardware a menudo brindan un mayor rendimiento y control, así como una gama más amplia de capacidades, como la autenticación Kerberos y la aceleración de hardware SSL, pero requieren cierto nivel de experiencia en administración y mantenimiento. Debido a que los balanceadores de carga de hardware son menos flexibles y escalables que los balanceadores de carga de software, existe una propensión a sobreaprovisionar balanceadores de carga de hardware.
Equilibrador de carga de software
Los balanceadores de carga de software suelen ser más fáciles de configurar que sus contrapartes de hardware. También son más rentables y adaptables, y funcionan bien con entornos de desarrollo de software. El método de software le permite personalizar el equilibrador de carga según los requisitos exactos de su entorno. La mayor flexibilidad puede darse a expensas del tiempo adicional dedicado a configurar el equilibrador de carga.
Los balanceadores de software le brindan una mayor flexibilidad para realizar modificaciones y actualizaciones que los de hardware, que tienen un enfoque más cerrado. Las máquinas virtuales preempaquetadas se pueden utilizar como equilibradores de carga de software (VM). Las máquinas virtuales le ahorrarán algo de tiempo de configuración, pero es posible que no tengan todas las funciones disponibles en sus contrapartes de hardware.
Implementación de equilibrio de carga simple
Usaremos la biblioteca Spring Cloud para crear aplicaciones que se conectan a otras aplicaciones con equilibrio de carga. Mientras procesamos las solicitudes de servicio remoto, podemos construir fácilmente el equilibrio de carga utilizando cualquier técnica que deseemos. Considere el siguiente código como un ejemplo. Comenzaremos con una aplicación de servidor básica.
El servidor solo tendrá un punto final HTTP y se operará en varias instancias. Luego, crearemos una aplicación de cliente que use Load Balancer para distribuir solicitudes entre varias instancias de servidor.
Servidor
Comenzamos con un básico Bota de primavera aplicación para nuestro servidor de ejemplo:
Para comenzar, inyectamos una variable personalizable llamada ID_instancia. Esto nos ayuda a distinguir entre numerosas instancias que están operando. Después de eso, creamos un único punto final HTTP GET que devuelve un mensaje y una ID de instancia.
La instancia predeterminada con ID 1 operará en el puerto 8080. Solo necesitamos agregar algunos parámetros del programa para iniciar una segunda instancia:
Cliente
Ahora echemos un vistazo al código del cliente. Aquí es donde entra Load Balancer, así que comencemos incorporándolo a nuestra aplicación:
A continuación, desarrollamos una implementación de ServiceInstanceListSupplier. Esta es una de las interfaces más importantes en Load Balancer. Especifica cómo ubicamos las instancias de servicio accesibles.
Codificaremos dos instancias separadas de nuestro servidor de ejemplo en nuestra aplicación de ejemplo. Se ejecutan en el mismo sistema pero utilizan puertos separados:
Cree una clase LoadBalancerConfiguration ahora:
Esta clase tiene un solo propósito: crea un constructor WebClient con equilibrio de carga para realizar solicitudes remotas. Nuestra anotación emplea un nombre ficticio para el servicio.
Esto se debe al hecho de que lo más probable es que no conozcamos los nombres de host y los puertos precisos para ejecutar las instancias antes de tiempo. Como resultado, utilizamos un nombre ficticio como marcador de posición y el marco reemplazará la información real cuando seleccione una instancia en ejecución.
A continuación, hagamos una clase de configuración que se usará para instanciar nuestro suministro de instancias de servicio. Tenga en cuenta que usamos el mismo alias que antes:
Ahora podemos construir la aplicación cliente real. Enviemos 10 consultas al servidor de muestra utilizando el bean WebClient anterior:
Podemos ver en el resultado que estamos equilibrando la carga entre dos instancias separadas:
Equilibrio de carga en microservicios
Varias empresas, como Netflix y Amazon, utilizan la arquitectura de microservicios para desarrollar aplicaciones empresariales como un conjunto de servicios poco conectados. La hiperescala y la entrega continua para aplicaciones complicadas son solo dos de las razones para pasar a esta arquitectura distribuida y débilmente conectada.
Los equipos de estas empresas han implementado estrategias Agile y DevOps para producir aplicaciones más rápido y con una tasa de falla más baja que los métodos tradicionales. Sin embargo, debe lograr un equilibrio entre la complejidad de la arquitectura distribuida y las demandas de la aplicación, los requisitos de escala y las limitaciones de tiempo de comercialización.
Durante tantos años, los controladores de entrega de aplicaciones (ADC) han sido fundamentales para cumplir con los requisitos de nivel de servicio para las aplicaciones corporativas alojadas en las instalaciones o en la nube. Un cliente que interactúa con una aplicación basada en microservicios no necesita conocer las instancias que la proporcionan para hacer crecer el cliente y los microservicios de forma independiente.
Este es precisamente el desacoplamiento que proporciona un proxy inverso o un balanceador de carga. Nuevamente, el equilibrio de carga es la solución para garantizar que los microservicios puedan manejar la demanda, la seguridad y la disponibilidad.
Cuando combina el equilibrio de carga tradicional Norte-Sur entre el cliente y las aplicaciones basadas en microservicios con la implementación Este-Oeste para la escalabilidad horizontal, obtiene un impulso sustancial. El objetivo es mantener el entorno seguro y regulado que requiere TI sin sacrificar la agilidad de desarrollo o Automatización de DevOps • Requisitos.
Beneficios
El balanceo de carga brinda varios beneficios al mejorar la utilización de recursos, la entrega de datos y el tiempo de respuesta para sitios web y aplicaciones de alto tráfico, así como bases de datos que reciben una gran cantidad de consultas. El equilibrio de carga garantiza que las solicitudes de los usuarios se cumplan de forma rápida y correcta en escenarios de alto tráfico.
Les ahorran a los usuarios la molestia de tener que lidiar con programas y recursos lentos. El equilibrio de carga también ayuda a evitar el tiempo de inactividad y simplifica la seguridad, lo que reduce el riesgo de pérdida de productividad y ganancias para su empresa.
- El equilibrio de carga brinda la flexibilidad de agregar y eliminar servidores según lo dicte la demanda, además de administrar el tráfico para lograr una eficiencia óptima. Debido a que el tráfico se desvía a otros servidores durante el mantenimiento, también es factible realizar el mantenimiento del servidor sin interrumpir a los usuarios.
- El equilibrio de carga proporciona redundancia integrada al dividir el tráfico entre un conjunto de servidores. Puede desviar inmediatamente la carga a otros servidores si uno falla, minimizando el impacto en los usuarios.
- Si crece el uso de una aplicación o sitio web, el aumento del tráfico podría degradar su rendimiento si no se maneja de manera efectiva. Con el equilibrio de carga, puede agregar un servidor real o virtual para satisfacer la demanda sin interrumpir el servicio. El equilibrador de carga identifica nuevos servidores a medida que se conectan y los incorpora sin esfuerzo a la operación. Este método es preferible a migrar un sitio web de un servidor sobrecargado a uno nuevo, lo que con frecuencia implica algún tiempo de inactividad.
Conclusión
El balanceo de carga es un componente crítico de los sistemas tolerantes a fallas contemporáneos. Simplemente podemos construir aplicaciones que distribuyan solicitudes a múltiples instancias de servicio utilizando varios enfoques de equilibrio de carga. Las empresas deben admitir sistemas de TI complicados para proporcionar aplicaciones de forma segura.
La configuración, la implementación y el mantenimiento de microservicios entre dominios pueden ser propensos a errores, costosos y lentos. TI debe utilizar las mejores prácticas y tecnologías de automatización, visibilidad, análisis y orquestación que sean compatibles con sus procesos ágiles y DevOps para facilitar la configuración y el mantenimiento de estos microservicios.
Deje un comentario