En 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, los eventos o la utilización de CPU.
Cuando una revisión no recibe tráfico, la cantidad de instancias se reduce a cero de forma predeterminada. Sin embargo, si lo deseas, puedes cambiar este valor predeterminado para especificar que una instancia se mantenga inactiva o “en espera” con la configuración de instancias mínimas. Si usas una CPU fuera de las solicitudes, debes establecer instancias mínimas iguales a 1
.
Además de la frecuencia de las solicitudes entrantes, los eventos o el uso de CPU, la cantidad de instancias programadas se ve afectada por los siguientes factores:
- El uso promedio de CPU de las instancias existentes durante un período de un minuto, con el objetivo de mantener las instancias programadas en un 60% de uso de CPU.
- La simultaneidad de solicitudes actual, en comparación con la simultaneidad máxima durante un período de un minuto.
- La configuración de la cantidad máxima de instancias
- La configuración de la cantidad mínima de instancias
El escalador automático de Cloud Run las evalúa cada 5 segundos.
CPU siempre asignada y ajuste de escala automático
Si configuras tu servicio de Cloud Run para que tenga CPU siempre asignada, debes tener en cuenta el comportamiento del escalamiento a cero y desde cero.
La CPU siempre asigna escalamiento desde cero. Solo una solicitud puede activar el escalamiento desde cero, por lo que un servicio que no procesa solicitudes no puede escalar desde cero. Para estas cargas de trabajo, puedes establecer instancias mínimas > 0 o incluir una “solicitud de activación” en el diseño a fin de reiniciar el procesamiento después de reducir la escala a cero.
Reducción de escala a cero de la CPU siempre asignada. Dado que ninguna instancia tiene un 0% de CPU, si se observa todo el uso de CPU, nunca se escalaría a cero. Esto significa que la decisión de escalar de uno a cero solo se puede tomar si se verifica que la instancia está procesando una solicitud.
Acerca de la cantidad máxima de instancias
En algunos casos, se recomienda limitar la cantidad total de instancias que se pueden iniciar, por motivos de control de costos o para obtener una mejor compatibilidad con otros recursos que usa el servicio. Por ejemplo, el servicio de Cloud Run puede interactuar con una base de datos que solo puede manejar una cantidad determinada de conexiones abiertas simultáneas.
Puedes usar la configuración de un máximo de instancias para limitar la cantidad total de instancias que se pueden iniciar en paralelo, como se indica en Configura una cantidad máxima de instancias.
Consumo superior a la cantidad máxima de instancias
En circunstancias normales, la revisión se escala horizontalmente mediante la creación de instancias nuevas para controlar la carga de tráfico entrante. Sin embargo, cuando estableces un límite máximo de instancias, en algunas situaciones, no habrá suficientes instancias para poder manejar esa carga de tráfico. En ese caso, las solicitudes entrantes se ponen en cola (pendientes) de la siguiente manera:
- Si se inician instancias nuevas, como durante un escalamiento horizontal, las solicitudes admitirán al menos el tiempo de inicio promedio de las instancias de contenedor de este servicio. Esto incluye el momento en que la solicitud inicia un escalamiento horizontal, como cuando escalas desde cero.
- Si el tiempo de inicio es inferior a 10 segundos, las solicitudes permanecerán hasta 10 segundos.
- Si no hay instancias en el proceso de inicio y la solicitud no inicia un escalamiento horizontal, las solicitudes se almacenarán hasta por 10 segundos.
Durante este período, si una instancia termina de procesar solicitudes, estará disponible para procesar las solicitudes pendientes en cola.
Si no hay instancias disponibles durante el período, la solicitud falla con un código de error 429
.
Garantías de escalamiento
El límite máximo de instancias es un límite superior por revisión y significa que la cantidad de instancias para esta revisión no debe exceder el máximo.
En circunstancias normales, Cloud Run puede escalar horizontalmente hasta el límite máximo de instancias muy rápido para controlar todas las solicitudes o los eventos entrantes. Sin embargo, establecer un límite alto no significa que la revisión podrá escalar horizontalmente hasta la cantidad especificada de instancias en un momento determinado. En circunstancias excepcionales, Cloud Run puede limitar el escalamiento para garantizar un buen servicio para todos los clientes.
Se excedió la cantidad máxima de instancias debido a los aumentos repentinos de tráfico
En algunos casos, como picos de tráfico rápidos o mantenimiento del sistema, Cloud Run podría crear, durante un período breve, más instancias de las que se especifican en la configuración de instancias máximas. Las instancias nuevas se pueden iniciar en exceso de la configuración de instancias máximas para reemplazar las instancias existentes y proporcionar un período de gracia para que las solicitudes en tránsito terminen de procesarse.
El límite máximo de instancias se puede superar en las operaciones normales algunas veces a la semana. Por lo general, el período de gracia dura hasta 15 minutos o hasta el valor especificado en la configuración de tiempo de espera de la solicitud. Estas instancias adicionales se destruyen en un plazo de 15 minutos después de que quedan inactivas.
Si se necesitan muchos reemplazos, las actualizaciones suelen distribuirse durante muchos minutos o incluso horas, pero cada reemplazo tiene un exceso de instancia solo durante el período de gracia. Las instancias que excedan el valor máximo de instancia suelen ser menos del doble del límite máximo de instancias configuradas, pero pueden ser mucho más grandes para los aumentos de tráfico repentinos.
Las pruebas de carga experimentan más instancias que exceden la configuración máxima porque el sistema puede cambiar dónde se entregan los picos de tráfico para conservar la capacidad de las cargas de trabajo existentes que tienen patrones de carga sostenidos.
Si tu servicio no puede tolerar este comportamiento temporal, se recomienda incluir un margen de seguridad y reducir la cantidad de instancias máximas permitidas.
Divisiones de tráfico
Debido a que el límite máximo de instancias es un límite para cada revisión, si el servicio divide el tráfico entre varias revisiones, la cantidad total de instancias del servicio puede exceder la cantidad máxima de instancias. por revisión. Esto se puede observar en las métricas de recuento de instancias.
Implementaciones
Cuando implementas una revisión nueva para entregar el 100% del tráfico, Cloud Run inicia suficientes instancias de la revisión nueva antes de dirigir el tráfico a ella. Esto reduce el impacto de las implementaciones de revisión nuevas en las latencias de solicitud, en especial cuando se entregan niveles altos de tráfico. Debido a que el límite máximo de instancias es un límite para cada revisión, durante una implementación, la cantidad total de instancias del servicio puede exceder el máximo de instancias por revisión. Esto se puede observar en las métricas de recuento de instancias.
Instancias inactivas y minimización de inicios en frío
Cloud Run no cierra las instancias de inmediato una vez que terminan de controlar todas las solicitudes. Para minimizar el impacto de los inicios en frío, Cloud Run puede mantener algunas instancias inactivas durante un máximo de 15 minutos. Estas instancias están listas para manejar solicitudes en caso de un aumento repentino de tráfico.
Por ejemplo, cuando una instancia termina de controlar las solicitudes, puede permanecer inactiva por un tiempo en caso de que se necesite controlar otra solicitud. Una instancia inactiva puede conservar recursos, como conexiones de bases de datos abiertas. Ten en cuenta que la CPU solo se asigna durante el procesamiento de solicitudes, a menos que configures de forma explícita tu servicio para que tenga CPU asignada siempre.
Para mantener las instancias inactivas de forma permanente, usa la configuración min-instance
. Ten en cuenta que usar esta función generará costos incluso cuando el servicio no entregue solicitudes de forma activa.
Ajuste de escala automático y solicitudes pendientes
- Si se inician instancias nuevas, como durante un escalamiento horizontal, las solicitudes admitirán al menos el tiempo de inicio promedio de las instancias de contenedor de este servicio. Esto incluye el momento en que la solicitud inicia un escalamiento horizontal, como cuando escalas desde cero.
- Si el tiempo de inicio es inferior a 10 segundos, las solicitudes permanecerán hasta 10 segundos.
- Si no hay instancias en el proceso de inicio y la solicitud no inicia un escalamiento horizontal, las solicitudes se almacenarán hasta por 10 segundos.
Impacto del ajuste de escala automático en los servicios de copia de seguridad
A medida que la cantidad de instancias aumenta de automáticamente, tu servicio de Cloud Run puede encontrar límites con sus servicios de copia de seguridad. Por ejemplo, Cloud SQL tiene un límite de cuota de la API. Asegúrate de que estos servicios de copia de seguridad tengan suficiente cuota y puedan manejar conexiones desde todas las instancias de tu servicio de Cloud Run. Considera configurar una cantidad máxima de instancias para evitar sobrecargar los servicios de copia de seguridad.
Ajuste de escala automático y Pub/Sub
Google recomienda usar suscripciones de envío para consumir mensajes de un tema de Pub/Sub en Cloud Run. El contenedor recibe mensajes enviados, como solicitudes HTTP, lo que activa el mismo comportamiento de ajuste de escala automático.
¿Qué sigue?
- Para administrar la cantidad máxima de instancias de los servicios de Cloud Run, consulta Configura una cantidad máxima de instancias.
- Para administrar la cantidad máxima de solicitudes simultáneas controladas por cada instancia, consulta Configura la simultaneidad.
- Si deseas optimizar la configuración de simultaneidad, consulta las sugerencias de desarrollo para ajustar la simultaneidad.
- Si quieres especificar que una instancia inactiva se siga ejecutando a fin de minimizar la latencia o los inicios en frío en las primeras solicitudes, consulta Usa
min-instance
para habilitar instancias inactivas.