Equilibrador de carga: pregunta de la entrevista sobre el diseño del sistema

Mucha gente usa diferentes servicios web en su día a día y también obtienen una respuesta rápida de estos servicios. Sin embargo, la mayoría de los usuarios desconocen la gran escala del proceso responsable de traer contenido a través de Internet. No son conscientes del largo proceso que funciona detrás de escena para escalar el sistema. Este largo proceso involucra la distribución de requests a través de múltiples servidores cuando miles o millones de usuarios realizan requests simultáneamente en el sitio web. 

Load-Balancer-System-Design-Interview

Cuando un sitio web se vuelve extremadamente popular, el tráfico en ese sitio web aumenta y la carga en un solo servidor también aumenta. El tráfico concurrente abruma al servidor único y el sitio web se vuelve más lento para los usuarios. Para cumplir con la solicitud de estos grandes volúmenes de datos y devolver la respuesta correcta de manera rápida y confiable, necesitamos escalar el servidor. Esto se puede hacer agregando más servidores a la red y distribuyendo todas las requests entre estos servidores. Pero…. ¿Quién va a decidir qué solicitud debe enrutarse a qué servidor…?  
La respuesta es… Load Balancer . Comprendamos el concepto de balanceador de carga en detalle… 

¿Qué es un balanceador de carga?

Un equilibrador de carga funciona como un «policía de tráfico» sentado frente a su servidor y enrutando las requests de los clientes en todos los servidores. Simplemente distribuye el conjunto de operaciones solicitadas (requests de escritura de base de datos, consultas de caché) de manera efectiva en varios servidores y garantiza que ningún servidor único reciba demasiadas requests que degraden el rendimiento general de la aplicación. Un equilibrador de carga puede ser un dispositivo físico o una instancia virtualizada que se ejecuta en hardware especializado o en un proceso de software. 
Considere un escenario en el que una aplicación se ejecuta en un solo servidor y el cliente se conecta a ese servidor directamente sin equilibrar la carga. Se verá algo como a continuación…
 

Single-Server-Without-Load-Balancer

Necesitamos discutir los dos problemas principales con este modelo…

  • Punto único de falla: si el servidor se cae o algo le sucede, toda la aplicación se interrumpirá y no estará disponible para los usuarios durante un período determinado. Creará una mala experiencia para los usuarios que es inaceptable para los proveedores de servicios.
  • Servidores sobrecargados: habrá una limitación para la cantidad de requests que un servidor web puede manejar. Si el negocio crece y aumenta el número de requests, el servidor se sobrecargará. Para resolver el creciente número de requests, necesitamos agregar algunos servidores más y distribuir las requests al grupo de servidores. 

Para resolver el problema anterior y distribuir la cantidad de requests, podemos agregar un balanceador de carga frente a los servidores web y permitir que nuestros servicios manejen cualquier cantidad de requests agregando cualquier cantidad de servidores web en la red. Podemos distribuir la solicitud en varios servidores. Por alguna razón, si uno de los servidores se desconecta, el servicio continuará. Además, la latencia en cada solicitud disminuirá porque cada servidor ya no tiene cuellos de botella en RAM/disco/CPU.

Load-Balancer-System-Design

  • Los balanceadores de carga minimizan el tiempo de respuesta del servidor y maximizan el rendimiento.
  • El equilibrador de carga garantiza una alta disponibilidad y confiabilidad al enviar requests solo a servidores en línea
  • Los balanceadores de carga realizan verificaciones de estado continuas para monitorear la capacidad del servidor para manejar la solicitud.
  • Dependiendo de la cantidad de requests o balanceador de carga de demanda, agregue o elimine la cantidad de servidores.

¿Dónde se colocan típicamente los balanceadores de carga?

A continuación se muestra la imagen donde se puede colocar un balanceador de carga…

Load-Balancer-Placed

  • Entre la aplicación cliente/usuario y el servidor
  • Entre el servidor y los servidores de aplicaciones/trabajos
  • Entre los servidores de aplicaciones y los servidores de caché
  • Entre los servidores de caché, los servidores de bases de datos

Tipos de balanceadores de carga

Podemos lograr el equilibrio de carga de tres maneras. Estos son…

1. Equilibradores de carga de software en clientes

Como sugiere el nombre, toda la lógica del equilibrio de carga reside en la aplicación del cliente (por ejemplo, una aplicación de teléfono móvil). La aplicación cliente recibirá la lista de servidores web/servidores de aplicaciones para interactuar. La aplicación elige el primero de la lista y solicita datos al servidor. Si alguna falla ocurre persistentemente (después de un número configurable de reintentos) y el servidor deja de estar disponible, descarta ese servidor y elige el otro de la lista para continuar con el proceso. Esta es una de las formas más económicas de implementar el equilibrio de carga. 

2. Equilibradores de carga de software en servicios

Estos balanceadores de carga son las piezas de software que reciben un conjunto de requests y redirigen estas requests de acuerdo con un conjunto de reglas. Este equilibrador de carga proporciona mucha más flexibilidad porque se puede instalar en cualquier dispositivo estándar (por ejemplo, máquina con Windows o Linux). También es menos costoso porque no hay necesidad de comprar o mantener el dispositivo físico, a diferencia de los balanceadores de carga de hardware. Puede tener la opción de utilizar el equilibrador de carga de software comercial o puede escribir su software personalizado (por ejemplo: consultas de Active Directory de equilibrio de carga de Microsoft Office365) para equilibrar la carga.

3. Equilibradores de carga de hardware

Como sugiere el nombre, utilizamos un dispositivo físico para distribuir el tráfico a través del grupo de servidores de red. Estos balanceadores de carga también se conocen como enrutadores de capa 4-7 y son capaces de manejar todo tipo de tráfico HTTP, HTTPS, TCP y UDP. HLD proporciona una dirección de servidor virtual al mundo exterior. Cuando una solicitud proviene de una aplicación cliente, reenvía la conexión al servidor real más apropiado que realiza la traducción de direcciones de red (NAT) bidireccional. Los HLD pueden manejar un gran volumen de tráfico, pero tienen un precio elevado y también tienen una flexibilidad limitada.

Los HLD siguen realizando comprobaciones de estado en cada servidor y se aseguran de que cada servidor responda correctamente. Si alguno de los servidores no produce la respuesta deseada, inmediatamente deja de enviar el tráfico a los servidores. Estos balanceadores de carga son costosos de adquirir y configurar, por eso muchos proveedores de servicios los usan solo como el primer punto de entrada de las requests de los usuarios. Más tarde, los balanceadores de carga de software internos se utilizan para redirigir los datos detrás de la pared de la infraestructura. 

Diferentes categorías de equilibrio de carga

En general, los balanceadores de carga se agrupan en tres categorías…

1. Equilibrador de carga de capa 4 (L4)

En el modelo OSI, la capa 4 es la capa de transporte (TCP/SSL) donde se toman las decisiones de enrutamiento. El equilibrador de carga de capa 4 también se conoce como Equilibrio de carga de red y, como sugiere el nombre, aprovecha la información de la capa de red para tomar la decisión de enrutamiento del tráfico. Puede controlar millones de requests por segundo y maneja todas las formas de tráfico TCP/UDP. La decisión se basará en los puertos TCP o UDP que utilizan los paquetes junto con sus direcciones IP de origen y destino. El equilibrador de carga L4 también realiza la traducción de direcciones de red (NAT) en el paquete de solicitud, pero no inspecciona el contenido real de cada paquete. Esta categoría de equilibrador de carga maximiza la utilización y la disponibilidad al distribuir el tráfico entre direcciones IP, conmutadores y enrutadores. 

2. Equilibrador de carga de capa 7 (L7)

El balanceador de carga de capa 7 también se conoce como balanceador de carga de aplicaciones o balanceador de carga HTTP(S) . Es una de las formas más antiguas de equilibrio de carga. En el modelo OSI, la Capa 7 es la capa de aplicación (HTTP/HTTPS) donde se ejecutan las decisiones de enrutamiento. La capa 7 agrega el cambio de contenido al equilibrio de carga y utiliza información como el encabezado HTTP, las cookies, el identificador uniforme de recursos, el ID de sesión SSL y los datos del formulario HTML para decidir la solicitud de enrutamiento entre los servidores.  

3. Equilibrio de carga del servidor global (GSLB)

Hoy en día, muchas aplicaciones están alojadas en centros de datos en la nube en múltiples ubicaciones geográficas. Esta es la razón por la que muchas organizaciones se están cambiando a un balanceador de carga diferente que puede entregar aplicaciones con mayor confiabilidad y menor latencia a cualquier dispositivo o ubicación. Con el cambio significativo en la capacidad de los balanceadores de carga, GSLB cumple con estas expectativas de las organizaciones de TI. GSLB amplía la capacidad de los servidores L4 y L7 en diferentes ubicaciones geográficas y distribuye una gran cantidad de tráfico en múltiples centros de datos de manera eficiente. También asegura una experiencia consistente para los usuarios finales cuando navegan por múltiples aplicaciones y servicios en un espacio de trabajo digital. 

Algoritmos de equilibrio de carga

Necesitamos un algoritmo de equilibrio de carga para decidir qué solicitud debe redirigirse a qué servidor backend. El sistema diferente utiliza diferentes formas de seleccionar los servidores del balanceador de carga. Las empresas utilizan variedades de técnicas de algoritmos de equilibrio de carga según la configuración. Algunos de los algoritmos comunes de equilibrio de carga se dan a continuación:

1. Todos contra todos

Las requests se distribuyen entre los servidores de forma secuencial o rotativa. Por ejemplo, la primera solicitud va al primer servidor, la segunda va al segundo servidor, la tercera solicitud va al tercer servidor y continúa para todas las requests. Es fácil de implementar, pero no tiene en cuenta la carga que ya existe en un servidor, por lo que existe el riesgo de que uno de los servidores reciba muchas requests y se sobrecargue.

 

2. Round Robin ponderado

Es muy similar a la técnica de todos contra todos. La única diferencia es que cada uno de los recursos de una lista recibe una puntuación ponderada. Dependiendo de la puntuación ponderada, la solicitud se distribuye a estos servidores. Entonces, en este método, algunos de los servidores obtienen una mayor parte de la solicitud general. 

3. Método de conexión mínima

En este método, la solicitud se dirigirá al servidor con la menor cantidad de requests o conexiones activas. Para hacer esto, el equilibrador de carga necesita realizar algunos cálculos adicionales para identificar el servidor con la menor cantidad de conexiones. Esto puede ser un poco más costoso en comparación con el método por turnos, pero la evaluación se basa en la carga actual del servidor. Este algoritmo es más útil cuando hay una gran cantidad de conexiones persistentes en el tráfico distribuidas de manera desigual entre los servidores.

4. Método del tiempo de respuesta mínimo

Esta técnica es más sofisticada que el método de conexión mínima. En este método, la solicitud se reenvía al servidor con la menor cantidad de conexiones activas y el menor tiempo de respuesta promedio. El tiempo de respuesta que toma el servidor representa la carga en el servidor y la experiencia general esperada del usuario. 

5. Hash de IP de origen

En este método, la solicitud se envía al servidor según la dirección IP del cliente. La dirección IP del cliente y la instancia informática receptora se calculan con un algoritmo criptográfico. 

¿Cómo usar el equilibrio de carga durante las entrevistas de diseño del sistema?

En la entrevista de diseño de su sistema, se le hará algún tipo de pregunta sobre escalabilidad en la que deberá explicar cómo los balanceadores de carga ayudan a distribuir el tráfico y cómo garantizan la escalabilidad y la disponibilidad de los servicios en su aplicación. El concepto general que debe tener en cuenta de este artículo es…

  • Un equilibrador de carga permite una escalabilidad elástica que mejora el rendimiento y el rendimiento de los datos. Le permite mantener muchas copias de datos (redundancia) para garantizar la disponibilidad del sistema. En caso de que un servidor se caiga o falle, tendrá la copia de seguridad para restaurar los servicios. 
  • Los balanceadores de carga se pueden colocar en cualquier capa de software.
  • Muchas empresas usan hardware y software para implementar los balanceadores de carga, según los diferentes puntos de escala en su sistema.

Publicación traducida automáticamente

Artículo escrito por anuupadhyay y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *