Cloud Tasks te permite compilar sistemas asíncronos resilientes cuando diseñas para comportamientos de ejecución de colas y límites de servicio específicos. Puedes evitar cuellos de botella en el procesamiento y retrasos inesperados si tienes en cuenta la entrega de al menos una vez, la limitación del sistema y la capacidad del recurso objetivo.
Orden de ejecución
A excepción de las tareas programadas para ejecutarse en el futuro, las listas de tareas en cola son completamente independientes de la plataforma en cuanto al orden de ejecución. No se garantiza ni se intenta ejecutar las tareas en un orden específico. Específicamente, no hay garantías de que se ejecuten las tareas antiguas, a menos que se vacíe por completo una cola. Existen varios casos comunes en los que las tareas más recientes se ejecutan antes que las más antiguas, y los patrones que rodean esto pueden cambiar sin previo aviso.
Retraso de ejecución
En ocasiones, las ejecuciones de Cloud Tasks pueden experimentar retrasos menores, que suelen durar unos minutos, debido a reinicios internos del sistema. Las tareas se retrasan, pero no se pierde ninguna. Estos son eventos a nivel del sistema que no tienen solución alternativa. Estos eventos no se registran y su ocurrencia no tiene un cronograma establecido.
Ejecución duplicada
Cloud Tasks tiene como objetivo una semántica estricta de "ejecutar exactamente una vez". Sin embargo, en situaciones en las que se debe elegir entre la ejecución garantizada y la ejecución duplicada, el servicio se inclina por la ejecución garantizada. Por tanto, es inevitable que algunas tareas se ejecuten por duplicado. Asegúrate de que tu app controle las ejecuciones duplicadas de forma correcta para que no provoquen fallas inesperadas. En producción, más del 99.999% de las tareas se ejecutan solo una vez.
Limitaciones de recursos
La fuente más común de trabajos pendientes en las colas de procesamiento inmediato es el agotamiento de recursos en las instancias de destino. Si intentas ejecutar 100 tareas por segundo en instancias de frontend que solo pueden procesar 10 solicitudes por segundo, se genera una acumulación. Por lo general, esto se manifiesta de una de dos maneras, que se pueden resolver aumentando la cantidad de instancias que procesan las solicitudes.
Errores de retirada y frecuencias forzadas
Los servidores que se sobrecargan pueden comenzar a mostrar errores de retirada: HTTP 503
(para destinos de App Engine) o HTTP 429 o 5xx (para destinos externos).
Cloud Tasks reacciona a estos errores ralentizando la ejecución hasta que
se detengan. Esta limitación del sistema evita que el trabajador se sobrecargue. No se modificará
tu configuración.
La limitación del sistema se produce en las siguientes circunstancias:
Cloud Tasks se detiene ante todos los errores. Normalmente, Cloud Tasks usa la retirada especificada en
retry_config. Sin embargo, si el trabajador devuelve respuestas de error HTTP429 Too Many Requests,503 Service Unavailableo5xx, o si la tasa de errores es alta, Cloud Tasks aplica una tasa de envío más baja y considera el retraso de reintento especificado en el encabezado de respuesta HTTPRetry-After. Después de que se detienen los errores y los controladores de destino devuelven respuestas HTTP2xx, la cola aumenta gradualmente su tasa de envío aplicada.Para evitar los aumentos repentinos de tráfico y suavizar los aumentos repentinos de carga, Cloud Tasks aumenta gradualmente los envíos cuando se crea una cola nueva, se reanuda después de pausarse o se inactiva después de unos minutos sin envíos activos. Este aumento también se produce cuando una gran cantidad de tareas está disponible de repente para su envío, como durante los aumentos repentinos de creación de tareas o cuando se programan muchas tareas para el mismo momento. Desde un estado inactivo o en frío, Cloud Tasks comienza a enviar a una tasa de referencia baja y aumenta de forma progresiva la tasa de envío aplicada en intervalos de evaluación periódicos. La tasa sigue aumentando hacia la tasa
max_dispatches_per_secondconfigurada, siempre que la demanda de la cola permanezca saturada y los controladores de destino devuelvan respuestas HTTP2xx. Para obtener más información sobre el aumento de actividad en frío o inactivo y la administración de las colas reanudadas, consulta Aumento de actividad inicial de la cola y Sobrecarga de destino.
Picos de latencia y máximo simultáneo
Los servidores sobrecargados también pueden responder con grandes aumentos en la latencia.
En esta situación, las solicitudes permanecen abiertas durante más tiempo. Dado que las colas se ejecutan con un máximo de solicitudes simultáneas, esto puede impedir que las colas puedan ejecutar tareas con la frecuencia prevista. Aumentar el valor de max_concurrent_dispatches para las colas afectadas puede ayudar en situaciones en las que el valor se estableció demasiado bajo, lo que introduce un límite de frecuencia artificial. Sin embargo, es poco probable que aumentar
max_concurrent_dispatches alivie la presión de los recursos
subyacentes.
Problemas de aumento de actividad con tareas de larga duración
Las colas de Cloud Tasks aumentan su resultado, en parte, según la cantidad de tareas enviadas con éxito anteriormente. Si el controlador de tareas tarda un período considerable (del orden de minutos) en completar una tarea y devolver una respuesta de éxito, puede haber un retraso en la tasa de aumento de la cola.
Visualiza más de 5,000 tareas
Si tienes más de 5,000 tareas, algunas no se verán en la consola deGoogle Cloud . Usa la gcloud CLI para ver todas las tareas.
Métrica de profundidad máxima de la cola informada
La métrica de profundidad máxima de la cola que informa Cloud Tasks tiene un límite de 1,000,000 de tareas. Esto tiene como objetivo mejorar el rendimiento de los trabajadores de tareas subyacentes y no afecta la cantidad de tareas que se pueden enviar a tu cola o que esta puede procesar. Las tareas que se envían a la cola por encima del límite de profundidad de la cola se siguen ejecutando según lo previsto.
Para recuperar la profundidad actual de la cola más allá de 1,000,000 de tareas, puedes usar el
método queues.tasks.list.
Este método devuelve todas las tareas con paginación, lo que te permite agregar los datos
y realizar una operación de recuento. Sin embargo, según el tamaño de la profundidad de la cola, el
método puede encontrar restricciones de cuota.
Vuelve a crear una cola con el mismo nombre
Borrar una cola borra de forma permanente e irreversible todas las tareas de la cola, incluidas las tareas programadas y las tareas que esperan para ejecutarse o reintentarse. Ni tú ni la Atención al cliente de Cloud pueden recuperar las colas o tareas borradas.
Después de borrar una cola, debes esperar 3 días para volver a crearla con el mismo nombre. Este período de espera evita el comportamiento inesperado en las tareas que se ejecutan en el momento de la eliminación y evita las fallas de los procesos internos durante el ciclo de eliminación y recreación. El período de espera se aplica a las colas borradas a través de cualquier interfaz, incluidas la consola de Google Cloud , gcloud CLI, la API de REST o RPC, o Terraform.
Durante este período de hasta 3 días, es posible que una solicitud de creación de cola
parezca tener éxito sin volver a crear la cola, y que falle la carga de un
archivo queue.yaml que incluya el nombre de la cola
borrada. Para confirmar que se volvió a crear una cola con el mismo nombre,
recupérala con el comando
gcloud tasks queues describe
o el método
projects.locations.queues.get. Una respuesta correcta (200 OK) confirma que se volvió a crear la cola.
Para borrar tareas o modificar una cola sin perderla ni activar el
período de espera de 3 días, borra definitivamente todas las tareas de la
cola, actualiza la cola en
su lugar o pausa la
cola en lugar de borrarla y
volver a crearla. Si administras colas con Terraform, establece prevent_destroy = true
en el bloque lifecycle para evitar que se borren colas de forma accidental.
Destino no admitido cuando se usa un perímetro seguro
Si configuraste un perímetro seguro con los Controles del servicio de VPC, las solicitudes HTTP de una
ejecución de Cloud Tasks se bloquean para los destinos no compatibles y
fallan con un código de error TARGET_TYPE_NOT_PERMITTED_FOR_VPC. Para obtener más
información, consulta Configura un perímetro de servicio con
los Controles del servicio de VPC.
Restricciones de ubicaciones de recursos
Cloud Tasks admite la restricción de ubicaciones de recursos. Sin embargo, se aplican limitaciones a las siguientes regiones:
us-central1us-central2(región privada de Google Cloud )
Si especificas cualquiera de las regiones en la política de la organización, debes incluir us-central1 y us-central2, incluso si no creas recursos de Cloud Tasks en ambas regiones. Puedes incluir la región
us-central2 en la política de la organización, incluso si esta no usa
regiones privadas.