¿Cuándo y cómo usar Tornado? ¿Cuándo es inútil?

84

Ok, Tornado no bloquea y es bastante rápido y puede manejar muchas solicitudes permanentes fácilmente.

Pero supongo que no es una solución milagrosa y si ejecutamos ciegamente un sitio basado en Django o cualquier otro sitio con Tornado, no aumentará el rendimiento.

No pude encontrar una explicación completa de esto, así que lo pregunto aquí:

  • ¿Cuándo se debe utilizar Tornado?
  • ¿Cuándo es inútil?
  • Al usarlo, ¿qué se debe tener en cuenta?
  • ¿Cómo podemos hacer que un sitio sea ineficiente usando Tornado?
  • Hay un servidor y un webframework. ¿Cuándo debemos usar el framework y cuándo podemos reemplazarlo por otro?
Vladimir Sidorenko
fuente

Respuestas:

45

Hay un servidor y un webframework. ¿Cuándo debemos usar el framework y cuándo podemos reemplazarlo por otro?

Esta distinción es un poco borrosa. Si solo está sirviendo páginas estáticas, usaría uno de los servidores rápidos como lighthttpd. De lo contrario, la mayoría de los servidores proporcionan una complejidad variable de marco para desarrollar aplicaciones web. Tornado es un buen framework 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 marcos que brindan soporte para el desarrollo de aplicaciones web / redes asíncronas y sin bloqueo.

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

Por su propia naturaleza, las E / S asíncronas / sin bloqueo funcionan muy bien cuando son intensivas en E / S y no en computación. La mayoría de las aplicaciones web / de redes se adaptan bien a este modelo. Si su aplicación exige que se realice cierta tarea computacional intensiva, entonces debe delegarse a algún 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 que un sitio sea ineficiente usando Tornado?

  1. Hacer cualquier tarea intensiva computacional
  2. Introducir operaciones de bloqueo

Pero supongo que no es una solución milagrosa y si ejecutamos ciegamente un sitio basado en Django o cualquier otro sitio con Tornado, no aumentará el 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é, el equilibrio de carga, etc.

Tornado y Twisted proporcionan un rendimiento razonable y son buenos para crear aplicaciones web de alto rendimiento. Puede consultar los testimonios de twisted y tornado para ver de lo que son capaces.

pyfunc
fuente
1
Gracias por la respuesta. Solo quiero aclarar algunos puntos: ¿Puedo usar Flask o Django bihind Tornado y obtener todos sus beneficios (si no realizo ninguna tarea de campamento) sin cambiar el código de la aplicación?
Vladimir Sidorenko
Si es así, ¿cuál será la diferencia en comparación con correr, decir con flup? Gracias.
Vladimir Sidorenko
Me gustaría analizar las fuentes RSS en la aplicación Tornado. ¿Consideraría eso bastante computacionalmente intensivo?
Susheel Javadi
6

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

Me gustaría analizar las fuentes RSS en la aplicación Tornado. ¿Lo consideraría bastante intensivo en computación?

Bueno, eso depende del tipo de análisis que estés haciendo y del hardware :) Mucho tiempo es mucho tiempo, así que si tu aplicación tarda más de medio segundo en responder, parecerá lenta: crea un perfil de tu aplicación.

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

Entonces:

¿Cuándo se debe utilizar Tornado?

¿Cuándo es inútil?

Tornado es bueno para manejar muchas conexiones, ya que puede responder a un cliente entrante, enviar un controlador de solicitud y no pensar en ese cliente hasta que la devolución de llamada de resultado se inserte en la cola de eventos. Entonces, para esa calidad específica, Tornado debe usarse cuando desee escalar bien al manejar muchas solicitudes. El procesamiento asíncrono facilita el desacoplamiento funcional y el acceso a datos sin compartir nada. Eso va muy bien con el diseño sin estado como REST u otras arquitecturas orientadas a servicios . Tampoco tiene que lidiar tanto con los subprocesos o procesos de generación con la sobrecarga inherente y puede evitar algunos de los problemas de bloqueo / IPC.

Tornado no hará mucha diferencia, por otro lado, si su backend y / o almacén de datos tarda mucho en procesar las solicitudes. Ayuda a realizar 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.

Morten Jensen
fuente
¿Qué sucede si tiene pocas operaciones en su servicio que sean computacionalmente intensivas (digamos> 1 segundo)? ¿Todavía es posible hacer ese tipo de procesamiento sin bloqueo?
tigeronk2
@ tigeronk2 Sí, pero tendrá que ejecutar el cálculo en otro hilo / proceso.
Morten Jensen
O potencialmente ejecutar el proceso intensivo como otro servicio para lograr escalabilidad y separación con una pequeña sobrecarga en comparación con la gestión de otro proceso. Mire el enlace Arquitecturas orientadas a servicios.
Tyeth
Analizar RSS casi por definición no es un procesamiento pesado, a menos que lo esté haciendo muy, muy mal.
tripleee