Pengantar Server WSGI: Bagian Satu

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

gambar

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:

  1. Server web ( Nginx, Apache , dll.);
  2. 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.

gambar

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


gambar

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


gambar
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


gambar

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.

Source: https://habr.com/ru/post/id426957/


All Articles