Vernice Nginx Nginx Django?


13

Ho un'app django e voglio installare Varnish su un server di fronte. In un altro thread serverfault qualcuno ha suggerito di mettere Nginx davanti a Varnish.

Dovrei mettere Nginx davanti a Varnish sul server di cache? In tal caso, dovrei usare Nginx sul server delle app?

Risposte:


10

Stiamo parlando di 1 - 3 server frontend in totale, non una server farm di grandi dimensioni con bilanciamento del carico tra i livelli?

Mettere nginx davanti a Vanish ti consente di eseguire la compressione HTTP al volo. Questa è una best practice per le prestazioni, ma potrebbe essere eliminata. (Il contenuto in Varnish è spesso non compresso, quindi ESI include il lavoro e quindi non è necessario gestire più versioni memorizzate nella cache dello stesso oggetto a seconda della corrispondenza dell'intestazione / browser di Vary.)

Per quanto riguarda nginx sul server delle app - Apache con mod_wsgi non è il modo consigliato e più comune per distribuire nuove installazioni Django al giorno d'oggi? Non sono a conoscenza di un motivo convincente per l'utilizzo di nginx / fastcgi su Apache / mod_wsgi per Django; ma dovresti ricevere consigli da un esperto di Django.

Riguardo a Varnish che ha interessanti caratteristiche di bilanciamento del carico che nginx non ha, non vedo cosa sono? La vernice ha un bilanciamento casuale e round-robin. nginx ha round-robin, IP client e hashing coerente: non vedo un vantaggio significativo per Varnish? È VCL o Varnish 'grazioso config ricaricare o qualcos'altro?

Per una piccola configurazione del server 1-3 credo che lo farei

Vernice -> Apache / mod_wsgi / Django

o forse

Calamari -> Apache / mod_wsgi / Django

e ignora la compressione HTTP per semplicità, a meno che bandwith non sia costoso.

Aggiornare:

Graham Dumpleton ha scritto un prezioso commento qui sotto. Menziona una configurazione molto comune, ad esempio un blog su un VPS o una piccola web farm senza memorizzazione nella cache:

nginx -> Apache / mod_wsgi / Django

Questa è un'ottima soluzione, per un paio di motivi:

  1. Installazione semplice
  2. nginx, che ha un'alta velocità e un sovraccarico minimo, gestisce la manutenzione di file statici e la connessione del browser keepalive.
  3. Django corre nell'eccellente mod_wsgi di Graham Dumpleton, la piattaforma consigliata per Django.

La ragione per cui non ho menzionato questo inizialmente è che OP sembrava richiedere Varnish, una soluzione di cache dalle prestazioni molto elevate. La combo nginx / Apache / mod_wsgi non può eseguire la memorizzazione nella cache con un livello di prestazioni e flessibilità che corrisponde a Varnish.


2
Puoi anche usare 'nginx -> Apache / mod_wsgi / Django' come fanno molte persone per vari buoni motivi.
Graham Dumpleton,

4
L'altra cosa che nginx fornisce in quel caso d'uso che molti non capiscono è che nginx isola Apache dai client lenti. Questo perché il contenuto della richiesta fino a determinate dimensioni non viene riprodotto in streaming da nginx. Al contrario, memorizzerà le intestazioni e il contenuto della richiesta e solo la richiesta proxy quando avrà tutto. Ciò significa che lo passa ad Apache solo quando sono disponibili tutte le informazioni necessarie per gestire la richiesta. Pertanto Apache / mod_wsgi sarà occupato per il minor tempo possibile e processi / thread non collegati dal client lento. Una misura del buffering avviene anche sul retro, quindi anche Apache può finire più velocemente.
Graham Dumpleton,

2
@Graham Dumpleton: È molto bello averti qui, spero che rimarrai . :-) Per quanto riguarda la gestione multiplexing / connessione intelligente di nginx HTTP, sono pienamente d'accordo.
Jesper M,

Innanzitutto, grazie a Jesper e Graham per aver dedicato del tempo a scrivere risposte così complete. Sto pensando di mettere un server di bilanciamento del carico di fronte a due server di app. Un server gestirà la maggior parte del traffico con il secondo utilizzato principalmente per il failover e il beta testing di nuove funzionalità.
Enrico,

Varnish è allettante perché mi dà il pieno controllo su quali richieste vengono inviate a quale backend. Varnish controlla anche i server back-end, il failover è semplice da configurare e gestisce i backend lenti / morti con grazia (se entrambi i server muoiono).
Enrico,

4

È possibile utilizzare nginx senza vernice per eseguire il proxy e memorizzare nella cache il contenuto.


2
La vernice ha alcune interessanti caratteristiche di bilanciamento del carico che nginx non è pronta all'uso
Enrico,

4
quali caratteristiche per esempio?
silenzioso il

4

Sto usando Nginx, Varnish e Apache / mod_wsgi / Django con successo. Ho iniziato con la seguente configurazione:

Nginx -> Apache / mod_wsgi / Django

Una volta che ho iniziato a vedere un carico significativo su Apache, ho aggiunto Varnish:

Nginx -> Vernice -> Apache / mod_wsgi / Django

Uso Nginx come una specie di "router URL". Le richieste di amministrazione di Django vengono inviate direttamente da Nginx ad Apache. Le richieste dei client vengono inviate da Nginx a Varnish, che memorizza nella cache le richieste da Apache e serve anche elementi "graziati" dalla cache se i server delle app non sono disponibili.

Il mio server Nginx serve anche direttamente alcuni contenuti statici (ad es. Immagini, file CSS e javascript).

In generale, le prestazioni sono state eccellenti. Ho notato un paio di avvertenze che dovrei menzionare:

  1. Su un sito occupato, il riavvio di Varnish può causare un picco del carico sui server delle app, quindi è meglio mantenere il riavvio di Varnish al minimo. (Varnish non sembra avere un "ricaricare" come Nginx / Apache in cui rilegge i suoi file VCL). Al contrario, ricaricare una configurazione Nginx ha un impatto minimo. Per questo motivo, eseguo la maggior parte della riscrittura e del "routing" degli URL in Nginx.
  2. Vernice è facile da inserire tra Nginx e Apache. Se inizi a notare un carico elevato sui server delle app, l'aggiunta di vernice con anche la configurazione predefinita può davvero fare la differenza.
  3. Se usi Varnish, devi assolutamente pensare a come gestire l'invalidazione della cache.
  4. La mia esperienza è stata che i manici Varnish hanno fallito un po 'più elegantemente i backend di Nginx (come hai sottolineato in precedenza).

Non ho mai visto la vernice dietro qualcos'altro. La vernice di solito è il bilanciamento del carico che esegue il router url. Quindi hai 2 server web e 1 proxy o 2 proxy e 1 server web? Q
ioanb7

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.