2010-11-18 12 views
71

Ok, Tornado no bloquea y es bastante rápido y puede manejar muchas peticiones de pie fácilmente.¿Cuándo y cómo usar Tornado? ¿Cuándo es inútil?

Pero supongo que no es una bala de plata y si ejecutamos ciegamente Django o cualquier otro sitio con Tornado no dará ningún impulso en el rendimiento.

no pude encontrar una explicación completa de esto, así que estoy pidiendo aquí:

  • Cuando debe usarse Tornado?
  • ¿Cuándo es inútil?
  • Al usarlo, ¿qué se debe tener en cuenta?
  • ¿Cómo podemos hacer sitio ineficiente usando Tornado?
  • Hay un servidor y un marco web. ¿Cuándo deberíamos usar framework y cuándo podemos reemplazarlo por otro?

Respuesta

37

Hay un servidor y un marco de red. ¿Cuándo deberíamos usar framework y cuándo podemos reemplazarlo por otro?

Esta distinción es un poco borrosa. Solo si está sirviendo páginas estáticas, usaría uno de los servidores rápidos como lighthttpd. De otro modo, la mayoría de los servidores proporcionan una complejidad variable de framework para desarrollar aplicaciones web. Tornado es un buen marco web. Twisted es aún más capaz y se considera un buen marco de trabajo en red. Tiene soporte para muchos protocolos.

Tornado y Twisted son frameworks que proporcionan soporte de desarrollo de aplicaciones web/de red asíncronas sin bloqueo.

¿Cuándo se debe usar Tornado? ¿Cuándo es inútil? Al usarlo, ¿qué se debe tener en cuenta?

Por su propia naturaleza, la E/S no sincronizada/no bloqueada funciona muy bien cuando es E/S intensiva y no requiere mucha informática. La mayoría de las aplicaciones web/de red se adaptan bien a este modelo. Si su aplicación exige cierta tarea intensiva computacional, debe delegarse a otro servicio que pueda manejarla mejor. Mientras que Tornado/Twisted puede hacer el trabajo de servidor web, respondiendo a las solicitudes web.

¿Cómo podemos hacer un sitio ineficiente usando Tornado?

  1. hacer cualquier tarea intensiva computacional cosa
  2. Introducir el bloqueo de las operaciones

pero supongo que no es una bala de plata y si a ciegas corremos Django basa -o cualquier otro sitio con Tornado no dará ningún impulso de rendimiento.

El rendimiento suele ser una característica de la arquitectura completa de aplicaciones web.Puede reducir el rendimiento con la mayoría de los marcos web, si la aplicación no está diseñada correctamente. Piense en el almacenamiento en caché, balanceo de carga, etc.

Tornado and Twisted proporciona un rendimiento razonable y es bueno para crear una aplicación web de alto rendimiento. Puede consultar los testimonios de torcido y tornado para ver de lo que son capaces.

+1

Gracias por la respuesta. Solo quiero dejar en claro algunos puntos: ¿Puedo usar Flask o Django por Tornado y obtener todos sus beneficios (si no realizo ninguna tarea de campamento) sin cambiar el código de aplicación? –

+0

En caso afirmativo, ¿cuál será la diferencia en comparación con ejecutar decir con flup? Gracias. –

+0

Me gustaría analizar fuentes RSS en la aplicación Tornado. ¿Consideras que es bastante intensivo computacionalmente? –

4

Lamento responder una pregunta anterior, pero me encontré con esta pregunta y me pregunté por qué no tenía más respuestas. Para responder a la pregunta de Bart J:

I would like to parse RSS feeds in the Tornado application. Would you consider that fairly computationally intensive? 

Bueno, eso depende de qué tipo de análisis que está haciendo y en qué hardware :) Mucho tiempo es mucho tiempo, así que si su aplicación requiere más que decir la mitad de un segundo para responder , parecerá lento - perfila tu aplicación.

La clave para los sistemas rápidos es una gran arquitectura, no tanto los detalles como, por ejemplo, qué marco está utilizando (Twisted, Tornado, Apache + PHP). Tornado tiene un estilo de procesamiento asincrónico y en realidad es en gran parte a lo que se reduce. Node.js, Twisted y Yaws son ejemplos de otros servidores web asíncronos que se escalan muy bien debido a un enfoque ligero y al estilo de procesamiento asincrónico.

Así:

When should Tornado be used? 
When is it useless? 

Tornado es bueno para el manejo de una gran cantidad de conexiones, ya que puede responder a un cliente entrante, enviará un controlador de solicitudes y no pensar que el cliente hasta que el resultado es-devolución de llamada empujado en la cola del evento. Entonces, para esa calidad específica, Tornado debe usarse cuando desee escalar bien cuando maneja muchas solicitudes. El procesamiento asincrónico facilita el desacoplamiento funcional y el acceso a datos compartidos. Eso se balancea muy bien con diseño sin estado como REST u otro Service Oriented Architecture s. Tampoco tiene que ocuparse tanto de hilos o procesos de desove con la sobrecarga inherente y puede salvar algunos de los problemas de bloqueo/IPC.

Tornado no hará mucha diferencia, por otro lado, si su servidor y/o almacén de datos tarda mucho tiempo para procesar las solicitudes. Ayuda a hacer diseños concurrentes y servicios web en particular. La arquitectura concurrente hace que sea más fácil escalar su diseño y mantener el acoplamiento bajo. Esa es mi experiencia con Tornado al menos.

+0

¿Qué sucede si tiene pocas operaciones en su servicio que sean computacionalmente intensas (digamos> 1 segundo)? ¿Todavía es posible hacer ese tipo de procesamiento de forma no bloqueante? – tigeronk2

+0

@ tigeronk2 Sí, pero deberá ejecutar el cálculo en otro subproceso/proceso. –

Cuestiones relacionadas