87 votes

Quand et comment utiliser Tornado ? Quand est-elle inutile ?

Ok, Tornado est non bloquant et assez rapide et il peut gérer beaucoup de demandes permanentes facilement.

Mais je suppose que ce n'est pas une solution miracle et que si nous exécutons aveuglément un site basé sur Django ou tout autre site avec Tornado, nous n'obtiendrons aucun gain de performance.

Je n'ai pas trouvé d'explication complète à ce sujet, alors je pose la question ici :

  • Quand faut-il utiliser Tornado ?
  • Quand est-ce que c'est inutile ?
  • Lors de son utilisation, que faut-il prendre en compte ?
  • Comment pouvons-nous faire inefficace en utilisant Tornado ?
  • Il y a un serveur et un webframework. Quand devons-nous utiliser le framework et quand pouvons-nous le remplacer par un autre ?

50voto

pyfunc Points 31088

Il y a un serveur et un webframework. Quand devons-nous utiliser le framework et quand pouvons-nous le remplacer par un autre ?

Cette distinction est un peu floue. Si vous ne servez que des pages statiques, vous utiliserez l'un des serveurs rapides comme lighthttpd. Sinon, la plupart des serveurs fournissent un cadre plus ou moins complexe pour développer des applications Web. Tornado est un bon framework web. Twisted est encore plus performant et est considéré comme un bon framework réseau. Il prend en charge de nombreux protocoles.

Tornado et Twisted sont des frameworks qui prennent en charge le développement d'applications web/réseau non bloquantes et asynchrones.

Quand faut-il utiliser Tornado ? Quand est-elle inutile ? En l'utilisant, que faut-il prendre en compte ?

De par sa nature même, le modèle d'E/S asynchrone et non bloquant fonctionne très bien lorsqu'il s'agit d'E/S intensives et non de calculs intensifs. La plupart des applications web / réseau conviennent bien à ce modèle. Si votre application exige l'exécution d'une tâche intensive en termes de calcul, elle doit être déléguée à un autre service qui peut mieux la gérer. Alors que Tornado / Twisted peut faire le travail de serveur web, en répondant aux requêtes web.

Comment faire un site inefficace en utilisant Tornado ?

  1. Faire n'importe quelle tâche intensive de calcul
  2. Introduire les opérations de blocage

Mais je suppose que ce n'est pas une solution miracle et que si nous exécutons aveuglément un site basé sur Django ou tout autre site avec Tornado, nous n'obtiendrons aucun gain de performance.

La performance est généralement une caractéristique de l'architecture complète d'une application web. Vous pouvez réduire les performances avec la plupart des frameworks web, si l'application n'est pas conçue correctement. Pensez à la mise en cache, à l'équilibrage des charges, etc.

Tornado et Twisted offrent des performances raisonnables et permettent de construire des applications web performantes. Vous pouvez consulter les témoignages sur Twisted et Tornado pour voir ce dont ils sont capables.

1 votes

Merci pour la réponse. Je veux juste clarifier certains points : puis-je utiliser Flask ou Django derrière Tornado et bénéficier de tous ses avantages (si je ne fais pas de tâches de campement) sans changer le code de l'application ?

0 votes

Si oui, quelle sera la différence par rapport à un fonctionnement avec flup, par exemple ? Merci.

0 votes

J'aimerais analyser les flux RSS dans l'application Tornado. Considérez-vous que c'est un travail assez intensif en termes de calcul ?

6voto

Morten Jensen Points 1821

Je suis désolé de répondre à une vieille question, mais je suis tombé sur celle-ci et je me suis demandé pourquoi il n'y avait pas plus de réponses. Pour répondre à la question de Bart J :

Je voudrais analyser les flux RSS dans l'application Tornado. Considérez-vous que c'est un travail assez intensif en termes de calcul ?

Cela dépend du type d'analyse que vous faites et du matériel utilisé :) Un long temps est un long temps, donc si votre application prend plus d'une demi-seconde pour répondre, elle semblera lente - profilez votre application.

La clé des systèmes rapides est une bonne architecture, pas tant les spécificités comme par exemple le framework que vous utilisez (Twisted, Tornado, Apache+PHP). Tornado a un style de traitement asynchrone et c'est vraiment ce qui compte le plus à mon avis. Node.js, Twisted et Yaws sont des exemples d'autres serveurs web asynchrones qui évoluent très bien grâce à une approche légère et un style de traitement asynchrone.

Donc :

Quand faut-il utiliser Tornado ?

Quand est-ce que c'est inutile ?

Tornado est bon pour gérer un grand nombre de connexions, puisqu'il peut répondre à un client entrant, distribuer un gestionnaire de requête et ne pas penser à ce client jusqu'à ce que le résultat soit poussé dans la file d'attente des événements. C'est donc pour cette qualité spécifique que Tornado doit être utilisé lorsque vous voulez être capable de gérer un grand nombre de demandes. Le traitement asynchrone facilite le découplage fonctionnel et l'accès aux données sans partage. Cela s'accorde très bien avec les conceptions sans état comme les suivantes REST ou autre Architecture orientée services s. Vous n'avez pas non plus à vous occuper de la création de threads ou de processus avec les frais généraux inhérents et vous pouvez éviter certains problèmes de verrouillage/IPC.

En revanche, Tornado ne fera pas une grande différence si votre backend et/ou votre magasin de données met du temps à traiter les requêtes. Il est utile de faire des conceptions concurrentes et des services Web en particulier. L'architecture concurrente permet de faire évoluer plus facilement votre conception et de maintenir un couplage faible. C'est du moins mon expérience avec Tornado.

0 votes

Que se passe-t-il si vous avez quelques opérations dans votre service qui sont intensives en termes de calcul (disons >1sec) ? Est-il encore possible d'effectuer ce type de traitement de manière non bloquante ?

0 votes

@tigeronk2 Oui, mais vous devrez exécuter le calcul dans un autre thread/processus.

0 votes

Vous pouvez également exécuter le processus intensif en tant qu'autre service pour obtenir l'évolutivité et la séparation avec une faible surcharge par rapport à la gestion d'un autre processus. Consultez le lien sur les architectures orientées services.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X