Benchmark Performa CGI Menunjukkan Rust Mencapai 5.700 Request Per Detik, Menantang Asumsi Pengembangan Web Modern

Tim Komunitas BigGo
Benchmark Performa CGI Menunjukkan Rust Mencapai 5.700 Request Per Detik, Menantang Asumsi Pengembangan Web Modern

Sebuah studi performa terbaru telah memicu kembali diskusi tentang teknologi Common Gateway Interface ( CGI ), dengan hasil mengejutkan yang menantang asumsi umum tentang pendekatan pengembangan web. Benchmark tersebut menguji berbagai bahasa pemrograman yang menjalankan skrip CGI pada server AMD 60-core, mengungkap perbedaan performa yang signifikan dan memicu perdebatan tentang apakah teknologi lama layak dipertimbangkan kembali.

Gambaran umum penggunaan teknologi CGI dengan Rust untuk permintaan web berperforma tinggi, menekankan relevansi berkelanjutan teknologi lama dalam pengembangan web modern
Gambaran umum penggunaan teknologi CGI dengan Rust untuk permintaan web berperforma tinggi, menekankan relevansi berkelanjutan teknologi lama dalam pengembangan web modern

Hasil Performa Mengungkap Hierarki Bahasa yang Jelas

Hasil benchmark menunjukkan variasi performa yang dramatis di berbagai bahasa pemrograman. Bahasa yang dikompilasi mendominasi grafik performa, dengan C memimpin di sekitar 5.800 request per detik, diikuti ketat oleh Rust di 5.700 request per detik. Go mencapai 3.400 request per detik meskipun memiliki overhead inisialisasi runtime. Di antara bahasa yang diinterpretasi, Python berhasil mencapai 700 request per detik, sementara JavaScript dengan Node.js mengejutkan banyak orang dengan mencapai 600 request per detik. Perl menghasilkan 500 request per detik, dan skrip Bash hampir tidak mampu mencapai 40 request per detik sambil mengonsumsi semua sumber daya CPU yang tersedia.

CGI (Common Gateway Interface): Protokol standar yang memungkinkan web server menjalankan program dan mengembalikan outputnya sebagai halaman web

Hasil Benchmark Performa CGI (Permintaan per Detik)

Bahasa Performa Catatan
C ~5,800 req/s Performa tertinggi
Rust ~5,700 req/s Sangat mendekati performa C
Go ~3,400 req/s Meskipun ada overhead inisialisasi runtime
Python ~700 req/s Cukup baik untuk bahasa interpreted
JavaScript ( Node.js ) ~600 req/s Performa yang mengejutkan
Perl ~500 req/s Performa bahasa scripting yang layak
Bash ~40 req/s Memenuhi semua CPU yang tersedia

Lingkungan Pengujian: Mesin virtual berbasis AMD Genoa 60 VCPU dengan RAM 240 GB

Komunitas Memperdebatkan Kompleksitas Pengembangan Web Modern

Hasil performa tersebut telah memicu diskusi yang lebih luas tentang kompleksitas pengembangan web dan kembali ke teknologi yang lebih sederhana. Banyak developer mengungkapkan frustrasi dengan framework JavaScript modern dan toolchain yang terkait. Salah satu anggota komunitas mencatat bagaimana ChatGPT telah menghidupkan kembali minat pada vanilla JavaScript dan jQuery , menemukan beban mental yang jauh lebih ringan dibandingkan dengan pola useCallback, useEffect, dan useMemo React , yang mereka bandingkan dengan manajemen memori manual dalam pemrograman C .

Diskusi meluas ke lingkungan korporat di mana developer mengamati sistem yang sangat over-provisioned. Aplikasi enterprise sering memerlukan sumber daya yang sangat besar untuk tugas yang relatif sederhana, dengan satu contoh mengutip aplikasi monitoring yang menggunakan 500MB memori per sistem yang dipantau hanya untuk polling data setiap lima menit.

Relevansi CGI yang Tak Terduga dalam Komputasi Modern

Meskipun dianggap ketinggalan zaman, CGI menemukan advokat baru yang berargumen bahwa kesederhanaannya menawarkan keuntungan dalam skenario tertentu. Teknologi ini menyediakan isolasi proses yang lengkap, pembersihan memori otomatis, dan menghilangkan kekhawatiran tentang manajemen proses yang berjalan lama. Setiap request berjalan dalam prosesnya sendiri, yang berakhir setelah selesai, mencegah kebocoran memori dan mengurangi risiko keamanan antar request.

Memiliki handler request ephemeral yang terisolasi sepenuhnya tanpa shared state dan tanpa runtime persisten membuat model pemrograman yang sangat bersih dan bagus.

Beberapa developer menyoroti utilitas CGI untuk sistem embedded, alat korporat internal, dan aplikasi lalu lintas rendah di mana overhead framework modern tidak dapat dibenarkan. Pendekatan ini juga menyederhanakan deployment karena executable baru dapat dijatuhkan di tempatnya tanpa restart layanan atau orkestrasi yang kompleks.

Perbandingan CGI vs Pengembangan Web Modern

Keunggulan CGI:

  • Isolasi proses lengkap per permintaan
  • Pembersihan memori otomatis saat proses berakhir
  • Tidak ada state yang dibagi antar permintaan
  • Deployment sederhana (executable drop-in)
  • Tidak memerlukan manajemen layanan
  • Agnostik terhadap bahasa pemrograman

Kekurangan CGI:

  • Overhead CPU yang lebih tinggi dari operasi fork/exec
  • Potensi masalah sinkronisasi dengan sumber daya bersama
  • Masalah keamanan tradisional dengan eksekusi document root
  • Tidak cocok untuk aplikasi throughput tinggi
  • Terbatas pada model request/response

Alternatif Modern:

  • FastCGI: Proses persisten dengan interface mirip CGI
  • Reverse proxy dengan backend HTTP
  • Fungsi serverless (model eksekusi serupa)
  • Microservices berbasis container

Tantangan Teknis dan Pertimbangan Keamanan

Benchmark mengungkap beberapa masalah teknis yang melekat pada implementasi CGI . Versi Rust mengandung error time-of-check-to-time-of-use dalam inisialisasi database, mendemonstrasikan bagaimana CGI dapat memperkenalkan masalah sinkronisasi sambil menghilangkan alat sinkronisasi tradisional. Masalah seperti itu biasanya tidak akan terjadi pada server aplikasi persisten di mana setup database terjadi sekali selama startup.

Diskusi keamanan berpusat pada reputasi historis CGI versus properti keamanan aktualnya. Meskipun banyak yang mengasosiasikan CGI dengan kerentanan karena skrip yang ditulis dengan buruk dari tahun 1990-an, protokol itu sendiri tidak secara inheren kurang aman dibandingkan alternatif modern. Namun, praktik tradisional menempatkan skrip yang dapat dieksekusi dalam document root web server memang menciptakan vektor serangan potensial, terutama ketika dikombinasikan dengan kerentanan upload file.

Studi performa mendemonstrasikan bahwa meskipun CGI mungkin tidak cocok untuk aplikasi lalu lintas tinggi yang memerlukan ribuan request per detik, ini tetap menjadi opsi yang layak untuk banyak skenario dunia nyata. Saat developer terus mencari alternatif untuk web stack modern yang kompleks, kesederhanaan dan keandalan CGI membuatnya layak dipertimbangkan kembali untuk kasus penggunaan yang sesuai.

Referensi: Serving a half billion requests per day with Rust + CGI