tutorial python architecture celery

python - celery tutorial



¿Esta aplicación web requiere una cola de tareas? (3)

Fondo

Tengo una aplicación web que creará una imagen a partir de la entrada del usuario. La creación de la imagen podría tomar hasta un par de segundos.

Problema

Si dejo que el hilo del servidor, es decir, que maneje la solicitud / respuesta, también genere la imagen, eso atará un hilo durante un par de segundos y posiblemente atascará mi servidor, afectará el rendimiento, matará cachorros, etc.

Pregunta

¿Debo usar una cola de tareas, como Apio , para que el servidor pueda transferir la creación de la imagen y volver a manejar las solicitudes / respuestas? No tengo ningún problema en dejar que el usuario que está creando la imagen espere, pero no quiero que afecte el acceso de otras personas al sitio.


También tengo un sitio generador de imágenes ( Names4Frames ) e hice cosas como esta a través de AJAX (y PHP). No he tenido desaceleraciones notables (o cachorros muertos), pero el sitio en cuestión tampoco genera grandes cantidades de tráfico. No soy un experto en hilos, y para ser sincero, no estoy 100% seguro de cuál es su preocupación exacta y qué tecnologías está usando ...

Básicamente, una página solicita la imagen de otra página (tal vez incluso se encuentra en un servidor diferente) y, cuando termina, la segunda página devuelve a la primera información relevante sobre la imagen para fines de procesamiento / visualización. Si solo estamos hablando de unos segundos, no puedo ver que sea un problema real, a menos que estés lidiando con MASSIVE cantidades de visitantes que constantemente usan este servicio de creación de imágenes.


Voy a decir que no, por ahora.

  • Un par de segundos no es tan largo.
  • De todos modos, tendrá que implementar algún tipo de sondeo (o procesamiento de cometas) para devolver la imagen al usuario.
  • Hará tu sistema más complejo.
  • Diseñe el sistema, por lo que es factible y fácil agregar una cola de tareas más adelante.

Por lo tanto, manténgalo simple al principio y haga que funcione, pero tenga en cuenta que puede agregar una cola de tareas más adelante.

Implemente esa cola de tareas cuando / si necesita escalar.


regla de oro: utilice una cola si las tareas pueden acumularse.

En su caso, la tarea podría tomar hasta 2 segundos, suponiendo 8 horas al día, podría hacer hasta 8 * 60 * 60/2 = 14400 imágenes al día sin concurrencia. Si recibe más de 7200 solicitudes al día, tiene un 50% de posibilidades de que una de ellas se solape. Hay análisis más sofisticados para mostrar el nivel esperado de superposición que es probable que obtenga; pero parece seguro decir que podría hacer más de mil imágenes al día antes de sobrecargarse.

Ahora la pregunta parece más fácil: ¿Crees que obtendrás más de mil o dos creaciones de imágenes por día pronto? Si es así, establezca una cola; si no, déjalo para más tarde.

En cualquier caso, mantenga buenos registros; asegúrese de saber cuándo hay superposición de procesamiento. Recuerde que una vez que obtenga dos tareas procesando simultáneamente, tomarán más tiempo, aumentando las probabilidades de que llegue una tercera antes de terminar con las otras dos, y una cuarta ... cuando llegue a un umbral invisible, el rendimiento se desplomará drásticamente. No pierdas el sueño con esto, solo que no lo dejes pasar antes de que te des cuenta.