Artikel ini adalah terjemahan dari artikel Kevin Goldberg "Pengantar Server WSGI Python: Bagian 1" blog.appdynamics.com/engineering/an-introduction-to-python-wsgi-servers-part-1 dengan tambahan kecil dari penerjemah
Sejarah Singkat Server Python WSGI
Server 
WSGI muncul karena server web pada waktu itu tidak dapat berinteraksi dengan aplikasi yang ditulis dengan Python. 
WSGI ( 
dilafalkan "whiz-gee" dengan "g" solid ) dikembangkan oleh Philip J. Ebi (bersama dengan Ian Biking dan lainnya) pada awal 2000-an. Modul Apache, yang dikenal sebagai 
mod_python , dikembangkan oleh Grigory Trubetskoy pada akhir 90-an, pada saat itu memproses sebagian besar aplikasi Python. Namun, 
mod_python bukan spesifikasi resmi. Itu hanya dibuat agar pengembang dapat menjalankan kode Python di server. Sayangnya, pendekatan ini tidak aman dan pengembang mulai mencari solusi baru.
WSGI (Web-Server Gateway Interface) adalah keturunan dari 
CGI (Common Gateway Interface). Ketika web mulai berkembang, 
CGI tumbuh karena dukungan sejumlah besar bahasa dan kurangnya solusi lainnya. Namun, solusi ini lambat dan terbatas. 
WSGI dikembangkan sebagai antarmuka untuk merutekan permintaan dari server web (Apache, Nginx, dll.) Ke aplikasi web.
Server dan aplikasi web
Dalam kasus yang paling sederhana, 
WSGI terdiri dari dua entitas utama:
- Server web ( Nginx, Apache , dll.);
- Aplikasi web yang ditulis dengan Python.
Prinsip kerja:
Server web mengeksekusi kode dan mengirimkan informasi dan fungsi panggilan balik yang terkait dengan permintaan http ke aplikasi web. Kemudian permintaan di sisi aplikasi diproses dan respons dikirim ke server web.

Secara berkala, antara server web dan aplikasi web, ada satu atau lebih lapisan perantara. Lapisan tersebut memungkinkan, misalnya, menyeimbangkan antara beberapa aplikasi web dan pra-pemrosesan (preprocessing) dari konten yang dikirimkan.
Berikut adalah contoh kerangka kerja yang mendukung WSGI:
Mengapa WSGI?
Anda mungkin bertanya, 
"Oke, tapi mengapa WSGI?" . Ada beberapa alasan untuk ini:
- Server WSGI dirancang untuk menangani banyak permintaan sekaligus. Dan kerangka kerja tidak dirancang untuk menangani ribuan permintaan dan tidak memberikan keputusan tentang cara terbaik mengarahkan mereka (permintaan) dari server web.
- WSGI mempercepat pengembangan aplikasi web yang ditulis dengan Python. Jika Anda menggunakan kerangka kerja (Django atau yang lainnya) dalam pengembangan aplikasi web Anda, Anda tidak perlu khawatir tentang bagaimana infrastruktur khusus Anda menggunakan standar WSGI .
- WSGI memberi Anda fleksibilitas untuk memodifikasi komponen tumpukan web tanpa mengubah aplikasi yang bekerja dengan WSGI .
Server 
WSGI tersedia dalam berbagai variasi. Beberapa ditujukan untuk solusi fullstack, sementara yang lain cocok untuk kerangka kerja tertentu. Misalnya, 
Gunicorn bekerja dengan 
Django tepat di luar kotak. Berikut ini adalah enam server WSGI yang ada di pasaran saat ini: 
Bjoern , 
uWSGI , 
mod_wsgi , 
Meinheld , 
CherryPy , dan 
Gunicorn .
Bjoern
Bjoern adalah server WSGI asinkron yang ditulis dalam C. Ditulis dari awal menjadi kecil dan cepat, dikembangkan menggunakan 
http_parser dari Ryan Dahl (pencipta Node.js) dan 
loop acara 
Libev dari Mark Lehmann.
Dengan ukuran unduhan hanya 18 KB, terdiri dari kurang dari 800 baris kode. Ini membutuhkan kurang dari 1 MB RAM dan tidak menggunakan 
coroutine atau utas. 
Bjoern sepenuhnya kompatibel dengan 
WSGI dan dianggap sebagai salah satu server 
WSGI berkinerja tinggi.
Bjoern mendukung koneksi persisten dan dapat mengikat ke soket Unix atau alamat TCP. 
Bjoern dianggap lebih cepat dari Gunicorn dan kurang kembung dari 
uWSGI dan 
Meinheld . Salah satu kelemahan server ini adalah kurangnya dokumentasi normal dengan contoh yang jelas.
uWSGI
 uWSGI
uWSGI dikembangkan oleh 
Unbit (Italia) dengan tujuan menjadi solusi fullstack yang mampu menciptakan layanan hosting. Dinamai sesuai dengan standar 
WSGI dan dibuat sebagai plug-in untuk salah satu proyek perusahaan.
Proyek yang luas dan terus berkembang, 
uWSGI memungkinkan Anda melakukan lebih dari sekadar aplikasi hosting web. Banyak yang menemukan 
uWSGI alat yang ampuh, sementara yang lain merasa agak kembung. Dimulai dengan versi 2.0, uWSGI juga mendukung peluncuran aplikasi web dalam bahasa Lua, Perl, Ruby dan lainnya.
mod_wsgi
mod_wsgi , modul server HTTP Apache yang dikembangkan oleh Graham Dumpleton (sebelumnya salah satu pengembang 
mod_python ), menyediakan antarmuka 
WSGI untuk aplikasi web. Kompatibel dengan versi bahasa Python2 dan Python3. Dibuat sebagai alternatif dari solusi lain untuk mengintegrasikan aplikasi web seperti 
CGI , 
FastCGI dan 
mod_python . Itu dapat diinstal sebagai modul Apache atau melalui 
mod_wsgi express . Metode kedua menyederhanakan instalasi untuk pengembang Python yang tidak begitu akrab dengan Apache. Manfaat lain:
• Anda tidak memerlukan hak akses root dengan instalasi penuh.
• Lingkungan lokal dibuat, yang mengurangi risiko dampak negatif pada pengaturan yang ada.
Pengembangan 
mod_wsgi sebagai proyek mungkin tampak lambat karena fakta bahwa modul dikembangkan oleh satu pengembang. Kerugian lain adalah bahwa dokumentasi saat ini tidak tertata dengan baik dan mungkin sudah usang.
Saat ini, fokusnya adalah menyederhanakan implementasi Apache menggunakan 
mod_wsgi di lingkungan menggunakan 
Docker .
Terikat
Diciptakan oleh Yutaka Matsubara, 
Meinheld adalah server yang kompatibel dengan 
WSGI yang memanfaatkan kekuatan 
picoev dan 
greenlet untuk melakukan asynchronous I / O. Ini dapat digunakan dengan server HTTP mandiri atau melalui 
Gunicorn .
Meinheld memiliki ketergantungan pada komponen pihak ketiga yang disebut greenlet.
Repositori kode sumber terletak di 
GitHub . 
Meinheld mendukung soket web dan menyertakan beberapa 
monkeypatch atas modul lain untuk fungsionalitas yang ditingkatkan.
Ceri
 CherryPy
CherryPy - lebih dikenal sebagai kerangka Python minimalis untuk menulis aplikasi web, 
CherryPy juga dilengkapi dengan server web thread-WSGI dan dukungan untuk protokol HTTP / 1.1. Tim pengembangan 
CherryPy menggambarkan server webnya sebagai server HTTP yang siap-produksi, berkecepatan tinggi, dan di-thread-threaded. Dia memiliki:
• Pengaturan cepat, mudah;
• skalabilitas;
• Solusi kecil dan mudah digunakan untuk aplikasi Python Anda;
• Dukungan SSL.
CherryPy membedakan dirinya dari server 
WSGI yang lebih terkenal karena kemudahan penggunaan dan kenyamanan pengembangnya. Anda dapat menulis aplikasi web kecil dalam beberapa menit dengan menjalankannya dalam beberapa proses dan membuat hanya satu file yang disebut server.py. Dengan menggabungkan 
CherryPy dengan Nginx sebagai server proxy, Anda mendapatkan cara yang andal untuk melayani aplikasi web Anda. 
CherryPy dibuat oleh Remy Delon. Dia ingin membuat struktur yang sedekat mungkin dengan 
prinsip-prinsip utama pembangunan di Python .
Gunicorn
 Gunicorn
Gunicorn adalah 
server WSGI yang dirancang untuk digunakan pada sistem UNIX. Namanya adalah versi singkat dan gabungan dari kata-kata "Green Unicorn". Ada unicorn hijau di situs proyek itu sendiri. 
Gunicorn telah diangkut dari proyek Unicorn dari Ruby. Ini relatif cepat, intensif sumber daya, mudah diluncurkan, dan bekerja dengan berbagai kerangka kerja web.
Tim pengembang merekomendasikan penggunaan 
Gunicorn bersama dengan Nginx, di mana Nginx digunakan sebagai server proxy.
Kesimpulan
Dalam artikel ini, enam server WSGI paling populer saat ini telah 
diuraikan : 
Bjoern , 
uWSGI , 
mod_wsgi , 
Meinheld , 
CherryPy , dan 
Gunicorn . Server mana yang digunakan untuk Anda tergantung pada kondisi dan persyaratan untuk aplikasi Anda. Bagian selanjutnya akan menganalisis kinerja enam server WSGI ini.