Cantidad máxima de solicitudes simultáneas para los servicios

Para los servicios de Cloud Run, la escala cada revisión se ajusta de forma automática a la cantidad de instancias necesarias para controlar todas las solicitudes entrantes.

Cuando hay más instancias que procesan solicitudes, se genera un uso mayor de CPU y memoria, lo que genera costos más altos.

Para darte más control, Cloud Run proporciona una configuración máxima de solicitudes simultáneas por instancia que especifica la cantidad máxima de solicitudes que una instancia puede procesar simultáneamente.

Cantidad máxima de solicitudes simultáneas por instancia

Puedes configurar la cantidad máxima de solicitudes simultáneas por instancia. Puedes aumentarlo hasta un máximo de 1,000. De forma predeterminada, las instancias de Cloud Run implementadas con Google Cloud CLI o Terraform tienen una simultaneidad máxima que es 80 veces la cantidad de CPU virtuales. Este valor predeterminado solo se aplica cuando se crea un servicio nuevo; no se aplica a las implementaciones posteriores de una revisión. Las instancias de Cloud Run implementadas con la Google Cloud consola tienen una simultaneidad predeterminada de 80.

Aunque debes usar el valor de simultaneidad predeterminado, puedes disminuir la simultaneidad máxima. Por ejemplo, si tu código no puede procesar solicitudes paralelas, configura la simultaneidad en 1.

El valor de simultaneidad especificado es un límite máximo. Si la CPU de la instancia ya tiene un uso alto, es posible que Cloud Run no envíe tantas solicitudes a una instancia determinada. En estos casos, es posible que la instancia de Cloud Run muestre que no se está utilizando la simultaneidad máxima. Por ejemplo, si el uso elevado de la CPU se mantiene, es posible que la cantidad de instancias aumente.

En el siguiente diagrama, se muestra cómo la configuración máxima de solicitudes simultáneas por instancia afecta la cantidad de instancias necesarias para manejar las solicitudes simultáneas entrantes:

diagrama de cantidad máxima de solicitudes simultáneas por instancia

Ajuste de la simultaneidad para el ajuste de escala automático y la utilización de recursos

Ajustar la simultaneidad máxima por instancia influye significativamente en la forma en que tu servicio se escala y utiliza los recursos.

  • Simultaneidad más baja: Obliga a Cloud Run a usar más instancias para el mismo volumen de solicitudes, ya que cada instancia controla menos solicitudes. Esto puede mejorar la capacidad de respuesta de las aplicaciones que no están optimizadas para un alto paralelismo interno o de las aplicaciones que deseas escalar más rápidamente en función de la carga de solicitudes.
  • Mayor simultaneidad: Permite que cada instancia controle más solicitudes, lo que podría generar menos instancias activas y reducir los costos. Esto es adecuado para aplicaciones eficientes en tareas paralelas vinculadas a la E/S o para aplicaciones que pueden utilizar realmente varias vCPUs para el procesamiento de solicitudes simultáneas.

Comienza con la simultaneidad predeterminada, supervisa de cerca el rendimiento y la utilización de tu aplicación, y realiza los ajustes necesarios.

Simultaneidad con instancias de múltiples CPU virtuales

Ajustar la simultaneidad es especialmente importante si tu servicio usa varias CPU virtuales, pero tu aplicación es de un solo subproceso o, de manera efectiva, de un solo subproceso (vinculada a la CPU).

  • Puntos de acceso de CPU virtual: Una aplicación de un solo subproceso en una instancia con varias CPUs virtuales puede alcanzar el máximo de una CPU virtual mientras que las demás permanecen inactivas. El escalador automático de CPU de Cloud Run mide el uso promedio de CPU en todas las CPU virtuales. En este caso, el uso promedio de la CPU puede permanecer engañosamente bajo, lo que impide un escalamiento eficaz basado en la CPU.
  • Usa la simultaneidad para impulsar el escalamiento: Si el ajuste de escala automático basado en la CPU no es eficaz debido a los puntos de acceso de la CPU virtual, reducir la simultaneidad máxima se convierte en una herramienta importante. Los puntos de acceso de la CPU virtual suelen producirse cuando se elige la CPU virtual múltiple para una aplicación de un solo subproceso debido a las altas necesidades de memoria. El uso de la simultaneidad para impulsar el ajuste de escala obliga a que este se base en el rendimiento de las solicitudes. Esto garantiza que se inicien más instancias para controlar la carga, lo que reduce la latencia y las colas por instancia.

Cuándo limitar la simultaneidad máxima a una solicitud a la vez

Puedes limitar la simultaneidad para que solo se envíe una solicitud a la vez a cada instancia en ejecución. Debes considerar hacer esto en los siguientes casos:

  • Cada solicitud usa la mayor parte de la CPU o memoria disponible.
  • Tu imagen de contenedor no está diseñada para controlar varias solicitudes a la vez; por ejemplo, cuando tu contenedor depende del estado global que dos solicitudes no pueden compartir.

Ten en cuenta que es probable que una simultaneidad de 1 afecte de forma negativa el rendimiento del escalamiento, ya que muchas instancias tendrán que iniciarse a fin de controlar un aumento en las solicitudes entrantes. Consulta Comparación entre capacidad de procesamiento, latencia y compensaciones para obtener más consideraciones.

Caso de éxito

En las siguientes métricas, se muestra un caso práctico en el que 400 clientes realizan 3 solicitudes por segundo a un servicio de Cloud Run configurado en un máximo de solicitudes simultáneas por instancia de 1. La línea superior verde muestra las solicitudes a lo largo del tiempo y la línea inferior azul muestra la cantidad de instancias que se iniciaron para controlar las solicitudes.

Simultaneidad configurada en uno

En las siguientes métricas, se muestran a 400 clientes que realizan 3 solicitudes por segundo a un servicio de Cloud Run configurado en un máximo de solicitudes simultáneas por instancia de 80. La línea superior verde muestra las solicitudes a lo largo del tiempo y la línea inferior azul muestra la cantidad de instancias que se iniciaron para controlar las solicitudes. Ten en cuenta que se necesitan muchas menos instancias para controlar el mismo volumen de solicitudes.

Simultaneidad configurada en 80

Simultaneidad para las implementaciones de código fuente

Cuando la simultaneidad está habilitada, Cloud Run no proporciona aislamiento entre las solicitudes simultáneas que procesa la misma instancia. En esos casos, debes asegurarte de que el código sea seguro para ejecutarse de manera simultánea. Puedes cambiar este comportamiento configurando un valor de simultaneidad diferente. Recomendamos comenzar con una simultaneidad más baja, como 8 y, luego, aumentarla. Comenzar con una simultaneidad demasiado alta podría provocar un comportamiento no deseado debido a limitaciones de recursos (como memoria o CPU).

Los tiempos de ejecución del lenguaje también pueden afectar la simultaneidad. En la siguiente lista, se muestran algunos de estos impactos específicos del idioma:

  • Por su parte, Node.js tiene un solo subproceso. Para aprovechar la simultaneidad, usa el estilo de código asíncrono de JavaScript, que es idiomático en Node.js. Consulta Control de flujo asíncrono en la documentación oficial de Node.js para obtener más información.

  • En el caso de Python 3.8 y versiones posteriores, la compatibilidad con una alta simultaneidad por instancia requiere suficientes subprocesos para controlar la simultaneidad. Te recomendamos que establezcas una variable de entorno de ejecución para que el valor de subprocesos sea igual al valor de simultaneidad, por ejemplo: THREADS=8.

¿Qué sigue?

Para administrar la cantidad máxima de solicitudes simultáneas por instancia de tus servicios de Cloud Run, consulta Configura solicitudes simultáneas máximas por instancia.

Si deseas optimizar la cantidad máxima de solicitudes simultáneas por configuración de instancia, consulta las sugerencias de desarrollo para ajustar la simultaneidad.