2014-04-12 11 views
7

Ich habe bemerkt, dass Sie mehrere Prozesse innerhalb einer uwsgi Instanz hinter nginx starten:Mehr Prozesse Server mit nginx und uwsgi

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

Oder Sie können mehr uwsgi Instanzen auf verschiedene Steckdosen und Lastausgleich beginnen zwischen ihnen mit nginx:

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

Was ist der Unterschied zwischen diesen beiden Strategien und ist eine bevorzugte gegenüber der anderen?

Wie unterscheidet sich der Lastausgleich durch nginx (im ersten Fall) von dem Lastausgleich durch uWSGI (im zweiten Fall)?

Nginx kann Front-Server auf mehreren Hosts. Kann uWSGI dies in einer einzigen Instanz tun? Funktionieren bestimmte uWSGI-Funktionen nur innerhalb eines einzigen uWSGI-Prozesses (dh Shared Memory/Cache)? Wenn dies der Fall ist, kann es schwierig sein, von der ersten Annäherung zur zweiten zu skalieren.

Antwort

7

Der Unterschied ist, dass es im Fall von uWSGI keinen "echten" Lastausgleich gibt. Der erste freie Prozess wird immer antworten, daher ist dieser Ansatz viel besser als ein Nginx-Lastausgleich zwischen mehreren Instanzen (dies gilt natürlich nur für lokale Instanzen). Was Sie berücksichtigen müssen, ist das "donnernde Herdenproblem". Seine Implikationen sind hier veröffentlicht: http://uwsgi-docs.readthedocs.org/en/latest/articles/SerializingAccept.html.

Schließlich sind alle uWSGI Funktionen Multithread/Multiprozess (und Greenthreads) bewusst, so dass das Caching (zum Beispiel) von allen Prozessen geteilt wird.

+3

Können Sie erläutern, welche Daten tatsächlich über uWSGI-Prozesse ausgetauscht werden? Laufen Prozesse nicht isoliert? –

+1

Ich möchte es auch wissen. – ruipacheco

Verwandte Themen