2012-11-08 17 views
5

Il nostro sito Web ha sviluppato la necessità di aggiornamenti in tempo reale e stiamo prendendo in considerazione varie soluzioni di cometa/polling lungo. Dopo la ricerca, abbiamo definito nginx come proxy inverso a 4 istanze di tornado (ospitate su Amazon EC2). Attualmente stiamo usando lo stack LAMP tradizionale e abbiamo scritto una quantità notevole di codice in PHP. Siamo disposti a convertire il nostro codice PHP in Python per supportare meglio questa soluzione. Ecco le mie domande:Apache/PHP in Nginx/Tornado/Python

  1. ipotizzando un processore quad-core, è ok per nginx ad essere in esecuzione sullo stesso server come le istanze 4 tornado, o è consigliabile eseguire due server separati: uno per nginx e uno per i 4 processi di tornado?

  2. Esiste un vantaggio nell'utilizzo di HAProxy davanti a Nginx? Nginx non gestisce il bilanciamento del carico molto bene da solo?

  3. Dalla mia ricerca, Nginx non sembra avere un modulo di reindirizzamento URL. È preferibile utilizzare Redis per i reindirizzamenti? In tal caso, i Redis dovrebbero essere di fronte a Nginx o alle spalle?

  4. Una gran parte del nostro codice applicazione non sarà coinvolta in aggiornamenti in tempo reale. Questo codice contiene diverse query di database e letture di file system, quindi non è chiaramente adatto per un server di app non bloccante. Dalla mia ricerca, ho letto che il problema del blocco è mitigato semplicemente avendo più istanze di Tornado, mentre altri suggeriscono di usare un app server separato (ad esempio Gunicorn/Django/Flask) per bloccare le chiamate. Qual è il modo migliore per gestire le chiamate di blocco quando si utilizza un server non bloccante?

  5. Convertire il nostro codice da PHP a Python sarà un processo lungo. È accettabile eseguire Apache/PHP e Tornado simultaneamente dietro Nginx, o dovremmo limitarci ad usare il linguaggio (sia tornado con gunicorn/django/flask o tornado da solo)?

risposta

6

andrò punto per punto:

  1. Sì. È ok per eseguire tornado e nginx su un server. È anche possibile utilizzare nginx come proxy inverso per il tornado.

  2. Haproxy offre vantaggi se si dispone di più istanze del server. Inoltre ti permetterà di proxy websocket direttamente al tornado.

  3. In realtà, nginx può essere utilizzato per i reindirizzamenti, senza problemi. Non ho sentito parlare dell'uso di redis per i reindirizzamenti: è la memoria chiave/valore ... potresti voler dire qualcos'altro?

  4. Ancora una volta, è possibile scrivere parte di blocco in django e parte non bloccante nel tornado. Anche il tornado ha alcune librerie non bloccanti per le query db. Non sono sicuro che tu abbia bisogno di poteri di django qui.

  5. Sì, è possibile eseguire apache dietro nginx. Molti progetti utilizzano nginx di fronte ad apache per servire file statici.

In realtà la domanda è molto semplice - anche la risposta. Posso essere più dettagliato su qualsiasi punto, se lo desideri.

+0

Grazie per la rapida risposta! – xxjbmxx

+1

1.) stiamo in effetti pianificando l'uso di nginx come proxy inverso. Ero solo curioso di sapere se fosse possibile per il processo nginx consumare abbastanza risorse per costringere una delle istanze tornado se in esecuzione sullo stesso server. 4.) quale framework python consiglieresti per le chiamate di blocco (se il django non è necessario)? – xxjbmxx

+1

È assolutamente ok - non avrai problemi con nginx + tornado su un server. Per semplici compiti con il blocco delle chiamate, dai un'occhiata a Flask. Prendi django se hai bisogno di un buon admin e di semplici strumenti di manipolazione dello schema del database. –