2010-11-18 7 views
71

Ok, Tornado non è bloccante e abbastanza veloce e può gestire facilmente molte richieste permanenti.Quando e come usare Tornado? Quando è inutile?

Ma immagino che non sia un proiettile argentato e se eseguiamo solo ciecamente Django o qualsiasi altro sito con Tornado non darà alcun incremento di prestazioni.

non riuscivo a trovare una spiegazione esauriente di questo, quindi mi sto chiedendo qui:

  • Quando dovrebbe essere utilizzato tornado?
  • Quando è inutile?
  • Quando lo si utilizza, che cosa dovrebbe essere preso in considerazione?
  • Come possiamo rendere inefficiente sito utilizzando Tornado?
  • C'è un server e un webframework. Quando dovremmo usare il framework e quando possiamo sostituirlo con un altro?

risposta

37

C'è un server e un Webframework. Quando dovremmo usare il framework e quando possiamo sostituirlo con un altro?

Questa distinzione è un po 'sfocata. Solo se stai servendo pagine statiche, useresti uno dei server veloci come lighthttpd. Altrimenti, la maggior parte dei server offre una diversa complessità di framework per lo sviluppo di applicazioni web. Tornado è un buon framework web. Twisted è ancora più capace ed è considerato un buon framework di rete. Ha supporto per molti protocolli.

Tornado e Twisted sono framework che forniscono supporto per lo sviluppo di applicazioni Web/di rete asincrona non bloccanti.

Quando utilizzare Tornado? Quando è inutile? Quando lo si utilizza, che cosa dovrebbe essere preso in considerazione?

Per sua natura, l'I/O asincrono/non bloccante funziona alla grande quando è intensivo di I/O e non intensivo di calcolo. La maggior parte delle applicazioni web/di rete si adatta bene a questo modello. Se la tua applicazione richiede di svolgere determinati compiti computazionali, deve essere delegata ad un altro servizio in grado di gestirli meglio. Mentre Tornado/Twisted può fare il lavoro del server web, rispondendo alle richieste web.

Come possiamo rendere il sito inefficiente utilizzando Tornado?

  1. fare qualsiasi calcolo compito intensiva cosa
  2. Introdurre il blocco operazioni

Ma immagino che non è un proiettile d'argento e se abbiamo appena ciecamente corriamo Django o basato su qualsiasi altro sito con Tornado non darà alcun incremento di prestazioni.

Le prestazioni sono in genere una caratteristica dell'architettura completa dell'applicazione Web.È possibile ridurre le prestazioni con la maggior parte dei framework Web, se l'applicazione non è progettata correttamente. Pensa al caching, al bilanciamento del carico, ecc.

Tornado e Twisted offrono prestazioni ragionevoli ed è ideale per creare un'applicazione web molto performante. Puoi controllare le testimonianze sia per il twistato che per il tornado per vedere di cosa sono capaci.

+1

Grazie per la risposta. Voglio solo chiarire alcuni punti: Posso usare Flask o Django bihind Tornado e ottenere tutti i suoi benefici (se non eseguo attività camputazionali) senza modificare il codice dell'applicazione? –

+0

Se sì - quale sarà la differenza rispetto all'esecuzione di dire con flup? Grazie. –

+0

Vorrei analizzare i feed RSS nell'applicazione Tornado. Lo considereresti abbastanza intenso dal punto di vista computazionale? –

4

Mi dispiace rispondere a una vecchia domanda, ma mi sono imbattuto in questo e mi sono chiesto perché non aveva più risposte. Per rispondere alla domanda di Bart J:

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

Beh, questo dipende da che tipo di analisi che si sta facendo e su quale hardware :) Molto tempo è lungo tempo, quindi se la vostra applicazione richiede più che dire mezzo secondo di rispondere , sembrerà pigro - profila la tua app.

La chiave per i sistemi veloci è una grande architettura, non tanto le specifiche come ad esempio il framework che si sta utilizzando (Twisted, Tornado, Apache + PHP). Tornado ha uno stile di elaborazione asincrono e questo è davvero il motivo per cui a mio parere. Node.js, Twisted e Yaws sono esempi di altri server Web asincroni che si adattano molto bene a causa di un approccio leggero e uno stile di elaborazione asincrono.

Quindi:

When should Tornado be used? 
When is it useless? 

Tornado è un bene per la gestione di un sacco di connessioni, in quanto in grado di rispondere a un client in arrivo, inviare un gestore di richiesta e non pensare a quel cliente fino a quando il risultato-callback è spinto sulla coda degli eventi. Quindi, per quella specifica qualità, il Tornado dovrebbe essere usato quando si vuole scalare bene quando si gestiscono molte richieste. L'elaborazione asincrona facilita il disaccoppiamento funzionale e l'accesso ai dati non condivisi. Ciò si adatta molto bene con un design senza stato come REST o altri Service Oriented Architecture s. Inoltre, non è necessario gestire i thread oi processi di spawning con il sovraccarico inerente e si può risparmiare parte del problema di blocco/IPC.

Tornado non farà molta differenza, d'altra parte, se il back-end e/o l'archivio dati impiegano molto tempo per elaborare le richieste. Aiuta a fare progetti concorrenti e servizi Web in particolare. L'architettura simultanea rende più semplice scalare il design e mantenere basso l'accoppiamento. Questa è la mia esperienza con Tornado, almeno.

+0

Cosa succede se nel tuo servizio ci sono poche operazioni che richiedono un'intensità computazionale (ad esempio> 1 sec)? È ancora possibile eseguire questo tipo di elaborazione in modo non bloccante? – tigeronk2

+0

@ tigeronk2 Sì, ma dovrai eseguire il calcolo in un altro thread/processo. –