tipos software servidor para conceptos cliente capas arquitectura aplicaciones web-applications architecture asynchronous task-queue

web applications - software - Arquitectura de aplicaciones web: ¿se necesita tarea/tarea?



conceptos de la arquitectura web (1)

Actualmente estoy diseñando una aplicación web que permitirá a los usuarios programar tareas que se ejecutarán contra una API HTTP (en nombre de ellos). Las tareas pueden ser recurrentes y la resolución de tiempo mínima que se puede usar para la programación será de un minuto. Debido a la naturaleza de las tareas, creo que tiene sentido ejecutarlas de forma asincrónica. Sin embargo, ¿cómo debería ser la arquitectura de esta parte?

Pensé en usar una cola de tareas para crear tareas por la aplicación web y dejar que un trabajador las ejecute. En este caso, tengo varias preguntas:

  • ¿Cómo manejo las tareas recurrentes?
  • ¿Cómo guardo fácilmente los resultados de las tareas?
  • ¿Es posible hacer que la cola sea "persistente"?
  • ¿Deberían los trabajadores interactuar directamente con una base de datos?
  • ¿Debo hacer cola manualmente las tareas recurrentes?

¿Qué más podría considerar? Como supongo que no soy el único que piensa en este tipo de arquitectura de aplicaciones web, ¿hay alguna "mejores prácticas"? ¿Es una cola de tareas el camino a seguir?


Sí, este es un patrón bien conocido para manejar tareas de larga duración en la parte posterior de una aplicación web. Dependiendo de su lenguaje y del marco de la aplicación hay una cantidad de implementaciones de cola, por ejemplo, Resque o Beanstalkd o ActiveMQ, o si sus requisitos de rendimiento no son altos, puede usar una tabla de base de datos como un tipo de cola.

La idea básica es que su aplicación web coloque trabajos en una cola con suficiente contenido para permitir que avance el trabajo. Un grupo de procesos de trabajo en segundo plano (que idealmente se ejecuta de forma independiente de su aplicación web) lee los trabajos de la cola y los ejecuta. Los resultados se pueden volver a escribir en una cola de respuestas o tal vez escritos en una base de datos. Depende de cómo quiera que se muestren los resultados al usuario. Para una aplicación web, escribir resultados en la base de datos probablemente tenga más sentido.

Según el manejador de colas, pueden hacer que los trabajos sean persistentes. Por ejemplo, ActiveMQ admite la mensajería persistente para que los mensajes en una cola se recuperen en caso de falla.

Usted pregunta por los trabajos recurrentes, y creo que la respuesta depende de cuándo deben repetirse.

Una cola de mensajes directa procesará / lanzará mensajes a los trabajadores tan pronto como estén disponibles. Entonces la programación es engañosa o imposible. Para admitir trabajos programados (incluidos los trabajos que se repiten en un momento dado o después de que transcurra un tiempo), probablemente debería considerar el uso de una tabla de base de datos como una simple cola con un atributo de "hora de inicio".

Recientemente describí un patrón similar aquí .