En esta página, se describe cómo configurar colas de Cloud Tasks con el comando gcloud
de Google Cloud CLI.
Configura la cola de Cloud Tasks
Puedes configurar tu cola de Cloud Tasks cuando crees la cola o en cualquier momento posterior, y la configuración se aplicará a todas las tareas en esa cola.
La configuración de las colas tiene tres aspectos básicos:
Configura el enrutamiento (solo colas de App Engine)
La cola necesita conocer el nombre y la versión del servicio que contiene el trabajador adecuado. Esto es lo que se denomina el objetivo. Hay tres maneras de configurarlo:
- No configurar el objetivo explícitamente. En este caso, se usa el servicio predeterminado.
- Para declarar explícitamente el destino en la tarea, configura AppEngineRouting en AppEngineHttpRequest. Este es el método preferido si deseas usar un objetivo distinto del predeterminado.
- Enruta todas las tareas de una cola de forma explícita a un objetivo no predeterminado mediante appEngineRouterOverride Este método anula los datos de configuración que estén configurados en la tarea en sí.
Si quieres usar gcloud
para configurar este enrutamiento no predeterminado a nivel de la cola y, por lo tanto, anular cualquier enrutamiento a nivel de tarea, sigue estos pasos:
gcloud tasks queues update [QUEUE_ID] \
--routing-override=service:[SERVICE],version:[VERSION]
Donde:
SERVICE
es el servicio trabajador de App Engine responsable de manejar las tareas.VERSION
es la versión de la app.
Por ejemplo, si configuras un servicio trabajador llamado worker
para que maneje todas las tareas de una cola llamada barbequeue
, puedes enrutar a ese servicio y a la versión predeterminada con la siguiente llamada:
gcloud tasks queues update barbequeue \
--routing-override=service:worker
Describe
la cola:
gcloud tasks queues describe barbequeue
El resultado debería ser algo como lo siguiente:
appEngineRoutingOverride:
host: worker.[PROJECT_ID].appspot.com
service: worker
name: projects/[PROJECT_ID]/locations/[LOCATION_ID]/queues/barbequeue
rateLimits:
maxBurstSize: 100
maxConcurrentDispatches: 1000
maxDispatchesPerSecond: 500.0
retryConfig:
maxAttempts: 100
maxBackoff: 3600s
maxDoublings: 16
minBackoff: 0.100s
state: RUNNING
Quita el enrutamiento:
gcloud tasks queues update [QUEUE_ID] \
--clear-routing-override
Define límites de frecuencia
Puedes configurar valores máximos para la frecuencia y la cantidad de tareas simultáneas que puede enviar una cola.
gcloud tasks queues update [QUEUE_ID] \
--max-dispatches-per-second=[DISPATCH_RATE] \
--max-concurrent-dispatches=[MAX_RUNNING]
Donde:
DISPATCH_RATE
es la velocidad a la que se actualizan los tokens en el depósito. En condiciones en las que hay un flujo de tareas relativamente estable, este es el equivalente a la frecuencia con la que se envían las tareas.MAX_RUNNING
es la cantidad máxima de tareas de la cola que pueden ejecutarse a la vez.
Por ejemplo, si creaste una cola llamada barbequeue
sin configurar ningún parámetro, puedes actualizar la cantidad máxima de tareas simultáneas con la siguiente llamada:
gcloud tasks queues update barbequeue \
--max-concurrent-dispatches=20
Describe
la cola:
gcloud tasks queues describe barbequeue
El resultado debería ser el siguiente:
name: projects/[PROJECT_ID]/locations/[LOCATION_ID]/queues/barbequeue
rateLimits:
maxBurstSize: 100
maxConcurrentDispatches: 20
maxDispatchesPerSecond: 500.0
retryConfig:
maxAttempts: 100
maxBackoff: 3600s
maxDoublings: 16
minBackoff: 0.100s
state: RUNNING
Define las tasas de procesamiento mediante los comandos de gcloud
en comparación con queue.yaml
El enfoque de la API de Cloud Tasks para definir las tasas de procesamiento de colas difiere levemente del enfoque tomado con la carga de archivos queue.yaml
, a pesar de que ambos métodos generan colas con el mismo mecanismo subyacente.
En ambos casos, la cola usa el algoritmo de bucket de tokens para controlar la velocidad de ejecución de las tareas. Cada cola nombrada tiene un bucket que contiene sus tokens.
Cada vez que la aplicación ejecuta una tarea, se quita un token del bucket.
La cola continúa procesando tareas hasta que su bucket se queda sin tokens. El sistema vuelve a llenar el bucket con tokens nuevos de forma continua según la frecuencia de max_dispatches_per_second
que especifiques para la cola. Si tu cola contiene tareas para procesar y el bucket contiene colas, el sistema procesa simultáneamente tantas tareas como haya tokens, hasta el valor max_concurrent_dispatches
que configuraste.
La carga desigual puede permitir que la cantidad de tokens en el bucket crezca de manera significativa, lo que puede generar picos de actividad de procesamiento cuando llega un pico de solicitudes. En este caso, tu cola puede experimentar una tasa de envío real que supere tu tasa de max_dispatches_per_second
, lo que consume recursos del sistema y compite con las solicitudes de servicio del usuario. En los casos en que usas colas para administrar las tasas de envío basadas en ANS relativamente lentas para servicios descendentes, esto puede generar errores como HTTP 429
(Demasiadas solicitudes) o 503
(Servicio no disponible).
Cuando usas cualquier método de la API de Cloud Tasks, tienes dos campos para definir la frecuencia de envío de las colas:
max_dispatches_per_second
max_concurrent_dispatches
como se muestra en el ejemplo anterior. El sistema calcula un tercer campo, max_burst_size
, según el valor que configuraste para max_dispatches_per_second
.
Cuando usas el método queue.yaml
, puedes establecer los tres elementos:
max_concurrent_requests
, que equivale amax_concurrent_dispatches
rate
, que equivale amax_dispatches_per_second
bucket_size
, que equivale amax_burst_size
En la mayoría de los casos, usar el método de la API de Cloud Tasks y dejar que el sistema configurado max_burst_size
produce una tasa muy eficiente para administrar los picos de solicitudes. Sin embargo, en algunos casos, en especial cuando la tasa deseada es relativamente lenta, ya sea usando el método queue.yaml
para establecer manualmente bucket_size
en un valor pequeño o configurar max_concurrent_dispatches
en un valor pequeño a través de la API de Cloud Tasks puede darte más control.
Configura los parámetros de reintento
Si una tarea no se completa correctamente, Cloud Tasks la reintenta con una retirada exponencial que depende de los parámetros que hayas configurado. Puedes especificar el máximo de veces que se debe reintentar una tarea con errores en la cola, y también puedes configurar un límite de tiempo para los reintentos y un intervalo de espera entre uno y otro.
gcloud tasks queues update [QUEUE_ID] \
--max-attempts=[MAX_ATTEMPTS] \
--min-backoff=[MIN_INTERVAL] \
--max-backoff=[MAX_INTERVAL] \
--max-doublings=[MAX_DOUBLINGS] \
--max-retry-duration=[MAX_RETRY_DURATION]
Donde:
MAX_ATTEMPTS
es la cantidad máxima de intentos de una tarea (incluido el primero). Para permitir una cantidad ilimitada de reintentos, configura la marca enunlimited
unlimited.MIN_INTERVAL
es la cantidad mínima de tiempo que debes esperar entre dos intentos. El valor debe ser una string que termine en "s", como5s
.MAX_INTERVAL
es la cantidad máxima de tiempo que debe esperarse entre dos intentos. El valor debe ser una string que termine en "s", como5s
.MAX_DOUBLINGS
es la cantidad máxima de veces que se duplicará el intervalo entre los reintentos de las tareas con errores antes de que el aumento se vuelva constante.MAX_RETRY_DURATION
es la cantidad máxima de tiempo para reintentar una tarea con errores desde que se intentó por primera vez. El valor debe ser una string que termine en &s, como5s
.
Verifica que tu cola se haya configurado correctamente:
gcloud tasks queues describe [QUEUE_ID]
¿Qué sigue?
- Aprende a crear tareas de destino HTTP.
- Obtén más información sobre cómo crear tareas de App Engine.
- Obtén información sobre cómo configurar Cloud Logging
- Obtén más información acerca de la administración de cuentas en la referencia de API de RPC.
- Obtén más información acerca de la administración de cuentas en la referencia de API de REST.
- Consulta la lista completa de comandos de
gcloud
de Cloud Tasks.