Cloud Tasks te permite compilar sistemas asíncronos resistentes cuando diseñas para comportamientos de ejecución de colas y límites de servicio específicos. Puedes evitar cuellos de botella de procesamiento y demoras inesperadas si tienes en cuenta la entrega al menos una vez, la limitación del sistema y la capacidad de recursos de destino.
Orden de ejecución
Salvo por las tareas programadas para ejecutarse en el futuro, las colas de tareas son completamente independientes de la plataforma en cuanto al orden de ejecución. No se garantiza ni se intenta que las tareas se ejecuten en ningún orden en particular. Específicamente, esto implica que no existe garantía alguna de que las tareas más antiguas vayan a ejecutarse, a menos que se vacíe por completo la cola. Existen algunos casos comunes en los que las tareas más nuevas se ejecutan antes que las más antiguas, y los patrones relacionados con estos casos pueden cambiar sin previo aviso.
Retraso de ejecución
Las ejecuciones de Cloud Tasks pueden experimentar ocasionalmente retrasos menores, que suelen durar unos minutos, debido a reinicios internos del sistema. Las tareas se retrasan, pero no se pierden. Estos son eventos a nivel del sistema sin 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, hay situaciones en las que no es posible garantizar que todas las tareas se ejecuten sin correr el riesgo de que alguna tarea se ejecute dos veces. En esos casos, el servicio prefiere errar del lado de la ejecución garantizada. Por tanto, es inevitable que algunas tareas se ejecuten por duplicado. Debes asegurarte de que las ejecuciones duplicadas se controlen correctamente y no causen fallas inesperadas. En producción, más del 99.999% de las tareas se ejecuta solo una vez.
Limitaciones de recursos
La fuente más común de tareas pendientes en las colas de procesamiento inmediato es el agotamiento de los recursos de las instancias objetivo. Si intentas ejecutar 100 tareas por segundo en instancias de front-end que solo pueden ejecutar 10 solicitudes por segundo, se generará una pila de trabajo pendiente. Por lo general, esto se manifiesta de una de dos maneras, pero ambas pueden resolverse generalmente aumentando la cantidad de instancias que procesan las solicitudes.
Errores de retirada y frecuencias forzadas
Los servidores que están sobrecargados pueden comenzar a mostrar errores de retirada: HTTP 503 (para destinos de App Engine) o HTTP 429 o 5xx (para destinos externos).
La reacción de Cloud Tasks ante esta situación será disminuir la velocidad de la ejecución hasta que dejen de producirse errores. Esta limitación del sistema evita que el trabajador se sobrecargue. Ten en cuenta que la configuración no se cambia.
La limitación del sistema ocurre en las siguientes circunstancias:
Cloud Tasks se retira en todos los errores. Por lo general, se usa la retirada especificada en
rate_limitsSin embargo, si el trabajador muestra HTTP429 Too Many Requests,503 Service Unavailableo la tasa de errores es alta, Cloud Tasks usa una tasa de retirada más alta. Se considera el reintento especificado en el encabezado de respuesta HTTPRetry-After.Para evitar los aumentos repentinos de tráfico y suavizar los aumentos repentinos de tráfico, los despachos aumentan lentamente cuando la cola se crea o está inactiva recientemente, y si una gran cantidad de tareas de repente están disponibles para el despacho (debido a aumentos repentinos en las tasas de creación de tareas, la cola se reanuda o muchas tareas programadas al mismo tiempo).
Picos de latencia y máximo simultáneo
Cuando se sobrecargan, los servidores 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 se genera un límite de frecuencia artificial debido a que el valor es muy
bajo. Sin embargo, es poco probable que aumentar max_concurrent_dispatches pueda aliviar la presión subyacente sobre los recursos.
Problemas de aumento con tareas de larga duración
Las colas de Cloud Tasks aumentan su producción en parte según la cantidad de tareas despachadas anteriormente que se completaron correctamente. Si el controlador de tareas tarda un período considerable (del orden de minutos) en completar una tarea y mostrar una respuesta correcta, puede haber un retraso en la tasa de aumento de la cola.
Cómo ver más de 5,000 tareas
Si tienes más de 5,000 tareas, algunas no se verán en la Google Cloud consola. Usa 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 está limitada a 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 enviadas a la cola por encima del límite de profundidad de la cola seguirán ejecutándose según lo previsto.
Para recuperar la profundidad actual de la cola más allá de 1,000,000 de tareas, puedes usar el
queues.tasks.list método.
Este método muestra 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 podría encontrar restricciones de cuota.
Cómo volver a crear una cola con el mismo nombre
Si borras una cola de la Google Cloud consola, debes esperar 3 días para volver a crearla con el mismo nombre. Este período de espera evita un comportamiento inesperado en las tareas que se ejecutan en el momento de la eliminación o que esperan ejecutarse. También evita fallas internas en el proceso del ciclo de eliminación o recreación.
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 bloquearán para los destinos no admitidos y fallarán 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 Google Cloud )
Si especificas alguna de las regiones en la política de tu 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 tu organización, incluso si tu organización no usa regiones privadas.