Common Gateway Interface ( CGI ), sebuah teknologi web dari tahun 1990-an yang sebagian besar ditinggalkan karena dianggap terlalu lambat, kini mengalami minat yang meningkat di kalangan developer. Pengujian terbaru menunjukkan bahwa CGI dapat menangani beban yang mengesankan pada hardware modern, menantang keyakinan lama tentang keterbatasannya.
Eksperimen Jake Gold menunjukkan bahwa program CGI berbasis Go yang berjalan pada prosesor AMD 3700X 16-thread dapat melayani lebih dari 2.400 permintaan per detik, yang setara dengan lebih dari 200 juta permintaan harian. Tingkat performa ini menempatkan CGI kembali dalam persaingan untuk aplikasi web serius, sesuatu yang tampak mustahil beberapa tahun lalu.
Metrik Performa:
- Permintaan per detik: 2.400+
- Kapasitas permintaan harian: 200+ juta
- Perangkat keras pengujian: Prosesor 16-thread AMD 3700X
- Implementasi: Program CGI Go + SQLite
Masalah Awal dan Mengapa Hal Itu Bertahan
CGI bekerja dengan membuat proses baru untuk setiap permintaan web - memulai program, menjalankannya, dan kemudian mematikannya sepenuhnya. Pada akhir 1990-an, pendekatan ini terbukti sangat lambat, mendorong developer untuk menciptakan alternatif seperti mod_php PHP dan FastCGI untuk menjaga kode tetap berjalan di memori antar permintaan.
Diskusi komunitas mengungkapkan betapa dalamnya pelajaran ini tertanam dalam pemikiran developer. Banyak programmer menghabiskan puluhan tahun menghindari pola process-per-request, yakin bahwa pola tersebut cacat secara fundamental. Namun, keyakinan ini didasarkan pada keterbatasan komputasi tahun 1990-an daripada masalah inheren dengan pendekatan itu sendiri.
Konteks Historis:
- Masalah asli: Overhead pembuatan proses pada perangkat keras tahun 1990-an
- Bahasa pemrograman lama: Perl , Python , Java (waktu startup yang lambat)
- Bahasa pemrograman modern: Go , Rust (waktu startup yang cepat)
- Masalah keamanan: Kerentanan Shellshock (2014), masalah validasi input
Keunggulan Modern Muncul
Lanskap komputasi saat ini telah berubah secara dramatis. Server sekarang umumnya memiliki ratusan thread CPU, dan bahkan mesin virtual kecil biasanya memiliki 16 core. Lebih penting lagi, bahasa seperti Go dan Rust memulai jauh lebih cepat daripada skrip Perl , Python , dan Java yang mendominasi pengembangan web awal.
Model process-per-request sebenarnya menawarkan beberapa keunggulan yang menarik di lingkungan modern. Setiap permintaan berjalan dalam isolasi lengkap, menghilangkan risiko keamanan yang berasal dari shared state antar permintaan. Isolasi ini juga membuat program CGI sangat baik dalam memanfaatkan beberapa core CPU secara bersamaan.
Yang paling penting, program CGI , karena berjalan sebagai proses terpisah, sangat baik dalam memanfaatkan banyak CPU !
Perdebatan Keamanan dan Performa
Minat yang meningkat terhadap CGI telah memicu perdebatan tentang implikasi keamanannya. Kritikus menunjuk pada sejarah kerentanan keamanan CGI , termasuk kerentanannya terhadap bug Shellshock pada tahun 2014. Namun, pendukung berpendapat bahwa masalah ini berasal dari praktik validasi input yang buruk daripada cacat fundamental dalam protokol CGI itu sendiri.
Perbandingan performa juga menimbulkan diskusi. Meskipun program Go yang menggunakan pendekatan tradisional dapat dengan mudah melebihi 10.000 permintaan per detik, tidak setiap aplikasi membutuhkan performa yang ekstrem seperti itu. Kesederhanaan dan manfaat isolasi CGI mungkin lebih penting daripada kecepatan mentah untuk banyak kasus penggunaan.
CGI vs Alternatif Modern:
- Keunggulan CGI: Isolasi proses yang lengkap, pemanfaatan multi-core yang sangat baik
- Pendekatan tradisional: 10.000+ permintaan/detik dimungkinkan dengan Go
- Trade-off: Keamanan dan kesederhanaan vs performa mentah
- Kasus penggunaan: Prototyping cepat, aplikasi polyglot, ekstensi pelanggan
Aplikasi Praktis Saat Ini
Kebangkitan CGI bukan hanya rasa ingin tahu akademis. Developer menemukan aplikasi praktis, terutama untuk rapid prototyping dan membuat aplikasi web polyglot di mana bahasa pemrograman yang berbeda menangani path URL yang berbeda. Pendekatan ini juga bekerja dengan baik untuk memungkinkan pelanggan memperluas perangkat lunak dengan kode kustom tanpa framework integrasi yang kompleks.
Server web modern seperti h2o merangkul tren ini, menawarkan file konfigurasi yang bersih yang membuat deployment CGI menjadi mudah. Beberapa developer bahkan melihat CGI sebagai fondasi yang lebih baik untuk serverless computing daripada fungsi lambda proprietary, karena didasarkan pada standar terbuka daripada implementasi khusus vendor.
Comeback CGI mewakili contoh yang menarik tentang bagaimana teknologi yang berubah dapat merehabilitasi pendekatan yang tampaknya usang. Meskipun mungkin tidak sepenuhnya menggantikan framework web modern, kesederhanaan dan properti isolasi CGI membuatnya layak dipertimbangkan kembali untuk aplikasi tertentu.
Referensi: Serving 200 million requests per day with a cgi-bin