Cómo crear listas de aplicaciones en cola

En esta página, se describe cómo crear y personalizar una lista de aplicaciones en cola y cómo examinar el contenido de una cola.

Cómo usar queue.xml para crear colas

Para procesar una tarea, hay que agregarla a una lista de aplicaciones en cola. App Engine proporciona una lista de aplicaciones en cola predeterminada, default, que está configurada y lista para usar con valores predeterminados. Si quieres, puedes agregar todas tus tareas a la cola predeterminada, sin necesidad de crear ni configurar otras.

Para agregar colas o cambiar la configuración predeterminada, edita el archivo queue.xml correspondiente a tu aplicación, que subirás a App Engine. Se pueden crear hasta 10 colas para aplicaciones gratuitas y hasta 100 para aplicaciones con facturación habilitada. No es posible crear colas de forma dinámica.

Este archivo queue.xml define dos colas:

<?xml version="1.0" encoding="UTF-8"?>
  <queue-entries>
    <queue>
      <name>queue-blue</name>
      <target>v2.task-module</target>
    </queue>
    <queue>
      <name>queue-red</name>
      <rate>1/s</rate>
    </queue>
  </queue-entries>
Para subir el archivo, se usa el SDK de App Engine.

Mac/Linux

[PATH_TO_APP_ENGINE_SDK]\bin\appcfg.sh update [YOUR_APP_DIR]

Windows

[PATH_TO_APP_ENGINE_SDK]\bin\appcfg.cmd update [YOUR_APP_DIR]

Todas las tareas que se agregan a queue-blue se envían al módulo de destino v2.task-module. La frecuencia de actualización de queue-red cambia de 5/s a 1/s. Las tareas se quitarán de la cola y se enviarán a sus destinos con una frecuencia de 1 tarea por segundo.

Si borras una cola, tendrás que esperar aproximadamente 7 días para poder crear otra con el mismo nombre.

Hay muchos otros parámetros que se pueden agregar al archivo queue.xml para personalizar el comportamiento de una lista de aplicaciones en cola. Para obtener más información, consulta la referencia de queue.xml.

Cómo definir la frecuencia de procesamiento de la lista de aplicaciones en cola

Para controlar la frecuencia con la que se procesa cada una de las colas, puedes definir otras directivas, como <rate>, <bucket-size> y <max-concurrent-requests>.

En la lista de tareas en cola, se usan depósitos de token para controlar la frecuencia de ejecución de las tareas. Cada cola nombrada tiene un depósito de token que puede contener hasta el máximo de tokens especificado por bucket_size, o bien hasta 5 tokens si no especificas el tamaño del depósito.

Cada vez que tu aplicación ejecuta una tarea, se quita un token del depósito. Tu app continúa procesando tareas de la cola hasta que el depósito se queda sin tokens. App Engine vuelve a llenar el depósito con tokens nuevos continuamente según el valor de <rate> que se especificó para la cola.

Si hay tareas para procesar en la cola y quedan tokens en el depósito correspondiente, App Engine procesa de forma simultánea la cantidad de tareas que corresponda a los tokens disponibles. Esto puede ocasionar picos de actividad de procesamiento que consumen recursos del sistema y compiten con las solicitudes de servicio del usuario.

Si deseas evitar que se ejecuten muchas tareas a la vez o la contención en el almacén de datos, utiliza <max-concurrent-requests>.

En el ejemplo siguiente, se muestra cómo configurar <max-concurrent-requests> para limitar las tareas y cómo ajustar el tamaño del depósito y la frecuencia en función de las necesidades y los recursos disponibles de tu aplicación:

<?xml version="1.0" encoding="UTF-8"?>
<queue-entries>
  <queue>
    <name>queue-blue</name>
    <rate>20/s</rate>
    <bucket-size>40</bucket-size>
    <max-concurrent-requests>10</max-concurrent-requests>
  </queue>
</queue-entries>

Cómo configurar límites de almacenamiento para todas las colas

Es posible usar queue.xml para definir la cantidad de almacenamiento total que pueden consumir los datos de las tareas entre las distintas colas. Para definir la cantidad de almacenamiento total, hay que incluir un elemento denominado <total-storage-limit> en el nivel superior:

<?xml version="1.0" encoding="UTF-8"?>
<queue-entries>
  <total-storage-limit>120M</total-storage-limit>
  <queue>
    <name>queue-blue</name>
    <rate>35/s</rate>
  </queue>
</queue-entries>

El valor es un número seguido de una unidad: B para bytes, K para kilobytes, M para megabytes, G para gigabytes y T para terabytes. Por ejemplo, 100K indica un límite de 100 kilobytes. Si por el agregado de una tarea, la cola superará su límite de almacenamiento, la llamada para agregar la tarea fallará. El límite predeterminado es 500M (500 megabytes) para las apps gratuitas. En el caso de las apps con facturación, no hay límite hasta que establezcas uno explícitamente. Ese límite se puede usar para proteger la app de errores de programación que produzcan una bomba fork, en la que cada tarea agrega varias tareas más durante su ejecución.

Si tu app recibe errores de cuota insuficiente cuando se agregan tareas, puede ser útil que incrementes el límite de almacenamiento total. Si utilizas esta función, te recomendamos enfáticamente establecer un límite que corresponda al almacenamiento requerido para las tareas de varios días. Esto permite respaldar las colas de manera temporal y seguir aceptando tareas nuevas mientras se realiza el trabajo pendiente, al tiempo que la app se mantiene protegida contra errores de programación que produzcan una bomba fork.

Cómo configurar la cantidad máxima de solicitudes simultáneas

Se puede controlar aún más la frecuencia de procesamiento configurando <max-concurrent-requests>, que limita la cantidad de tareas que se pueden ejecutar al mismo tiempo.

Si la cola de tu aplicación tiene una frecuencia de 20/s y un tamaño de depósito de 40, las tareas de esa cola se ejecutarán a una frecuencia de 20/s y puede haber un pico de actividad de hasta 40/s de forma breve. Esta configuración funciona bien si la latencia de las tareas es relativamente baja. Sin embargo, si la latencia aumenta de manera considerable, se procesarán muchas más tareas de forma simultánea. Esta carga de procesamiento adicional puede consumir instancias adicionales y disminuir la velocidad de la aplicación.

Por ejemplo, supongamos que la latencia normal de las tareas es de 0.3 segundos. Con este valor, se procesarán como máximo 40 tareas en simultáneo. Pero si la latencia de las tareas se incrementa a 5 segundos, no será difícil que se procesen más de 100 tareas al mismo tiempo. Esto hace que la aplicación consuma más instancias para poder procesar las tareas adicionales, con el potencial de disminuir la velocidad de toda la aplicación y de interferir en las solicitudes de los usuarios.

El resultado anterior se puede evitar asignando a <max-concurrent-requests> un valor más bajo. Por ejemplo, si <max-concurrent-requests> se configura en 10, la cola del ejemplo mantendrá aproximadamente 20 tareas por segundo cuando la latencia sea de 0.3 segundos. Sin embargo, cuando la latencia aumente a más de 0.5 segundos, esta configuración regulará la frecuencia de procesamiento para garantizar que no se ejecuten más de 10 tareas al mismo tiempo.

<?xml version="1.0" encoding="utf-8"?>
<queue-entries>
  <queue>
    <name>optimize-queue</name>
    <rate>20/s</rate>
    <bucket-size>40</bucket-size>
    <max-concurrent-requests>10</max-concurrent-requests>
  </queue>
</queue-entries>

Cómo supervisar colas en GCP Console

En la página de listas de tareas en cola de GCP Console, se muestra información sobre todas las listas de tareas de tu aplicación.

  1. Visita la página de lista de tareas en cola en GCP Console y selecciona la pestaña Lista de aplicaciones en cola en la barra de menú en la parte superior.

    Ir a la pestaña Lista de aplicaciones en cola

  2. La pestaña Lista de aplicaciones en cola muestra todas las colas de la aplicación. Cuando se hace clic en el nombre de una cola, aparece la página de Detalles de la lista de tareas en cola, donde se pueden ver todas las tareas de la cola seleccionada.

Próximos pasos

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Java