WSGI ve uWSGi ile Nginx [kapalı]


90

WSGI VS uWSGI'yi Nginx ile kullanırken artıları / eksileri açıklayabilir misiniz ?

Şu anda Django web sitesi için hazırladığım ancak WSGI veya uWSGI ile gitmem gerektiğine karar veremediğim bir üretim sunucusu oluşturuyorum. Her bir yapılandırmayı neyin farklılaştırdığını ayrıntılı olarak açıklayabilir misiniz? Hangi yapılandırma en iyi ölçeklendirmeli?

Şimdiden teşekkürler


Bu blog yazısı , bir çok Python WSGI sunucusunun, sonunda bir özet ve bazı önerilerle birlikte çok detaylı bir karşılaştırmasıdır.
Lowe Thiderman

Ayrıca, gerçekten tehlikeli olan ve olabileceklerinden daha kötü görünmelerine neden olan bazı sunucular için yapılandırmalar kullanır. Bu karşılaştırmada ne okunduğuna dikkat edilmelidir.
Graham Dumpleton

25
WSGI bir belirtimdir. uWSGI, WSGI spesifikasyonunun bir uygulamasını sağlar. Onları karşılaştıramazsın. Yalnızca farklı uygulamaları karşılaştırabilirsiniz.
Graham Dumpleton

Yanıtlar:


101

Pekala, arkadaşlar bu kafa karışıklığı birkaç kaynaktan gelen ayrıntı eksikliği ve bu protokollerin isimlendirilmesi ve WSGI'nin gerçekte ne olduğu yüzünden.

Özet:

  1. WSGI ve uwsgi hem protokoller ARE , hem de sunucular değil. Yük dengeleme için web sunucuları ile iletişim kurmak ve özellikle saf HTTP'nin sağlayamayacağı ekstra özelliklerden yararlanmak için kullanılır. Şimdiye kadar Nginx ve Cherokee bu protokolü uyguladı.
  2. uWSGI bir sunucudur ve uyguladığı protokollerden biri WSGI'dir (uwsgi protokolünü uWSGI sunucusuyla karıştırmayın). WSGI, bir Python spesifikasyonudur . WSGI spesifikasyonunun birkaç uygulaması vardır ve uygulama sunucuları / web sunucularından daha fazlası için kullanılması amaçlanmıştır, ancak oldukça az sayıda WSGI uygulama sunucusu vardır (örn. CherryPy, üretime hazır bir WSGI uyumlu web sunucusuna da sahiptir. , eğer yeterince kafanız karışmamışsa!).
  3. Uwsgi'yi WSGI ile karşılaştırmak, portakalları elmalarla karşılaştırmaktır.

3
Yazım hatası : "1. uwsgi bir protokoldür, sunucu değil." -> "1. WSGI bir protokoldür, sunucu değil."
Aman

9
Aslında, 1 için yazdıklarım doğrudur, ancak WSGI'nin uwsgi kadar bir protokol olduğu da doğrudur, bu yüzden yazdığınız her iki ifade de doğrudur :). Elbette, içeriğin geri kalanı olmadan 1. uWSGI sunucusu tarafından kullanılan protokoldür. wiki.nginx.org/HttpUwsgiModule , - "uwsgi protokolünü uWSGI sunucusuyla (uwsgi protokolünü konuşan) karıştırmayın"
Derek Litz

4
Ah tamam. 1. "wsgi bir protokoldür .." ve 2. "uwsgi, protokolü uygulayan bir sunucudur" arasında bir karşılaştırma yapmaya çalıştığınızı düşünmüştüm.
Aman

2
@DerekLitz, django yaptığımız zaman hangi sunucularda çalışıyor python manage.py runserver?
Piyush S. Wanare

python manage.py runserverDjango'da yerleşik bir dahili sunucudur. Apaçi, nginx, gunicorn veya başka bir şey değil. django-extensionssağlayan bir runserver_plusWerkzeug çerçeve, ancak herhangi bir sunucuya yakın olarak budur kullandığı runserveralır.
Mike DeSimone

32

Python'u ana web sunucunuzdan ayrı bir işlemde çalıştırmak genellikle en iyisidir. Bu şekilde, web sunucusu statik içeriği gerçekten hızlı bir şekilde sunan çok sayıda küçük iş parçacığına sahip olabilirken, ayrı Python işlemleriniz büyük ve ağır olacak ve her biri kendi Python yorumlayıcısını çalıştıracaktır. O kadar sade WSGIki kötü, çünkü nginx dizilerinizin her birini büyük bir Python yorumlayıcısıyla şişiriyor. Kullanılması flupveya gunicornveya uWSGIarkasında nginxo boşaltır çünkü nginx kadar içerik sadece hizmet, çok daha iyi olduğunu ve bağımsız dinamik içerik sunmak için ekrana getirmek kaç ağır Python ipler arasında seçtiğiniz, minik ışık nginx ipler çalıştırmak için kaç seçmenize olanak tanır. İnsanlar gunicornşu anda çok mutlu görünüyor , ancak bu üç seçenekten herhangi biri iyi çalışmalı.

İleriye dönük olarak, yük ciddileşmeye başladığında Python'u başka bir sunucuya taşımak için sizi serbest bırakır.


1
Cevabınız biraz kafam karıştı. Nginx içinde herhangi bir WSGI uygulamasını çalıştırdığından bahsettiğini göremiyorum. Ana wsgi.org sitesine başvurdu. WSGI ve uWSGI arasındaki orijinal karşılaştırması bu nedenle ilk etapta biraz aptalca çünkü uWSGI, WSGI belirtiminin bir uygulamasıdır. Siz, 'nginx dizilerinizin her birini büyük bir Python yorumlayıcısıyla şişiriyor' diyerek kafa karıştırıcı bir şekilde genel WSGI terimini kullandınız. WSGI belirtiminin kendisi bunu yapamaz, yalnızca uygulamalar yapabilir.
Graham Dumpleton

1
Nginx + mod_wsgi (takılabilir modül) ve nginx + uWSGI (uygulama sunucusu konteyneri) karşılaştırıyor olsaydık mantıklı olabilirdi.
clime

Yani, Python web uygulamalarını çalıştırmak için Nginx'i kullanmaya gelince, Manlio Perillo'nun mod_wsgi'si ölü yazılım olduğundan ve tavsiye edilmediğinden, iyi çözümler ya gunicorn ya da uWSGI ile WSGI ya da Flup ile FastCGI'dir?
Gülbahar

19

Bunun tam burada http://flask.pocoo.org/docs/deploying/uwsgi/ kafa karışıklığını gidermek için iyi bir cevap olduğuna inanıyorum . Soru aptalca değil, iki terimi gören ve mod_PHP dünyasının dışında işlerin nasıl yürüdüğüne dair önceden bilgisi olmayan herkesin başına geliyor (örneğin php veya milletlere karşı hiçbir şey yok)

Site, nginx için iyi bir dağıtım örneğinin yanı sıra neye ihtiyaç duyulduğunu ve farkın ne olduğunu pratik terimlerle açıklamayı iyi yapıyor.


Kolaylık olması açısından, Flask wiki'nin açıklaması burada alıntılanmıştır:

uWSGI, nginx, lighttpd ve cherokee gibi sunucularda bir dağıtım seçeneğidir; diğer seçenekler için bkz. FastCGI ve Bağımsız WSGI Kapları. WSGI uygulamanızı uWSGI protokolüyle kullanmak için önce bir uWSGI sunucusuna ihtiyacınız olacaktır. uWSGI hem bir protokol hem de bir uygulama sunucusudur; uygulama sunucusu uWSGI, FastCGI ve HTTP protokollerine hizmet edebilir.

En popüler uWSGI sunucusu, bu kılavuz için kullanacağımız uwsgi'dir. Takip etmek için kurulu olduğundan emin olun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.