2011-10-12 21 views
55

¿Podría alguien explicar los pros/contras cuando se utiliza WSGI VS uWSGI con Nginx.WSGI vs uWSGi con Nginx

Actualmente estoy construyendo un servidor de producción para el sitio web de Django que he preparado pero no he podido decidir si debo ir con WSGI o uWSGI. ¿Podría explicar en detalle qué diferencia cada configuración? ¿Qué configuración debería escalar mejor?

Gracias de antemano

+18

WSGI es una especificación. uWSGI proporciona una implementación de la especificación WSGI. No puedes compararlos. Solo puedes comparar diferentes implementaciones. –

+0

http: // segmentfault.com/a/1190000004294634 – zx1986

Respuesta

2

This blog post es una comparación muy detallada de un montón de servidores WSGI Python, con un resumen y algunas recomendaciones al final.

+2

Y también usa configuraciones para algunos servidores que son realmente dudosas y las hace aparecer peor de lo que pueden ser. Uno tiene que tener cuidado con lo que se lee en esa comparación. –

23

En general, es mejor ejecutar Python en un proceso separado de su servidor web principal. De esta forma, el servidor web puede tener muchos hilos pequeños que sirven contenido estático muy rápido, mientras que sus procesos de Python separados serán grandes y pesados ​​y cada uno ejecutará su propio intérprete de Python. Tan simple WSGI es malo, porque satura cada uno de tus hilos nginx con un gran intérprete de Python. Usar flup o uWSGI detrás de nginx es mucho mejor, porque eso libera nginx para simplemente servir contenido, y le permite elegir cuántos subprocesos ligeros de nginx pequeños ejecutar, independientemente de su elección de cuántos subprocesos pesados ​​de Python le pones al servicio contenido dinámico La gente parece muy feliz con gunicorn en este momento, pero cualquiera de esas tres opciones debería funcionar bien.

En el futuro, también lo libera para mover el Python a otro servidor cuando la carga comienza a ser grave.

+1

Estoy un poco confundido por tu respuesta. No puedo ver que mencionó ejecutar cualquier tipo de implementación de WSGI dentro de nginx. Hizo referencia al sitio principal de wsgi.org. Su comparación original entre WSGI y uWSGI es, por lo tanto, un poco tonta porque uWSGI es una implementación de la especificación WSGI. Usted mismo ha utilizado el término genérico WSGI de una manera confusa al decir que 'hincha cada uno de sus hilos nginx con un gran intérprete de Python'. La especificación WSGI en sí misma no puede hacer eso, solo las implementaciones pueden hacerlo. –

+1

Podría tener sentido si estuviéramos comparando nginx + mod_wsgi (el módulo conectable) y nginx + uWSGI (el contenedor del servidor de aplicaciones). – clime

+0

Entonces, cuando se trata de usar Nginx para ejecutar aplicaciones web de Python, dado que el mod_wsgi de Manlio Perillo es obsoleto y no se recomienda, ¿las buenas soluciones son WSGI con gunicorn o uWSGI, o FastCGI con Flup? – Gulbahar

68

Ok, muchachos esta confusión se debe a la falta de detalles de varias fuentes, y el nombre de estos protocolos, y lo que realmente es WSGI.

Resumen:

  1. WSGI y uwsgi ambos son protocolos, no de servidores. Se usa para comunicarse con servidores web para el equilibrio de carga y, especialmente, para aprovechar las características adicionales que HTTP puro no puede proporcionar. Hasta ahora, Nginx y Cherokee han implementado este protocolo.
  2. uWSGI es un servidor y uno de los protocolos que implementa es WSGI (no confunda el protocolo uwsgi con el servidor uWSGI). WSGI es un Python specification. Hay varias implementaciones de la especificación WSGI y está destinada a ser utilizada para algo más que servidores de aplicaciones/servidores web, pero hay bastantes servidores de aplicaciones WSGI (es decir, CherryPy, que también tiene un servidor web listo para producción compatible con WSGI) , ¡si ya no estabas confundido!).
  3. Comparar uwsgi con WSGI es comparar naranjas con manzanas.
+3

Typo: "1. ** uwsgi ** es un protocolo, no un servidor". -> "1. ** WSGI ** es un protocolo, no un servidor". – Aman

+6

En realidad, lo que escribí para 1 es correcto, pero es cierto que WSGI es un protocolo además de uwsgi, por lo que ambas afirmaciones que ha escrito son correctas :). Por supuesto, sin el resto del contexto de 1. Es el protocolo utilizado por el servidor uWSGI. http://wiki.nginx.org/HttpUwsgiModule, - "No confunda el protocolo uwsgi con el servidor uWSGI (que habla el protocolo uwsgi)" –

+3

Ah, está bien. Creí que intentabas establecer una contienda entre la afirmación 1. "wsgi es un protocolo ..." y 2. "uwsgi es un servidor que implementa el protocolo". – Aman

12

Creo que esto aquí http://flask.pocoo.org/docs/deploying/uwsgi/ es una buena respuesta para aclarar la confusión. La pregunta no es tonta, le sucede a cualquiera que vea los dos términos y no tenga información previa sobre cómo funcionan las cosas fuera del mundo mod_PHP (por ejemplo, nada en contra de php o gente)

El sitio explica bien en términos prácticos qué es necesario y cuál es la diferencia, así como un buen ejemplo de implementación para nginx.

Cuestiones relacionadas