WSGI vs uWSGi dengan Nginx [ditutup]

90

Adakah yang bisa menjelaskan pro / kontra saat menggunakan WSGI VS uWSGI dengan Nginx.

Saat ini saya sedang membangun server produksi untuk situs web Django yang telah saya persiapkan tetapi tidak dapat memutuskan apakah saya harus menggunakan WSGI atau uWSGI. Bisakah Anda menjelaskan secara rinci apa yang membedakan setiap konfigurasi? Konfigurasi mana yang harus diskalakan dengan baik?

Terima kasih sebelumnya

fear_matrix
sumber
Posting blog ini adalah perbandingan yang sangat rinci dari banyak server Python WSGI, dengan ringkasan dan beberapa rekomendasi di bagian akhir.
Lowe Thiderman
Dan juga menggunakan konfigurasi untuk beberapa server yang benar-benar cerdik dan membuatnya tampak lebih buruk daripada yang seharusnya. Seseorang harus berhati-hati dengan apa yang dibaca dalam perbandingan itu.
Graham Dumpleton
25
WSGI adalah sebuah spesifikasi. uWSGI menyediakan implementasi dari spesifikasi WSGI. Anda tidak bisa membandingkannya. Anda hanya dapat membandingkan implementasi yang berbeda.
Graham Dumpleton

Jawaban:

101

Ok guys kebingungan ini karena kurangnya detail dari beberapa sumber, dan penamaan protokol-protokol tersebut, serta apa sebenarnya WSGI itu.

Ringkasan:

  1. WSGI dan uwsgi keduanya adalah protokol, bukan server. Ini digunakan untuk berkomunikasi dengan server web untuk penyeimbangan beban dan terutama untuk memanfaatkan fitur tambahan yang tidak dapat disediakan HTTP murni. Sejauh ini Nginx dan Cherokee telah mengimplementasikan protokol ini.
  2. uWSGI adalah server dan salah satu protokol yang diimplementasikannya adalah WSGI (jangan bingung antara protokol uwsgi dengan server uWSGI). WSGI adalah spesifikasi Python . Ada beberapa implementasi dari spesifikasi WSGI dan itu dimaksudkan untuk digunakan lebih dari sekedar server aplikasi / server web, tetapi ada cukup banyak server aplikasi WSGI (mis. CherryPy, yang kebetulan juga memiliki server web siap produksi yang memenuhi WSGI , jika Anda belum cukup bingung!).
  3. Membandingkan uwsgi dengan WSGI berarti membandingkan jeruk dengan apel.
Derek Litz
sumber
3
Salah ketik: "1. uwsgi adalah protokol, bukan server." -> "1. WSGI adalah protokol, bukan server."
Aman
9
Sebenarnya apa yang saya tulis untuk 1 itu benar, tapi memang WSGI adalah protokol dan juga uwsgi, jadi kedua pernyataan yang Anda tulis sudah benar :). Tentu saja, tanpa konteks 1. Ini adalah protokol yang digunakan oleh server uWSGI. wiki.nginx.org/HttpUwsgiModule , - "Jangan bingung antara protokol uwsgi dengan server uWSGI (yang menggunakan protokol uwsgi)"
Derek Litz
4
Ah baiklah. Saya pikir Anda mencoba menggambar perbedaan antara pernyataan 1. "wsgi adalah protokol .." dan 2. "uwsgi adalah server yang mengimplementasikan protokol".
Aman
2
@DerekLitz, Di server manakah django berjalan ketika kita melakukannya python manage.py runserver?
Piyush S. Wanare
python manage.py runserveradalah server internal yang dibangun pada Django. Ini bukan apache, nginx, gunicorn, atau yang lainnya. django-extensionsmenyediakan runserver_plusyang menggunakan kerangka kerja Werkzeug, tapi itu sedekat mungkin dengan server runserver.
Mike DeSimone
32

Biasanya yang terbaik adalah menjalankan Python dalam proses terpisah dari server web utama Anda. Dengan begitu, server web dapat memiliki banyak utas kecil yang menyajikan konten statis dengan sangat cepat, sementara proses Python Anda yang terpisah akan menjadi besar dan kelas berat dan masing-masing menjalankan penerjemah Python mereka sendiri. Jadi jelas WSGIitu buruk, karena itu membengkak setiap utas nginx Anda dengan penerjemah Python yang besar. Menggunakan flupatau gunicornatau uWSGIdi belakang nginxjauh lebih baik, karena membebaskan bahwa sampai nginx untuk hanya melayani konten, dan memungkinkan Anda memilih berapa banyak kecil benang nginx cahaya untuk menjalankan, independen pilihan Anda berapa banyak kelas berat benang Python Anda membawa untuk melayani konten dinamis. Orang-orang tampak sangat senang gunicornsaat ini, tetapi salah satu dari ketiga opsi itu seharusnya berfungsi dengan baik.

Ke depannya, ini juga membebaskan Anda untuk memindahkan Python ke server lain saat beban mulai menjadi serius.

Brandon Rhodes
sumber
1
Saya sedikit bingung dengan jawaban Anda. Saya tidak dapat melihat bahwa dia menyebutkan menjalankan segala jenis implementasi WSGI di dalam nginx. Dia mereferensikan situs wsgi.org utama. Perbandingan aslinya antara WSGI dan uWSGI dengan demikian pada awalnya agak konyol karena uWSGI adalah implementasi dari spesifikasi WSGI. Anda sendiri telah menggunakan istilah WSGI generik dengan cara yang membingungkan dalam mengatakan bahwa 'itu membengkak setiap utas nginx Anda dengan penerjemah Python yang besar'. Spesifikasi WSGI sendiri tidak bisa melakukan itu, hanya implementasinya yang bisa.
Graham Dumpleton
1
Masuk akal jika kita membandingkan nginx + mod_wsgi (modul pluggable) dan nginx + uWSGI (wadah server aplikasi).
clime
Jadi ketika menggunakan Nginx untuk menjalankan aplikasi web Python, karena mod_wsgi Manlio Perillo adalah deadware dan tidak direkomendasikan, solusi yang baik adalah WSGI dengan gunicorn atau uWSGI, atau FastCGI dengan Flup?
Gulbahar
19

Saya percaya ini di sini http://flask.pocoo.org/docs/deploying/uwsgi/ adalah jawaban yang bagus untuk menjernihkan kebingungan. Pertanyaannya tidak konyol, terjadi pada siapa saja yang melihat kedua istilah tersebut dan tidak memiliki info sebelumnya tentang cara kerja di luar dunia mod_PHP (misalnya tidak ada yang menentang php atau orang)

Situs ini menjelaskan dengan baik secara praktis apa yang dibutuhkan dan apa perbedaannya serta contoh penerapan yang baik untuk nginx.


Demi kenyamanan, penjelasan dari Flask wiki dikutip di sini:

uWSGI adalah opsi penyebaran di server seperti nginx, lighttpd, dan cherokee; lihat FastCGI dan Standalone WSGI Containers untuk opsi lainnya. Untuk menggunakan aplikasi WSGI Anda dengan protokol uWSGI, Anda memerlukan server uWSGI terlebih dahulu. uWSGI adalah protokol dan server aplikasi; server aplikasi dapat melayani protokol uWSGI, FastCGI, dan HTTP.

Server uWSGI paling populer adalah uwsgi, yang akan kami gunakan untuk panduan ini. Pastikan untuk menginstalnya untuk mengikuti.

Abhishek Dujari
sumber