2010-08-26 13 views
8

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.¿Requiere esta aplicación web una cola de tareas?

Problema

Si dejo que el hilo del servidor, que está manejando la solicitud/respuesta también generar la imagen, que va a atar un hilo por un par de segundos, y posiblemente empantanar mi servidor, afectan al rendimiento , matar a los cachorros, etc.

pregunta

¿Debo usar una cola de tareas, tales como Celery, por lo que el servidor puede entregar fuera de la creación de la imagen, y volver a la manipulación de las peticiones/respuestas? No tengo problemas para dejar que el usuario que está creando la imagen espere, pero no quiero que afecte el acceso de otras personas al sitio.

Respuesta

6

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 cometa) para devolver la imagen al usuario.
  • Hará que su sistema sea 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éngala simple al principio y hágala funcionar, pero tenga en cuenta que puede agregar una cola de tareas más tarde.

Implemente esa cola de tareas cuando/si necesita escalar.

+1

+1: Y ... si usa Apache, manejará una gran cantidad de almacenamiento en búfer y concurrencia para usted. De hecho, con mod_wsgi, puede tener muchos, muchos procesos back-end ejecutándose simultáneamente. Hasta su punto de referencia, no puede estar seguro, pero la carga de trabajo que puede manejar es a menudo enorme. –

+0

Ok. Gracias por ahorrarme N horas de trabajo. La principal preocupación para mí fue que un par de segundos _siempre fue así. Uno de mis objetivos personales era proporcionar una buena interfaz de usuario, y pensé que el usuario miraba una pantalla en blanco durante unos segundos mientras la imagen se generaba, y se enviaba. estaría bajo par. Si hubiera una cola, al menos podría sondearlos y mantenerlos ocupados con un mensaje o algo para mirar. –

+0

@random_person: "mirando a una pantalla en blanco"? ¿Cómo puede una página HTML presentar una "pantalla en blanco"? ¿Cómo haces eso? Sobre todo cuando presento un formulario, miro la página anterior por un tiempo. Luego, la página se reemplaza de repente. Además, muchas personas prefieren los idlers en Javascript para mostrar algo de acción. Pero no sé cómo hacer una "pantalla en blanco" en un navegador. ¿Puedes explicar eso? –

0

Tengo un sitio de generación de imágenes también (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 honesto, no estoy 100% seguro de cuál es su preocupación exacta y qué tecnologías está usando ...

Básicamente, una página requiere la imagen de otra página (Tal vez incluso se encuentra en un servidor diferente), y cuando está hecho, 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.

0

regla general: use una cola si las tareas se pueden acumular.

En su caso, la tarea podría tomar hasta 2 segundos, suponiendo 8 horas al día, puede 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.

Cuestiones relacionadas