Cloud Tasks te permite administrar la ejecución de tareas mediante la definición del enrutamiento a nivel de la cola
, los límites de frecuencia de envío y
el comportamiento de reintento. Puedes configurar estos parámetros cuando creas una cola o actualizas una existente. Las marcas de configuración que usan
gcloud tasks queues create o
gcloud tasks queues update son
idénticas.
La configuración de la autenticación a nivel de la cola anula la autenticación a nivel de la tarea. Para obtener más información, consulta Usa tareas de destino HTTP con tokens de autenticación.
Configura el enrutamiento a nivel de la cola
La configuración del enrutamiento a nivel de la cola anula el enrutamiento establecido a nivel de la tarea. Esto es útil si deseas usar Cloud Tasks como un búfer frente a tu servicio de destino o si necesitas cambiar el enrutamiento para todas las tareas de una cola.
El enrutamiento a nivel de la cola se aplica a lo siguiente:
- Tareas que están en la cola
- Tareas que se agregan a la cola después de que se establece el enrutamiento a nivel de la cola
Limitaciones
El enrutamiento a nivel de la cola no es compatible con las claves de encriptación administradas por el cliente (CMEK) de Cloud Key Management Service (Cloud KMS). Si CMEK está habilitado, no puedes hacer lo siguiente:
- Crear tareas en una cola que tenga enrutamiento a nivel de la cola
- Aplicar el enrutamiento a nivel de la cola
Configura el enrutamiento a nivel de la cola para tareas HTTP
Puedes configurar una cola para anular el enrutamiento a nivel de la tarea cuando creas o actualizas la cola. Para configurar la planificación de ruta a nivel de la cola, establece el parámetro uriOverride de la cola en la ruta preferida.
Si aplicas el enrutamiento a nivel de la cola como una actualización a una cola existente, pausa la cola antes de aplicar los cambios y espera un minuto después de aplicar los cambios para reanudar la cola.
Para pausar la cola ejecuta el siguiente comando:
gcloud tasks queues pause QUEUE_ID
Reemplaza
QUEUE_IDpor el ID de tu cola.Actualiza o quita el enrutamiento a nivel de la cola.
Para actualizar el enrutamiento a nivel de la cola, establece el
uriOverrideparámetro en la ruta actualizada.Para quitar el enrutamiento a nivel de la cola con la API de REST o RPC, haz lo siguiente:
API de REST: Envía una
patchsolicitud para la cola con una carga útil vacía y el parámetroupdateMaskestablecido enhttpTarget.API de RPC: Envía una
updateQueueRequestpara la cola con una carga útil vacía y el parámetroupdate_maskestablecido enhttp_target.
En el siguiente ejemplo, se usa la API de REST para actualizar el host al que se enrutan las tareas:
curl -X PATCH -d @- -i \ -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID?updateMask=httpTarget.uriOverride" << EOF { "httpTarget": {"uriOverride":{"host":"NEW_HOST"}} } EOFReemplaza lo siguiente:
ACCESS_TOKEN: Es tu token de acceso. Para obtenerlo, ejecuta lo siguiente en tu terminal:gcloud auth application-default login gcloud auth application-default print-access-token
PROJECT_ID: Es el ID de tu Google Cloud proyecto. Para obtenerlo, ejecuta lo siguiente en tu terminal:gcloud config get-value project
LOCATION: Es la ubicación de tu cola.NEW_HOST: Es el nuevo host al que deseas que se enrute tu cola.
Espera un minuto.
La nueva configuración puede tardar hasta un minuto en entrar en vigencia. Esperar para reanudar la cola ayuda a evitar que las tareas se envíen con la configuración anterior.
Para reanudar la cola, ejecuta el siguiente comando:
gcloud tasks queues resume QUEUE_ID
Configura el enrutamiento a nivel de la cola para tareas de App Engine
Para configurar el enrutamiento a nivel de la cola para tareas de App Engine, establece el parámetro
appEngineRoutingOverride
de la cola en el servicio y la versión de App Engine que prefieras.
Configura el enrutamiento a nivel de la cola y anula cualquier enrutamiento a nivel de la tarea:
gcloud tasks queues update QUEUE_ID \ --routing-override=service:SERVICE,version:VERSION
Reemplaza lo siguiente:
QUEUE_ID: Es el ID de la cola (su nombre corto).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 para que maneje todas las tareas de una cola, puedes enrutar a ese servicio y a la versión predeterminada:
gcloud tasks queues update QUEUE_ID \ --routing-override=service:SERVICE
Para verificar que la cola se configuró correctamente, ejecuta el siguiente comando:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Reemplaza
LOCATIONpor la ubicación de la cola.El resultado debería ser similar al siguiente ejemplo:
appEngineRoutingOverride: host: SERVICE.PROJECT_ID.appspot.com service: SERVICE name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID rateLimits: maxBurstSize: 100 maxConcurrentDispatches: 1000 maxDispatchesPerSecond: 500.0 retryConfig: maxAttempts: 100 maxBackoff: 3600s maxDoublings: 16 minBackoff: 0.100s state: RUNNING
Para quitar el enrutamiento a nivel de la cola, ejecuta el siguiente comando:
gcloud tasks queues update QUEUE_ID \ --clear-routing-override
Cuando se quita el enrutamiento a nivel de la cola, se aplica el enrutamiento a nivel de la tarea a las tareas de la cola y a las tareas que se agreguen a la cola en el futuro.
Define límites de frecuencia
El límite de frecuencia determina la frecuencia máxima con la que una cola puede enviar tareas, independientemente de si el envío es un primer intento de tarea o un reintento.
Para configurar la frecuencia máxima y la cantidad de tareas simultáneas que puede enviar una cola, ejecuta el siguiente comando:
gcloud tasks queues update QUEUE_ID \ --max-dispatches-per-second=DISPATCH_RATE \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Reemplaza lo siguiente:
QUEUE_ID: Es el ID de la cola (su nombre corto).DISPATCH_RATE: Es la frecuencia de envío. Esta es la frecuencia con la que se actualizan los tokens en el bucket. En condiciones en las que hay un flujo de tareas relativamente constante, esto equivale a la frecuencia con la que se envían las tareas.MAX_CONCURRENT_DISPATCHES: Es la cantidad máxima de tareas en la cola que se pueden ejecutar a la vez.
Por ejemplo, si creaste una cola sin configurar ningún parámetro, puedes actualizar la cantidad máxima de tareas simultáneas con el siguiente comando:
gcloud tasks queues update QUEUE_ID \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Para verificar que la cola se configuró correctamente, ejecuta el siguiente comando:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Reemplaza
LOCATIONpor la ubicación de la cola.El resultado debería ser similar al siguiente ejemplo:
name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID rateLimits: maxBurstSize: 100 maxConcurrentDispatches: MAX_CONCURRENT_DISPATCHES maxDispatchesPerSecond: 500.0 retryConfig: maxAttempts: 100 maxBackoff: 3600s maxDoublings: 16 minBackoff: 0.100s state: RUNNING
Métodos para definir las frecuencias de procesamiento de la cola
Puedes definir las frecuencias de procesamiento de la cola con la API de Cloud Tasks o subiendo un archivo queue.yaml. Ambos métodos generan colas que usan el mismo mecanismo subyacente.
En ambos casos, la cola usa el bucket de tokens algoritmo para controlar la frecuencia de ejecución de la tarea. Cada cola con nombre 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 se agotan los tokens del bucket. El sistema rellena el bucket con tokens nuevos de forma continua según la frecuencia max_dispatches_per_second que especificaste para la cola. Si tu cola contiene tareas para procesar y el bucket de la cola contiene tokens, el sistema procesa de forma simultánea tantas tareas como tokens haya, hasta el valor max_concurrent_dispatches que hayas establecido.
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 HTTP 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_secondmax_concurrent_dispatches
El sistema calcula un tercer campo,
max_burst_size, según el valor que establezcas paramax_dispatches_per_second. Para obtener más información, consulta los mensajesRateLimits.Cuando usas el
queue.yamlmétodo, puedes establecer los tres elementos:max_concurrent_requests, que equivale amax_concurrent_dispatchesrate, que equivale amax_dispatches_per_secondbucket_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 establezca max_burst_size produce una tasa muy eficiente para administrar los picos de solicitudes. Sin embargo, en algunos casos, en particular cuando la tasa necesaria es relativamente lenta, usar el método queue.yaml para establecer bucket_size de forma manual en un valor pequeño o establecer max_concurrent_dispatches en un valor pequeño con la API de Cloud Tasks puede brindarte 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. Después de que una tarea se ejecuta correctamente, se quita de la cola. En todos los casos, también se aplica el límite máximo de retención de tareas.
De manera opcional, puedes especificar una configuración de reintento a nivel de la tarea que anule la configuración de reintento a nivel de la cola para la tarea. Para obtener más información, consulta Establece parámetros de reintento para una tarea.
Para especificar la cantidad máxima de veces que se reintentarán las tareas fallidas en la cola, establecer un límite de tiempo para los intentos de reintento y controlar el intervalo entre los intentos, ejecuta el siguiente comando:
gcloud tasks queues update QUEUE_ID \ --max-attempts=MAX_ATTEMPTS \ --max-retry-duration=MAX_RETRY_DURATION \ --min-backoff=MIN_INTERVAL \ --max-backoff=MAX_INTERVAL \ --max-doublings=MAX_DOUBLINGS
Reemplaza lo siguiente:
QUEUE_ID: Es el ID de la cola (su nombre corto).MAX_ATTEMPTS: Es la cantidad máxima de intentos para una tarea, incluido el primero. Para permitir una cantidad ilimitada de reintentos, configúralo en-1.MAX_RETRY_DURATIONse sigue aplicando incluso si se alcanzaMAX_ATTEMPTSo se establece en-1.MAX_RETRY_DURATION: Es la cantidad máxima de tiempo para reintentar una tarea fallida, medida desde la primera vez que se intentó la tarea. El valor debe ser una cadena que termine en “s”, como5s. Para especificar una duración ilimitada, configúralo en0s.MAX_ATTEMPTSse sigue aplicando incluso si se alcanzaMAX_RETRY_DURATIONo se establece en0s.
MIN_INTERVAL: Es la cantidad mínima de tiempo que se debe esperar entre los intentos de reintento. El valor debe ser una cadena que termine en “s”, como5s.MAX_INTERVAL: Es la cantidad máxima de tiempo que se debe esperar entre los intentos de reintento. El valor debe ser una cadena que termine en “s”, como5s.MAX_DOUBLINGS: Es la cantidad máxima de veces que se duplicará el intervalo entre los reintentos de tareas fallidas antes de que el aumento se vuelva constante. El intervalo de reintento de una tarea comienza enMIN_INTERVAL, luego se duplicaMAX_DOUBLINGSveces, después aumenta linealmente y, por último, reintenta en intervalos deMAX_INTERVALhastaMAX_ATTEMPTSlograr la cantidad máxima de reintentos.Por ejemplo, si
MIN_INTERVALes10s,MAX_INTERVALes300syMAX_DOUBLINGSes3, el intervalo de reintento se duplicará3veces, aumentará linealmente en 2^3 * 10 s y, luego, se reintentará en intervalos deMAX_INTERVALhasta que la tarea se haya intentadoMAX_ATTEMPTSveces: 10 s, 20 s, 40 s, 80 s, 160 s, 240 s, 300 s, 300 s, etcétera.
Para obtener más detalles sobre los parámetros, consulta la
RetryConfig configuración para el Queue recurso.
Para verificar que la cola se configuró correctamente, ejecuta el siguiente comando:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Reemplaza
LOCATIONpor la ubicación de la cola.El resultado debe contener los parámetros de reintento que estableciste.
¿Qué sigue?
- Obtén información para crear tareas de destino HTTP.
- Obtén información para crear tareas de App Engine.
- Obtén más información acerca de la administración de colas en la referencia de la API de RPC.
- Obtén más información acerca de la administración de colas en la referencia de la API de REST.