Configura la cantidad máxima de instancias
Puedes controlar el comportamiento de escalamiento de tu función si configuras un número máximo de instancias de Cloud Functions. Configurar las instancias máximas controla el costo y evita que los recursos descendentes se sobrecarguen con el tráfico.
Cloud Functions escala mediante la creación de instancias nuevas de tu función. Cada una de estas instancias solo puede manejar una solicitud a la vez, por lo que los picos grandes en el volumen de solicitudes pueden generar muchas instancias.
El ajuste de escala automático tiene ventajas la mayor parte del tiempo, pero en algunos casos es posible que desees limitar la cantidad total de instancias que pueden existir en un momento determinado. Por ejemplo, tu función puede interactuar con una base de datos que solo pueda controlar una cierta cantidad de conexiones abiertas.
Cloud Functions (2nd gen) ofrece simultaneidad como un mecanismo de escalamiento adicional. Una función configurada para la simultaneidad puede ejecutar varias solicitudes de forma simultánea en una sola instancia. Puedes configurar una función para usar simultaneidad y varias instancias para optimizar su rendimiento. Para obtener información sobre cómo configurar la simultaneidad, consulta Simultaneidad de Cloud Functions.
Configura y borra límites máximos de instancias
Puedes establecer una cantidad máxima de instancias para una función durante la implementación. Cada función tiene su propia configuración de instancia máxima. Las funciones se escalan de forma independiente unas de otras.
Configura el límite máximo de instancia
Puedes establecer un límite máximo de instancias mediante Google Cloud CLI o la consola de Google Cloud. Si no especificas un límite, Cloud Functions establece un valor predeterminado:
- 3,000 para funciones de Cloud Functions (1ª gen.)
- 100 para funciones de Cloud Functions (2nd gen)
Para establecer un límite máximo de instancias, haz lo siguiente:
Consola
Haga clic en Crear función.
Completa los campos obligatorios de la función.
Expande la sección Entorno de ejecución, compilación... al final de la página y haz clic en la pestaña Entorno de ejecución.
En el campo Cantidad máxima de instancias, en la sección Ajuste de escala automático, ingresa un valor o usa el valor predeterminado.
gcloud
Para establecer 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
Reemplaza lo siguiente:
FUNCTION_NAME: Es el nombre de la función.
MAX_INSTANCE_LIMIT: el número que se establecerá como el límite máximo de instancias, por ejemplo, 3,000.
Borra el límite máximo de instancias
Puedes borrar un límite máximo de instancias para una función de Cloud Functions (1ª gen.)
con la herramienta de línea de comandos de gcloud
o la consola de Google Cloud.
Las funciones de Cloud Functions (2nd gen) requieren un límite máximo definido de instancias.
Consola
Para borrar el límite máximo de instancias para una función de Cloud Functions (1ª gen.), haz lo siguiente:
Haz clic en una función existente para ir a la página de detalles. Puedes ver el límite máximo de instancias actuales de la función en la pestaña Detalles.
Haz clic en Editar.
Expande la sección Entorno de ejecución, compilación... al final de la página y haz clic en la pestaña Entorno de ejecución.
En el campo Cantidad máxima de instancias, en la sección Ajuste de escala automático, ingresa
0
.
gcloud
Para borrar el límite máximo de instancias para una función de Cloud Functions (1ª gen.),
ejecuta el comando deploy
con la marca --clear-max-instances
:
gcloud functions deploy FUNCTION_NAME --clear-max-instances
Límites y prácticas recomendadas
En esta sección, se brindan pautas para utilizar la cantidad máxima de instancias.
Elige un valor máximo de instancia
El valor óptimo para la configuración de instancias máximas depende de las características de tu función, incluido el tiempo que se tarda en ejecutarse una invocación, su frecuencia de invocación promedio y máxima esperada, y la tolerancia de tu aplicación ante las fallas de invocación. Una buena regla general es comenzar con un valor máximo de 3 instancias y, luego, supervisar las fallas de invocación y ajustar el valor máximo de instancias hacia arriba según sea necesario.
Protección contra aumentos excesivos
Cuando no se especifica un límite máximo de instancias, Cloud Functions (1ª gen.) favorece el escalamiento vertical para satisfacer la demanda por sobre la limitación de la capacidad de procesamiento. Esto significa que la cantidad de instancias simultáneas que tu función de 1ª gen. puede tener es efectivamente ilimitada, a menos que hayas configurado ese límite. Cloud Functions (2nd gen) no admite funciones sin un límite máximo de instancias
Recomendamos asignar un límite de --max-instances
a cualquier función que envíe solicitudes a servicios descendentes con capacidad de procesamiento limitado o que no sean escalables.
Un límite máximo de instancias mejora la estabilidad general del sistema y ayuda a en la protección contra los niveles de solicitudes más altos de lo común.
Controla las solicitudes cuando todas las instancias están ocupadas
En circunstancias normales, tu función se escala creando instancias nuevas para controlar la carga de tráfico entrante. Sin embargo, cuando estableces un límite máximo de instancias, puede darse una situación en la que no hay suficientes instancias para cumplir con esa carga de tráfico entrante.
En ese caso, Cloud Functions intenta entregar una solicitud entrante nueva durante un máximo de 30 segundos:
- Si una instancia termina de procesar su solicitud durante este período, es posible que comience a procesar la solicitud entrante nueva.
- Si no hay ninguna instancia disponible, la solicitud fallará.
Las solicitudes enviadas a funciones de HTTP sobrecargadas fallan con un código de respuesta
429 Too Many Requests
si se configura un valor máximo de instancias, o500 Internal Server Error
si no se configura ningún valor máximo de instancias (solo funciones de 1ª gen.)
Los eventos destinados a funciones controladas por eventos se guardarán de forma automática hasta que la capacidad esté disponible.
Límites máximos de instancias que exceden la capacidad de escalamiento de Cloud Functions
Cuando especificas un límite máximo de instancias, estás estableciendo un límite superior. Establecer un límite grande no significa que tu función escalará verticalmente al número especificado de instancias. Solo significa que la cantidad de instancias que coexisten en cualquier momento no debe exceder el límite.
Además, establecer un límite máximo de instancias puede afectar las estrategias de escalamiento que Cloud Functions usa para satisfacer tu demanda de tráfico. En general, Cloud Functions priorizará el cumplimiento del límite especificado en lugar de escalarlo verticalmente y superarlo.
Controla los picos de tráfico
En algunos casos, como picos de tráfico rápidos, Cloud Functions puede, por un período breve, crear más instancias que el límite máximo especificado. Si tu función no puede tolerar este comportamiento temporal, tal vez desees tener en cuenta un margen de seguridad y establecer un valor de instancias máximo inferior al que puede tolerar tu función.
Implementaciones
Cuando implementas una nueva versión de tu función, Cloud Functions migra el tráfico de la versión anterior a la nueva. Debido a que los límites de instancias máximas se establecen para cada versión de tu función de forma independiente, puedes exceder temporalmente el límite especificado durante el período posterior a la implementación.
Por ejemplo, una función puede tener un límite máximo de 5 instancias. En circunstancias normales, la función escala verticalmente hasta 5 instancias mientras controla las solicitudes. Cuando se implementa una versión nueva de la función, esa versión tiene su propio límite máximo de 5 instancias.
Las solicitudes que controla la versión anterior de la función actualmente no se interrumpen cuando se implementa una versión nueva de la función. Por el contrario, estas solicitudes continuarán progresando. La versión de la función que se implementó recientemente controlará las solicitudes entrantes nuevas.
Por lo tanto, la función del ejemplo anterior puede tener hasta 10 instancias totales (5 para cada versión de tu función) durante el período posterior a la implementación de la versión nueva. El tiempo de finalización requerido de las instancias de la función anterior depende del tiempo requerido para que esas instancias terminen de controlar cualquier solicitud activa. Este es un factor adicional que se debe tener en cuenta cuando se selecciona un límite máximo de instancias.
Borra el límite máximo de instancias
Establecer las instancias máximas en una función de Cloud Functions (1ª gen.) en 0 borra el límite máximo de instancias existentes de la función, pero no pausa tu función.