2014-04-12 22 views
7

Ho notato che è possibile avviare processi multipli all'interno di un'istanza uWSGI dietro nginx:processi server multipli utilizzando nginx e uWSGI

uwsgi --processes 4 --socket /tmp/uwsgi.sock 

Oppure si può avviare più istanze uWSGI su diversi prese e bilanciamento del carico tra di loro utilizzando nginx:

upstream my_servers { 
    server unix:///tmp.uwsgi1.sock; 
    server unix:///tmp.uwsgi2.sock; 
    #... 
} 

Qual è la differenza tra queste 2 strategie ed è una preferita rispetto all'altra?

In che modo il bilanciamento del carico eseguito da nginx (nel primo caso) differisce dal bilanciamento del carico eseguito da uWSGI (nel secondo caso)?

nginx può front server su più host. Può uWSGI farlo in una singola istanza? Alcune funzionalità di uWSGI funzionano solo all'interno di un singolo processo uWSGI (ad esempio memoria condivisa/cache)? In tal caso potrebbe essere difficile scalare dal primo approccio al secondo ...

risposta

7

La differenza è che nel caso di uWSGI non esiste un bilanciamento del carico "reale". Il primo processo gratuito risponderà sempre, quindi questo approccio è decisamente migliore rispetto al bilanciamento del carico nginx tra più istanze (ovviamente è vero solo per le istanze locali). Quello che devi prendere in considerazione è il "problema della mandria tonante". Le sue implicazioni sono esposte qui: http://uwsgi-docs.readthedocs.org/en/latest/articles/SerializingAccept.html.

Infine, tutte le funzionalità di uWSGI sono multithread/multiprocesso (e greenthreads), quindi la cache (ad esempio) è condivisa da tutti i processi.

+3

È possibile elaborare quali dati sono effettivamente condivisi sui processi di uWSGI? I processi non sono eseguiti in modo isolato? –

+1

Anche io vorrei saperlo. – ruipacheco

Problemi correlati