En esta página se describe qué son las colas de tareas y cuándo y cómo usarlas. Las colas de tareas permiten que las aplicaciones realicen tareas de forma asíncrona al margen de las solicitudes de los usuarios. Si una aplicación necesita ejecutar un trabajo en segundo plano, añade tareas a las colas de tareas. Las tareas se ejecutan más tarde mediante servicios de trabajador.
El servicio de colas de tareas está diseñado para el trabajo asíncrono. No ofrece garantías sólidas sobre los tiempos de entrega de las tareas, por lo que no es adecuada para aplicaciones interactivas en las que los usuarios esperan el resultado.
Colas de salida y colas para tareas extraídas
Las colas de tareas se dividen en dos tipos: push y pull. La forma en que el servicio de colas de tareas envía solicitudes de tareas a los servicios de trabajador varía en función de la cola.
Las colas de inserción ejecutan tareas mediante solicitudes HTTP a los servicios de trabajador de App Engine. Envían estas solicitudes a un ritmo fiable y constante, y garantizan la ejecución fiable de las tareas. Como puedes controlar la velocidad a la que se envían las tareas desde la cola, puedes controlar el comportamiento de escalado de los trabajadores y, por lo tanto, los costes.
Como las tareas se ejecutan como solicitudes dirigidas a servicios de App Engine, están sujetas a plazos estrictos. Las tareas gestionadas por los servicios de escalado automático deben finalizar en diez minutos. Las tareas gestionadas por servicios de escalado básico y manual pueden ejecutarse durante un máximo de 24 horas.
Las colas de extracción no envían tareas. Dependen de otros servicios de trabajador para "alquilar" tareas de la cola por iniciativa propia. Las colas de extracción te ofrecen más control y flexibilidad sobre cuándo y dónde se procesan las tareas, pero también requieren que hagas más gestión de procesos. Cuando se arrienda una tarea, el trabajador de arrendamiento declara una fecha límite. Cuando llegue la fecha límite, el trabajador debe completar la tarea y eliminarla. De lo contrario, el servicio de colas de tareas permitirá que otro trabajador la tome prestada.
Todas las tareas de la cola de tareas se realizan de forma asíncrona. La aplicación que crea la tarea la transfiere a la cola. La aplicación de origen no recibe ninguna notificación sobre si la tarea se completa o no, ni sobre si se ha realizado correctamente.
Si un trabajador no puede procesar una tarea, el servicio de colas de tareas proporciona a la cola un mecanismo de reintento para que la tarea se pueda volver a intentar un número finito de veces.
Casos prácticos
Colas de salida
Un caso práctico habitual de las colas de inserción es una operación "lenta". Imagina un sistema de mensajería de una red social. Cada vez que un usuario envía un mensaje, la red debe actualizar los seguidores del remitente. Esta operación puede llevar mucho tiempo. Con una cola push, la aplicación puede poner en cola una tarea por cada mensaje que llegue para enviarlo a un servicio de trabajador para que lo procese. Cuando el trabajador recibe la solicitud de tarea, puede obtener la lista de seguidores del remitente y actualizar la base de datos de cada uno de ellos. El trabajador puede ser aún más eficiente si pone en cola otra tarea push para cada actualización de la base de datos.
Otro uso de las colas de inserción son las tareas programadas. Imagina una aplicación que implementa una campaña publicitaria. Se puede añadir un grupo de tareas escritas para enviar correos a una cola de inserción con instrucciones para retener las tareas hasta una hora específica en el futuro. Cuando llegue la fecha de vencimiento, el servicio de cola de tareas empezará a enviar solicitudes para ejecutar las tareas.
Colas para tareas extraídas
Las colas para tareas extraídas funcionan bien cuando debes agrupar tareas juntas para una ejecución eficiente. Una solución aprovecha la capacidad de adjuntar una etiqueta a una tarea de extracción. Los trabajadores pueden alquilar un grupo de tareas que tengan la misma etiqueta. Un ejemplo típico podría ser una aplicación que mantenga tablas de clasificación de numerosos juegos diferentes, con muchos jugadores y grupos jugando constantemente. Cada vez que se consigue una nueva puntuación alta, la aplicación puede poner en cola una tarea de extracción con la puntuación y el jugador, y usar el ID del juego como etiqueta de tarea. Un trabajador se activa periódicamente, alquila un grupo de tareas con el mismo ID de juego y actualiza la tabla de clasificación. Puedes asignar tareas de forma explícita mediante un valor de etiqueta específico o dejar que el servicio decida qué grupo de tareas con etiquetas similares enviar.
La creación de lotes con etiquetas puede ser muy útil. Como las etiquetas se pueden generar de forma dinámica mientras se ejecuta tu aplicación, un trabajador puede gestionar nuevos IDs de juegos sin ningún esfuerzo especial.
Siguientes pasos
- Consulta información sobre las colas de inserción.
- Consulta información sobre las colas de extracción.