En la terminología de las redes informáticas , el balanceo de carga o balanceo de carga ( eng. balanceo de carga ) es un método de distribución de tareas entre varios dispositivos de red (por ejemplo, servidores ) con el fin de optimizar el uso de recursos, reducir el tiempo de servicio de consulta, escalamiento de clúster horizontal ( adición/eliminación dinámica de dispositivos), además de garantizar la tolerancia a fallos ( redundancia ).
En las computadoras, el equilibrio de carga distribuye la carga entre varios recursos informáticos, como computadoras, clústeres de computadoras , redes, CPU o discos. El propósito del balanceo de carga es optimizar el uso de recursos, maximizar el rendimiento, mejorar el tiempo de respuesta y evitar que se sobrecargue un solo recurso. El uso de múltiples componentes de equilibrio de carga en lugar de un solo componente puede mejorar la confiabilidad y la disponibilidad a través de la redundancia . El equilibrio de carga suele implicar la presencia de software o hardware especial, como un conmutador multicapa o un sistema de nombres de dominio, como un proceso de servidor.
El equilibrio de carga se diferencia de una conexión física en que el equilibrio de carga divide el tráfico entre las interfaces de red en un socket de red (modelo OSI de capa 4), mientras que la conexión de enlace implica la división del tráfico entre las interfaces físicas en un nivel inferior o en un paquete (modelo OSI de capa 4). capa 3 del modelo) o a través de un canal de comunicación (capa 2 del modelo OSI).
Ejemplos de dispositivos a los que se aplica el equilibrado:
El equilibrio de carga se puede utilizar para potenciar una granja de servidores con más de un servidor. También puede permitirle continuar trabajando incluso en condiciones donde varios dispositivos ejecutivos (servidores) han fallado. Debido a esto, aumenta la tolerancia a fallas y es posible ajustar dinámicamente los recursos informáticos utilizados agregando o eliminando dispositivos ejecutivos en el clúster .
Una de las aplicaciones de equilibrio de carga más utilizadas es la creación de un único servicio de Internet con varios servidores , a veces conocidos como granjas de servidores . Por lo general, los sistemas de equilibrio de carga incluyen sitios web populares , grandes tiendas en línea , sitios de Protocolo de transferencia de archivos (FTP), Sistema de nombres de dominio (DNS) y bases de datos.
Para Internet, un equilibrador de carga suele ser un programa que escucha en el puerto donde los clientes externos se conectan a los servicios. El equilibrador de carga reenvía las solicitudes a uno de los "servidores" del servidor, que normalmente responde al equilibrador de carga. Esto permite que el balanceador de carga responda al cliente sin conocer la separación interna de preocupaciones. También permite que los clientes se comuniquen directamente con los servidores back-end, lo que puede tener beneficios de seguridad y ocultar la estructura de la red interna y evitar ataques al núcleo, la pila de la red o servicios no relacionados que se ejecutan en otros puertos.
Algunos balanceadores de carga proporcionan un mecanismo para hacer algo especial en caso de que todo el backend del servidor no esté disponible. Esto puede incluir el redireccionamiento a un sistema de equilibrio de respaldo o la visualización de un mensaje de falla.
También es importante que el balanceador de carga no se convierta en un único punto de falla. Por lo general, los balanceadores de carga se implementan en alta disponibilidad , que también pueden replicar sesiones de persistencia si es necesario para una aplicación en particular. [una]
Un método alternativo de balanceo de carga que no requiere necesariamente un software o hardware de host especial se llama DNS robin round . En esta técnica, múltiples direcciones IP asociadas con el mismo nombre de dominio ; los clientes deben seleccionar un servidor para conectarse. A diferencia del uso de un equilibrador de carga dedicado, esta técnica permite que los clientes tengan varios servidores. La técnica tiene sus ventajas y desventajas, según el grado de control sobre los servidores DNS y la granularidad de la carga requerida.
Otro método más eficiente para equilibrar la carga usando DNS es delegar www.example.org como un subdominio para el cual la zona es mantenida por cada uno de los mismos servidores que sirven al sitio web. Esta técnica funciona especialmente bien cuando los servidores individuales están dispersos geográficamente en Internet. Por ejemplo:
uno.ejemplo.org A 192.0.2.1 dos.ejemplo.org A 203.0.113.2 www.ejemplo.org NS uno.ejemplo.org www.ejemplo.org NS dos.ejemplo.orgSin embargo, el archivo de zona para www.example.org en cada servidor es diferente de tal manera que cada servidor decide cómo usar la dirección IP como registro A. En el servidor de archivos de zona única para informes www.example.org:
@ en un 192.0.2.1En el servidor dos, el mismo archivo de zona contiene:
@en un 203.0.113.2Por lo tanto, cuando el primer servidor está caído, su DNS no responde y el servicio web no recibe ningún tráfico. Si la línea en un servidor está congestionada, el servicio DNS no confiable proporciona menos tráfico http para llegar a ese servidor. Además, la respuesta DNS más rápida casi siempre se resuelve desde la red del servidor más cercano, debido al equilibrio de carga geosensible. Un TTL corto a un registro A le permite redirigir rápidamente el tráfico si el servidor falla. Se debe considerar la posibilidad de que esta técnica pueda dar como resultado que los clientes individuales puedan cambiar entre servidores separados en medio de una sesión.
Los balanceadores de carga utilizan muchos algoritmos de programación para determinar a qué servidor enviar una solicitud. Los algoritmos simples incluyen la selección aleatoria o el round robin . Los balanceadores de carga más sofisticados pueden tener en cuenta factores adicionales como qué servidores reportaron carga, tiempos de respuesta más lentos, estado arriba/abajo (determinado por monitoreo de sondeo de algún tipo), cantidad de conexiones activas, ubicación geográfica, capacidades o cuánto tráfico necesita. fue nombrado recientemente.
Un tema importante cuando se ejecuta un servicio de equilibrio de carga es cómo manejar la información que debe almacenarse en varias solicitudes en una sesión de usuario. Si esta información se almacena localmente en un solo servidor backend, las solicitudes posteriores que provengan de diferentes servidores backend no podrán encontrarla. Esta puede ser información almacenada en caché que se puede volver a calcular, en cuyo caso una solicitud de equilibrio de carga a un servidor back-end diferente resuelve el problema de rendimiento.
Idealmente , el grupo de servidores detrás del equilibrador de carga debe tener en cuenta la sesión, de modo que si un cliente se conecta a cualquier servidor en cualquier momento, el historial de comunicación del usuario con un servidor en particular es irrelevante. Esto generalmente se logra mediante una base de datos compartida o una sesión de base de datos en memoria, como Memcached .
Una solución básica al problema de los datos de la sesión es enviar todas las solicitudes en la sesión de un usuario de forma secuencial al mismo servidor. Esto se llama persistencia o pegajosidad . Una desventaja significativa de esta tecnología es la falta de conmutación por error automática : si el servidor se cae, la información de su sesión deja de estar disponible y todas las sesiones se pierden. El mismo problema suele aplicarse a la base de datos central del servidor; incluso si los servidores web son "sin estado" (stateless) y no "sticky" (pegajoso), la base de datos central (ver más abajo).
La asignación a un servidor en particular puede basarse en el nombre de usuario, la dirección IP del cliente o puede ser aleatoria. Debido a los cambios en la dirección percibida del cliente como resultado de DHCP , la traducción de direcciones de red y el proxy web, este método puede no ser confiable. El equilibrador de carga debe recordar los trabajos aleatorios, lo que supone una carga para el almacenamiento. Si el equilibrador de carga se reemplaza o deja de funcionar, esta información puede perderse y es posible que sea necesario eliminar los trabajos después de un período de tiempo específico o durante períodos de alta carga para evitar exceder el espacio disponible para la tabla de asignación. El método de asignación aleatoria también requiere que los clientes admitan algunas configuraciones, lo que puede ser un problema, por ejemplo, cuando el navegador web ha desactivado el almacenamiento de cookies. Los balanceadores de carga complejos usan varios métodos de persistencia para evitar algunas de las desventajas de cualquier método.
Otra solución es almacenar los datos de la sesión en una base de datos . En general, esto es malo para el rendimiento, ya que aumenta la carga en la base de datos: la base de datos se usa mejor para almacenar información que es menos volátil que los datos de sesión. Para evitar que la base de datos se convierta en un punto único de falla y para mejorar la escalabilidad , las bases de datos a menudo se replican en varias máquinas y se utiliza el equilibrio de carga para distribuir el índice de carga entre estas réplicas. La tecnología Microsoft ASP.net State Server es un ejemplo de una sesión de base de datos. Todos los servidores de la granja web almacenan datos de sesión en el servidor del servidor de estado maestro y cualquier servidor de la granja puede recuperar los datos.
En casos muy comunes en los que el cliente es un navegador web, un enfoque simple pero efectivo es almacenar los datos de la sesión en el propio navegador. Una forma de lograr esto es utilizar cookies de navegador , marcas de tiempo encriptadas. Otra forma es la reescritura de URL. El almacenamiento de datos de sesión en el cliente suele ser la solución preferida: el balanceador de carga es entonces libre de elegir cualquier servidor para procesar la solicitud. Sin embargo, este método de procesamiento de datos de estado no es adecuado para algunos escenarios de lógica de negocios complejos donde el estado de la sesión es una carga útil grande y no es posible volver a leerlo con cada solicitud al servidor. La reescritura de URL tiene serios problemas de seguridad porque el usuario final puede cambiar fácilmente las URL enviadas y, por lo tanto, cambiar los flujos de sesión.
Otra solución para almacenar datos persistentes es asociar un nombre con cada bloque de datos, usar una tabla hash distribuida para asignar un nombre de forma pseudoaleatoria a uno de los servidores disponibles y luego almacenar ese bloque de datos en el servidor designado.
Los balanceadores de carga de hardware y software pueden tener diferentes características especiales. La característica principal de un equilibrador de carga es poder distribuir las solicitudes entrantes entre varios servidores en un clúster de acuerdo con un algoritmo de programación. La mayoría de las propiedades específicas del proveedor se enumeran a continuación:
El balanceo de carga puede ser útil en aplicaciones de enlaces redundantes. Por ejemplo, una empresa puede tener varias conexiones a Internet, proporcionando acceso a la red si una de las conexiones no funciona. En los sistemas a prueba de fallas , esto significaría que un enlace es para uso normal y el otro solo se usa si falla el enlace principal.
Con el equilibrio de carga, ambos enlaces pueden estar ocupados todo el tiempo. El dispositivo o programa controla la presencia de todos los enlaces y elige la ruta para enviar paquetes. El uso de varios enlaces al mismo tiempo aumenta el ancho de banda disponible.
El estándar IEEE aprobó el estándar IEEE 802.1 rr en mayo de 2012 [2] , también conocido y documentado en la mayoría de los libros como Shortest Path (SCP). KPC permite que todos los enlaces estén activos en múltiples rutas de igual importancia, proporciona una convergencia más rápida que reduce el tiempo de inactividad y facilita el uso del equilibrio de carga en una red de malla (parcial o totalmente conectada), lo que permite equilibrar la carga del tráfico en todas las rutas de la red . [3] [4] El PPC está diseñado para eliminar virtualmente el error humano durante el proceso de configuración y conserva la naturaleza plug-and-play de plug-and-play, lo que crea Ethernet como el protocolo de facto en la segunda capa. [5]
Muchas empresas de telecomunicaciones tienen múltiples rutas a través de sus redes o hacia redes externas. Utilizan cargas complejas para cambiar el tráfico de una ruta a otra a fin de evitar la congestión de la red en cualquier enlace en particular y, a veces, para minimizar el costo del tránsito a través de redes externas o mejorar la confiabilidad de la red.
Otra forma de usar el balanceo de carga de red es con el monitoreo de actividad. Los balanceadores de carga se pueden usar para dividir grandes flujos de datos en múltiples subflujos y usar múltiples analizadores de red donde cada uno lee parte de los datos originales. Esto es muy útil para monitorear redes rápidas como puertos 10gbe o STM64, donde el procesamiento de datos complejos puede no ser posible a la velocidad del cable.
El equilibrio de carga se usa a menudo para implementar la tolerancia a fallas : la continuación de un servicio después de la falla de uno o más de sus componentes. Los componentes se monitorean constantemente (por ejemplo, los servidores web pueden controlarse mediante una muestra de páginas conocidas), y cuando uno deja de responder, se informa al balanceador de carga y ya no envía tráfico a ese servidor. Cuando el componente vuelve a estar en línea, el balanceador de carga comienza a enrutar el tráfico hacia él nuevamente. Para que esto funcione, debe haber al menos un componente en exceso de la capacidad del servicio (N+1 reservas). Esto es mucho más económico y más flexible que los enfoques de conmutación por error en los que cada componente vivo se combina con una copia de seguridad de un solo componente que se hace cargo en caso de falla (redundancia modular dual). Algunos tipos de sistemas RAID también se pueden usar como repuestos dinámicos para lograr un efecto similar.