Configurar el número máximo de instancias (1.ª gen.)

Puedes controlar el comportamiento de escalado de tu función definiendo un número máximo de instancias de funciones de Cloud Run. Definir un número máximo de instancias controla los costes e impide que los recursos posteriores se vean sobrecargados por el tráfico.

Cloud Run Functions se escala creando nuevas instancias de tu función. Cada una de estas instancias solo puede gestionar una solicitud a la vez, por lo que los picos de gran tamaño en el volumen de solicitudes pueden provocar que se creen muchas instancias.

El escalado automático es útil la mayoría de las veces, pero en algunos casos puede que quieras limitar el número total de instancias que pueden existir en un momento dado. Por ejemplo, tu función puede interactuar con una base de datos que solo puede gestionar un número determinado de conexiones abiertas.

Definir y borrar límites de instancias máximas

Puedes definir un número máximo de instancias para una función durante la implementación. Cada función tiene su propio ajuste de instancias máximas. Las funciones se escalan de forma independiente entre sí.

Definir límites máximos de instancias

Puedes definir un límite de instancias máximo mediante la CLI de Google Cloud o la Google Cloud consola. Si no especificas un límite, Cloud Run Functions asigna un valor predeterminado de 3000.

Para definir un límite máximo de instancias, sigue estos pasos:

Consola

  1. Ve a la página de descripción general de Cloud Run Functions.

  2. Haz clic en Crear función.

  3. Rellena los campos obligatorios de la función.

  4. Abre la sección Tiempo de ejecución, compilación..., situada al final de la página, y haz clic en la pestaña Tiempo de ejecución.

  5. En el campo Número máximo de instancias de la sección Escalado automático, introduzca un valor o utilice el predeterminado.

gcloud

Para definir un límite máximo de instancias, ejecuta el comando deploy con la marca --max-instances:

gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT

Haz los cambios siguientes:

  • FUNCTION_NAME: el nombre de la función.

  • MAX_INSTANCE_LIMIT: número que se va a definir como límite máximo de instancias (por ejemplo, 3000).

Borrar los límites de instancias máximas

Puedes borrar el límite máximo de instancias de una función mediante la gcloudherramienta de línea de comandos Google Cloud o la consola.

Consola

Para borrar el límite máximo de instancias de una función, sigue estos pasos:

  1. Ve a la página de descripción general de Cloud Run Functions.

  2. Haz clic en una función para ir a su página de detalles. Puedes ver el límite máximo actual de instancias de la función en la pestaña Detalles.

  3. Haz clic en Editar.

  4. Abre la sección Tiempo de ejecución, compilación..., situada al final de la página, y haz clic en la pestaña Tiempo de ejecución.

  5. En el campo Número máximo de instancias de la sección Autoescalado, introduce 0.

gcloud

Para borrar el límite máximo de instancias de una función, ejecuta el comando deploy con la marca --clear-max-instances:

gcloud functions deploy FUNCTION_NAME --no-gen2 --clear-max-instances

Límites y prácticas recomendadas

En esta sección se ofrecen directrices para usar el número máximo de instancias.

Elige un valor máximo de instancia

El valor óptimo del ajuste de instancias máximas depende de las características de tu función, como el tiempo que tarda en ejecutarse una invocación, la frecuencia de invocación media y máxima esperada, y la tolerancia de tu aplicación a los errores de invocación. Una buena regla general es empezar con un valor de instancias máximas de 3, monitorizar los errores de invocación y aumentar el valor de instancias máximas según sea necesario.

Protección contra escalados excesivos

Si no se especifica ningún límite de instancias máximo, las funciones de Cloud Run priorizan el aumento de la escala para satisfacer la demanda en lugar de limitar el rendimiento. Esto significa que el número de instancias simultáneas que puede tener tu función es prácticamente ilimitado, a menos que hayas configurado un límite.

Te recomendamos que asignes un límite de --max-instances a las funciones que envíen solicitudes a servicios posteriores con limitaciones de rendimiento o que no se puedan escalar. Un límite máximo de instancias mejora la estabilidad general del sistema y ayuda a protegerlo frente a niveles de solicitudes anormalmente altos.

Gestión de solicitudes cuando todas las instancias están ocupadas

En circunstancias normales, tu función se amplía creando nuevas instancias para gestionar la carga de tráfico entrante. Sin embargo, si has definido un límite máximo de instancias, es posible que te encuentres en una situación en la que no haya suficientes instancias para satisfacer la carga de tráfico entrante.

En ese caso, Cloud Run Functions intenta atender una nueva solicitud entrante durante un máximo de 30 segundos:

  • Si una instancia termina de procesar su solicitud durante este periodo, puede que empiece a procesar la nueva solicitud entrante.
  • Si no hay ninguna instancia disponible, la solicitud fallará.

Las solicitudes enviadas a funciones HTTP sobrecargadas fallan y devuelven un código de respuesta

  • 429 Too Many Requests si se ha configurado un valor máximo de instancias, o
  • 500 Internal Server Error si no se ha configurado ningún valor máximo de instancias

Los eventos destinados a funciones basadas en eventos se guardarán automáticamente hasta que haya capacidad disponible.

Límites de instancias máximas que superan la capacidad de escalado de Cloud Run Functions

Cuando especificas un límite máximo de instancias, estás indicando un límite superior. Definir un límite alto no significa que tu función se escalará hasta el número de instancias especificado. Solo significa que el número de instancias que coexisten en cualquier momento no debe superar el límite.

Además, si defines un límite máximo de instancias, puede que afecte a las estrategias de escalado que usan las funciones de Cloud Run para satisfacer tu demanda de tráfico. En general, las funciones de Cloud Run priorizarán el cumplimiento del límite especificado en lugar de aumentar la escala y superar el límite.

Gestionar picos de tráfico

En algunos casos, como los picos de tráfico rápidos, las funciones de Cloud Run pueden crear, durante un breve periodo, más instancias que el límite máximo especificado. Si tu función no puede tolerar este comportamiento temporal, te recomendamos que incluyas un margen de seguridad y definas un valor de instancias máximo inferior al que puede tolerar tu función.

Despliegues

Cuando despliegas una nueva versión de tu función, Cloud Run Functions migra el tráfico de la versión anterior a la nueva. Como los límites de instancias máximas se definen para cada versión de tu función de forma independiente, es posible que superes temporalmente el límite especificado durante el periodo posterior a la implementación.

Por ejemplo, una función puede tener un límite de instancias máximo de 5. En circunstancias normales, la función se escala hasta 5 instancias a medida que gestiona las solicitudes. Cuando se implementa una nueva versión de la función, esta tiene su propio límite de 5 instancias máximas.

Las solicitudes que ya esté gestionando la versión anterior de la función no se interrumpen cuando se implementa una nueva versión de la función. En lugar de eso, estas solicitudes seguirán avanzando. Las nuevas solicitudes entrantes se gestionarán con la versión de la función que se acaba de implementar.

Por lo tanto, la función del ejemplo anterior podría tener hasta 10 instancias en total (5 por cada versión de la función) durante el periodo posterior a la implementación de la nueva versión. El tiempo que tardan en finalizar las instancias de la función anterior depende del tiempo que tarden esas instancias en terminar de gestionar las solicitudes activas. Este es un factor adicional que debe tener en cuenta al seleccionar un límite de instancias máximo adecuado.

Borrar los límites de instancias máximas

Si defines el número máximo de instancias de una función como 0, se borrará el límite máximo de instancias de la función, pero no se pausará.