Descripción general del balanceo de cargas avanzado

El balanceo de cargas avanzado consta de funciones que te permiten ajustar el balanceo de cargas global y la distribución de tráfico para satisfacer mejor tus objetivos de disponibilidad, rendimiento y rentabilidad. Este documento está dirigido a usuarios que tengan al menos una comprensión intermedia de los conceptos de Cloud Service Mesh y el balanceo de cargas.

Para implementar el balanceo de cargas avanzado, debes crear una política de balanceo de cargas de servicio (recurso serviceLbPolicies), que contiene valores que influyen en la selección de un backend. Luego, adjunta la política de balanceo de cargas del servicio a un servicio de backend. La política de balanceo de cargas del servicio especifica el algoritmo que se usa para determinar cómo se balancea el tráfico a los backends.

Puedes elegir entre las siguientes opciones de algoritmo para el balanceo de cargas avanzado:

  • Cascada por región (algoritmo predeterminado).
  • Aplica el aerosol en la región.
  • Rocíe al mundo.
  • Cascada por zona.

Están disponibles las siguientes opciones adicionales:

  • Designar backends preferidos Cloud Service Mesh envía tráfico a esos MIG o NEG antes de enviar tráfico a otros backends.
  • Configura el vaciado automático de capacidad.
  • Personaliza el comportamiento de conmutación por error.

Antes de configurar cualquiera de las opciones avanzadas de balanceo de cargas, te recomendamos que revises la documentación del recurso del servicio de backend.

Cómo Cloud Service Mesh enruta el tráfico y balancea sus cargas

En el siguiente diagrama, se muestra cómo Cloud Service Mesh decide enrutar el tráfico.

Cómo Cloud Service Mesh toma decisiones sobre el balanceo de cargas
Cómo Cloud Service Mesh toma decisiones sobre el balanceo de cargas (haz clic para ampliar)

Primero, Cloud Service Mesh elige un servicio de backend según las características de la solicitud y las reglas de enrutamiento en el recurso Route o el mapa de URL, según la API que use tu implementación.

En segundo lugar, Cloud Service Mesh elige un MIG o NEG de backend que esté asociado con el servicio de backend, según la ubicación del cliente, la ubicación, el estado y la capacidad del MIG o el NEG, además de la información en la política de balanceo de cargas del servicio asociada con el servicio de backend.

Por último, Cloud Service Mesh elige una instancia o un extremo dentro del MIG o NEG. Esta opción se basa en la información de la política de balanceo de cargas de localidad en los servicios de backend.

Backends compatibles y no compatibles

Los siguientes tipos de backend son compatibles con el balanceo de cargas avanzado:

  • Grupos de instancias no administrados
  • Grupos de instancias administrados (MIG)
  • Grupos de extremos de red por zonas (NEG de GCE_VM_IP_PORT)
  • Grupos de extremos de red de conectividad híbrida (NEG NON_GCP_PRIVATE_IP_PORT)

Los siguientes tipos de backend no son compatibles con el balanceo de cargas avanzado:

  • Grupos de instancias administrados regionales
  • Grupos de extremos de red de Internet (NEG de INTERNET_FQDN_PORT)

Casos de uso

En las siguientes secciones, se describe cómo funciona cada algoritmo y cuál puedes elegir según tus necesidades empresariales particulares.

Equilibra el tráfico entre backends en una región

El algoritmo de balanceo de cargas predeterminado, en cascada por región, distribuye el tráfico de manera uniforme entre todos los MIG o NEG en las zonas de una región. Te recomendamos que uses el algoritmo predeterminado, a menos que tengas requisitos especiales.

Con cascada por región, los backends reciben tráfico en proporción a su capacidad, lo que proporciona protección contra la sobrecarga del backend. El tráfico se envía a través de los límites de la zona cuando es necesario para mantener los backends cargados de manera uniforme dentro de la región. Incluso si la zona local del cliente tiene capacidad restante, hay tráfico entre zonas. Las solicitudes de cada cliente se pueden distribuir en varios MIG zonales o NEG en la región, lo que ayuda a mantener la carga en los MIG o NEG uniforme cuando la carga de tráfico de los clientes no es uniforme.

Aumentar la resiliencia mediante la distribución del tráfico de un cliente por distintas zonas

El algoritmo predeterminado de cascada por región intenta equilibrar el uso de la capacidad en varios MIG o NEG zonales. Sin embargo, según ese algoritmo, las solicitudes que se originan en un solo cliente no se envían de manera coherente a todas las zonas y, por lo general, las solicitudes de un solo cliente se enrutan a MIG o NEG en una sola zona.

Usa el algoritmo de rociador para regiones cuando desees que los clientes distribuyan sus solicitudes a todos los MIG o NEG en una región, lo que reduce el riesgo de sobrecargar los MIG o los NEG en una sola zona cuando hay un aumento rápido y localizado en el volumen de tráfico.

Con el algoritmo de pulverización por región, si tienes dos zonas, A y B, y hay un aumento repentino de tráfico en la zona B, el tráfico se divide entre las dos zonas. Con el algoritmo predeterminado, un aumento repentino en la zona B podría activar una sobrecarga en la zona antes de que Cloud Service Mesh pueda responder al cambio.

Ten en cuenta que cuando usas el algoritmo de rociador para la región, el tráfico de cada cliente siempre se distribuye entre las zonas de backend de una región. Esto da como resultado un tráfico entre zonas constantemente más alto, incluso cuando hay capacidad restante en la zona local, y puede dar como resultado un área afectada más grande para el tráfico de Cloud Service Mesh, si dos clientes de Cloud Service Mesh envían tráfico a las mismas zonas.

Distribuye el tráfico del cliente en todos los backends de varias regiones

Como se analizó en las secciones anteriores, el algoritmo de rociador en la región distribuye el tráfico de cada cliente a todas las zonas de una región. Para los servicios que tienen MIG o NEG en varias regiones, Cloud Service Mesh optimiza la latencia general mediante el envío del tráfico a la región más cercana.

Si prefieres un radio de expansión más amplio, usa el algoritmo de rociador para mundos. Con este algoritmo, los clientes distribuyen sus solicitudes a todos los MIG o NEG del mundo en varias regiones.

Es importante tener en cuenta que, con este algoritmo, todo el tráfico se distribuye a todos los backends de manera global. Una consulta defectuosa puede dañar todos los backends de tus implementaciones. El algoritmo también genera más tráfico entre regiones, lo que puede aumentar la latencia de las solicitudes y generar costos adicionales.

Minimiza el tráfico interzonal

Puedes optimizar la latencia general y reducir el tráfico entre zonas con la configuración de cascada por zona. Cuando se configuran varios MIG o NEG en una zona, el tráfico de cliente se enruta al MIG o NEG más cercano en la zona (hasta alcanzar su capacidad) antes de enviar tráfico al siguiente MIG o NEG de la zona hasta que se use toda la capacidad de MIG o NEG de la zona. Solo entonces el tráfico se desvía a la zona más cercana.

Con este algoritmo, puedes minimizar el tráfico innecesario entre zonas. La latencia general podría mejorarse un poco, ya que se prefieren los backends locales más cercanos. Sin embargo, esto también puede crear tráfico desigual en los MIG o NEG dentro de una región.

Comparación de los algoritmos de balanceo de cargas

En la siguiente tabla, se proporciona una comparación detallada de los cuatro algoritmos de balanceo de cargas de Cloud Service Mesh.

Comportamiento Cascada por región Aplica el aerosol en la región Aplica el rociador al mundo Cascada por zona
Uso de capacidad uniforme dentro de una región en estado estable No
Uso de capacidad uniforme en varias regiones en estado estable No No No
División del tráfico uniforme dentro de una región en estado estable No No
Tráfico entre zonas Sí. Este algoritmo distribuirá el tráfico de manera uniforme entre las zonas de una región mientras optimiza la latencia de red. El tráfico se puede enviar a través de zonas si es necesario. Sí, el tráfico llenará la zona más cercana hasta su capacidad. Luego irá a la siguiente zona.
Sensibilidad a los aumentos repentinos del tráfico en la zona local Promedio, dependiendo de cuánto tráfico ya se haya cambiado para equilibrar entre las zonas. Menor; ya que los aumentos repentinos en una sola zona se extenderán a todas las zonas de la región Más baja, ya que los picos de una sola zona se extenderán a todas las regiones. Mayor, ya que es más probable que los aumentos de una sola zona se entreguen por completo en una sola zona hasta que Cloud Service Mesh pueda reaccionar.

Opciones avanzadas adicionales de balanceo de cargas

En las siguientes secciones, se analizan las opciones para modificar el balanceo de cargas de Cloud Service Mesh.

Backends preferidos

Puedes configurar el balanceo de cargas para que se designe como preferido un grupo de backends de un servicio de backend. Estos backends se usan por completo antes de que las solicitudes posteriores se enruten a los backends restantes. Cloud Service Mesh distribuye el tráfico de clientes a los backends preferidos primero, lo que minimiza las latencias de las solicitudes para los clientes.

Cualquier tráfico que exceda la capacidad configurada de los backends preferidos se enruta a los backends no preferidos. El algoritmo de balanceo de cargas distribuye el tráfico entre los backends no preferidos.

Un caso de uso es el desbordamiento a Google Cloud, en el que especificas recursos de procesamiento locales, representados por un NEG de conectividad híbrida, para que se usen por completo antes de que las solicitudes se enruten a los MIG o NEG del backend de Google Cloud con ajuste de escala automático. Esta configuración puede minimizar el consumo de procesamiento de Google Cloud y aun así tener la resiliencia para derramar gradualmente o conmutar por error a Google Cloud cuando sea necesario.

Vaciado automático de capacidad

Cuando un backend está en mal estado, generalmente es conveniente excluirlo lo más rápido posible de las decisiones de balanceo de cargas. Excluir el backend evita que las solicitudes se envíen al backend en mal estado. Además, el tráfico se equilibra entre backends en buen estado para evitar la sobrecarga del backend y optimizar la latencia general.

Esta opción es similar a establecer el capacity escalar como cero. Le pide a Cloud Service Mesh que reduzca automáticamente la capacidad del backend a cero cuando un backend tiene menos del 25% de sus instancias o extremos individuales que pasan las verificaciones de estado. Con esta opción, los backends en mal estado se quitan del balanceo de cargas global.

Cuando los backends que se vacian automáticamente vuelven a estar en buen estado, no tienen acceso a ellos si al menos el 35% de los extremos o las instancias se encuentran en buen estado durante 60 segundos. Cloud Service Mesh no desvía más del 50% de los extremos de un servicio de backend, sin importar el estado del backend.

Un caso de uso es que puedes usar el vaciado automático de capacidad con backends preferidos. Si se prefiere un MIG o NEG de backend y muchos de los extremos están en mal estado, esta configuración protege los extremos restantes del MIG o NEG mediante el cambio del tráfico fuera del MIG o el NEG.

Personaliza el comportamiento de la conmutación por error

Por lo general, Cloud Service Mesh envía tráfico a los backends si se toman en cuenta varios factores. En un estado estable, Cloud Service Mesh envía tráfico a los backends que se seleccionan según los algoritmos que se analizaron antes. Los backends seleccionados se consideran óptimos en términos de latencia y uso de capacidad. Se llaman backends principales.

Cloud Service Mesh también realiza un seguimiento de los backends que se usan cuando los backends principales están en mal estado y no pueden recibir tráfico. Estos backends se denominan backends de conmutación por error. Por lo general, son backends cercanos que tienen algo de capacidad restante.

Cuando un backend está en mal estado, Cloud Service Mesh intenta evitar enviarle tráfico y, en su lugar, lo redirecciona a backends en buen estado.

El recurso serviceLbPolicy incluye un campo, failoverHealthThreshold, cuyo valor se puede personalizar para controlar el comportamiento de conmutación por error. El valor del umbral que estableces determina cuándo se cambia el tráfico de los backends principales a los backends de conmutación por error.

Cuando algunos extremos del backend principal están en mal estado, Cloud Service Mesh no cambia el tráfico de inmediato. En su lugar, Cloud Service Mesh podría cambiar el tráfico a extremos en buen estado en el backend principal para intentar estabilizar el tráfico.

Si hay demasiados extremos en el backend están en mal estado, los extremos restantes no pueden controlar el tráfico adicional. En este caso, el umbral de fallas se usa para decidir si la conmutación por error se activa o no. Cloud Service Mesh tolera los problemas de salud hasta el umbral establecido y, luego, transfiere una parte del tráfico de los backends principales a los de conmutación por error.

El umbral de estado de la conmutación por error es un valor porcentual. El valor que estableces determina cuándo Cloud Service Mesh dirige el tráfico a los backends de conmutación por error. Puedes establecer un número entero entre 1 y 99. El valor predeterminado de Cloud Service Mesh es 70 con Envoy y 50 para gRPC sin proxy. Un valor mayor inicia la conmutación por error del tráfico antes que un valor más pequeño.

Soluciona problemas

Los patrones de distribución de tráfico pueden cambiar en función de cómo configures el serviceLbPolicy nuevo con el servicio de backend.

Para depurar los problemas de tráfico, usa los sistemas de supervisión existentes a fin de examinar cómo fluye el tráfico a tus backends. Las métricas de red y de Cloud Service Mesh adicionales pueden ayudarte a comprender cómo se toman las decisiones de balanceo de cargas. En esta sección, se ofrecen sugerencias generales de solución de problemas y mitigación.

En general, Cloud Service Mesh intenta asignar tráfico para mantener los backends en ejecución por debajo de su capacidad configurada. Ten en cuenta que esto no está garantizado. Puedes consultar la documentación del servicio de backend para obtener más detalles.

Luego, el tráfico se asigna según el algoritmo que uses. Por ejemplo, con el algoritmo WATERFALL_BY_ZONE, Cloud Service Mesh intenta mantener el tráfico en la zona más cercana. Si verificas las métricas de la red, verás que Cloud Service Mesh prefiere un backend con la menor latencia de RTT cuando envía solicitudes para optimizar la latencia general de RTT.

En las siguientes secciones, se describen los problemas que puedes observar con la política de balanceo de cargas de servicios y la configuración de backend preferida.

El tráfico se envía a MIG o NEG más distantes antes que a los más cercanos

Este es el comportamiento previsto cuando los backends preferidos se configuran con MIG o NEG más distantes. Si no deseas este comportamiento, cambia los valores en el campo de backends preferidos.

El tráfico no se envía a los MIG o NEG que tienen muchos extremos en mal estado

Este es el comportamiento previsto cuando se desvían los MIG o los NEG porque se configuró un autoCapacityDrain. Con esta configuración, se quitarán los MIG o NEG con muchos extremos en mal estado de las decisiones de balanceo de cargas y, por lo tanto, se evitarían. Si este comportamiento no es deseado, puedes inhabilitar la configuración de autoCapacityDrain. Sin embargo, ten en cuenta que esto significa que el tráfico se puede enviar a MIG o NEG con muchos extremos en mal estado y, por lo tanto, las solicitudes pueden fallar con errores.

El tráfico no se envía a algunos MIG o NEG cuando se prefieren algunos MIG o NEG

Este es el comportamiento previsto si los MIG o NEG configurados como preferidos aún no alcanzaron su capacidad.

Cuando se configuran los backends preferidos y no alcanzan su límite de capacidad, el tráfico no se enviará a otros MIG o NEG. Los MIG o NEG preferidos se asignarán primero según la latencia de RTT de estos backends.

Si prefieres que el tráfico se envíe a otro lugar, puedes configurar su servicio de backend sin backends preferidos o con estimaciones de capacidad más conservadoras para los MIG o NEG preferidos.

El tráfico se envía a demasiados MIG o NEG distintos desde una sola fuente

Este es el comportamiento previsto si se usa el efecto de pulverización a región o de rociador a mundo. Sin embargo, es posible que tengas problemas con una distribución más amplia del tráfico. Por ejemplo, las tasas de acierto de caché pueden reducirse a medida que los backends ven tráfico de una selección más amplia de clientes. En este caso, considera usar otros algoritmos, como cascada por región.

El tráfico se envía a un clúster remoto cuando cambia el estado del backend

Cuando failoverHealthThreshold se establece en un valor alto, este es el comportamiento deseado. Si deseas que el tráfico permanezca en los backends principales cuando haya cambios de estado transitorios, establece failoverHealthThreshold en un valor más bajo.

Los extremos en buen estado se sobrecargan cuando algunos extremos están en mal estado

Cuando failoverHealthThreshold se establece en un valor bajo, este es el comportamiento deseado. Cuando algunos extremos están en mal estado, el tráfico de estos extremos puede distribuirse entre los extremos restantes en el mismo MIG o NEG. Si deseas que el comportamiento de conmutación por error se active con anticipación, establece failoverHealthThreshold en un valor más alto.

Limitaciones y consideraciones

Las siguientes son limitaciones y consideraciones que debes tener en cuenta cuando configures el balanceo de cargas avanzado.

Cascada por zona

  • Durante los eventos de mantenimiento transparente, es posible que el tráfico se balancee de forma temporal fuera de la zona local.

  • Se prevén casos en los que algunos MIG o NEG están al máximo de su capacidad, mientras que otros MIG o NEG de la misma región no se usan mucho.

  • Si la fuente de tráfico de tu servicio está en la misma zona que sus extremos, verás una reducción en el tráfico entre zonas.

  • Una zona puede estar asignada a diferentes clústeres de hardware físico interno dentro de los centros de datos de Google; por ejemplo, debido a la virtualización de zonas. En este caso, es posible que las VMs ubicadas en la misma zona no se carguen de manera uniforme. En general, se optimizará la latencia general.

De pulverización a región

  • Si los extremos en un MIG o NEG fallan, las consecuencias, por lo general, se distribuyen en un conjunto más grande de clientes. En otras palabras, una cantidad mayor de clientes de la malla podría verse afectada, pero con menor gravedad.

  • En algunos casos, a medida que los clientes envían solicitudes a todos los MIG o NEG de la región, esto puede aumentar la cantidad de tráfico entre zonas.

  • La cantidad de conexiones abiertas a los extremos puede aumentar, lo que aumenta el uso de recursos.

Backends preferidos

  • Los MIG o NEG configurados como backends preferidos pueden estar lejos de los clientes y podrían causar una latencia promedio más alta para los clientes. Esto puede suceder incluso si hay otros MIG o NEG que podrían entregar a los clientes con una latencia más baja.

  • Los algoritmos de balanceo de cargas global (cascada por región, de dispersión a región y de cascada por zona) no se aplican a los MIG o los NEG configurados como backends preferidos.

Desvío de capacidad automático

  • La cantidad mínima de MIG que nunca se desvían es diferente del valor que se estableció cuando se configura con serviceLbPolicies.

  • De forma predeterminada, la cantidad mínima de MIG que nunca se desvían es 1.

  • Si se configura serviceLbPolicies, el porcentaje mínimo de MIG o NEG que nunca se desvían es del 50%. En ambos parámetros de configuración, un MIG o un NEG se marca como en mal estado si menos del 25% de las instancias o extremos en el MIG o NEG están en buen estado.

  • Para que un MIG o un NEG se desvíen después de un desvío, al menos el 35% de las instancias o extremos deben estar en buen estado. Esto es necesario para garantizar que un MIG o un NEG no vacien entre los estados de desvío y los desviados.

  • Aquí también se aplican las mismas restricciones del escalador de capacidad para backends que no usan un modo de balanceo.

¿Qué sigue?