Cantidad máxima de solicitudes simultáneas por instancia (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. De forma predeterminada, cada instancia de Cloud Run puede recibir hasta 80 solicitudes al mismo tiempo. Puedes aumentar esto a un máximo de 1000.

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 máximo y es posible que Cloud Run no envíe tantas solicitudes a una instancia determinada si la CPU de la instancia ya tiene un uso alto.

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

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.

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

Concurrencia para 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. Para cambiar esto, configura 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 de lenguaje también pueden afectar la simultaneidad. Algunos de estos impactos específicos del idioma se muestran en la siguiente lista:

  • 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.