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 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 - 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 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.