Penanda Aras Prestasi CGI Menunjukkan Rust Mencapai 5,700 Permintaan Sesaat, Mencabar Andaian Pembangunan Web Moden

Pasukan Komuniti BigGo
Penanda Aras Prestasi CGI Menunjukkan Rust Mencapai 5,700 Permintaan Sesaat, Mencabar Andaian Pembangunan Web Moden

Kajian prestasi terkini telah mencetuskan semula perbincangan mengenai teknologi Common Gateway Interface ( CGI ), dengan keputusan mengejutkan yang mencabar andaian biasa tentang pendekatan pembangunan web. Penanda aras tersebut menguji pelbagai bahasa pengaturcaraan yang menjalankan skrip CGI pada pelayan AMD 60-teras, mendedahkan perbezaan prestasi yang ketara dan mencetuskan perdebatan sama ada teknologi lama patut dipertimbangkan semula.

Gambaran keseluruhan penggunaan teknologi CGI dengan Rust untuk permintaan web berprestasi tinggi, menekankan relevan berterusan teknologi lama dalam pembangunan web moden
Gambaran keseluruhan penggunaan teknologi CGI dengan Rust untuk permintaan web berprestasi tinggi, menekankan relevan berterusan teknologi lama dalam pembangunan web moden

Keputusan Prestasi Mendedahkan Hierarki Bahasa Yang Jelas

Keputusan penanda aras menunjukkan variasi prestasi yang dramatik merentasi bahasa pengaturcaraan yang berbeza. Bahasa yang dikompil menguasai carta prestasi, dengan C memimpin pada kira-kira 5,800 permintaan sesaat, diikuti rapat oleh Rust pada 5,700 permintaan sesaat. Go mencapai 3,400 permintaan sesaat walaupun mempunyai overhed permulaan runtime. Antara bahasa yang ditafsir, Python berjaya mencapai 700 permintaan sesaat, manakala JavaScript dengan Node.js mengejutkan ramai dengan mencapai 600 permintaan sesaat. Perl menyampaikan 500 permintaan sesaat, dan skrip Bash hampir tidak berjaya mencapai 40 permintaan sesaat sambil menggunakan semua sumber CPU yang tersedia.

CGI (Common Gateway Interface): Protokol standard yang membolehkan pelayan web melaksanakan program dan mengembalikan output mereka sebagai halaman web

Keputusan Penanda Aras Prestasi CGI (Permintaan per Saat)

Bahasa Prestasi Nota
C ~5,800 req/s Prestasi tertinggi
Rust ~5,700 req/s Sangat hampir dengan prestasi C
Go ~3,400 req/s Walaupun terdapat overhed permulaan runtime
Python ~700 req/s Membanggakan untuk bahasa yang ditafsir
JavaScript ( Node.js ) ~600 req/s Prestasi yang mengejutkan
Perl ~500 req/s Prestasi bahasa skrip yang baik
Bash ~40 req/s Memenuhi semua CPU yang tersedia

Persekitaran Ujian: Mesin maya berasaskan 60 VCPU AMD Genoa dengan 240 GB RAM

Komuniti Membahaskan Kerumitan Pembangunan Web Moden

Keputusan prestasi telah mencetuskan perbincangan yang lebih luas tentang kerumitan pembangunan web dan kembali kepada teknologi yang lebih mudah. Ramai pembangun menyatakan kekecewaan dengan rangka kerja JavaScript moden dan rantaian alat yang berkaitan. Seorang ahli komuniti menyatakan bagaimana ChatGPT telah menghidupkan semula minat dalam vanilla JavaScript dan jQuery , mendapati overhed mental jauh lebih ringan berbanding dengan corak useCallback, useEffect, dan useMemo React , yang mereka bandingkan dengan pengurusan memori manual dalam pengaturcaraan C .

Perbincangan meluas kepada persekitaran korporat di mana pembangun memerhati sistem yang terlalu banyak diperuntukkan secara besar-besaran. Aplikasi perusahaan sering memerlukan sumber yang besar untuk tugas yang agak mudah, dengan satu contoh menyebut aplikasi pemantauan menggunakan 500MB memori bagi setiap sistem yang dipantau hanya untuk mengambil data setiap lima minit.

Relevan Tidak Dijangka CGI dalam Pengkomputeran Moden

Walaupun dianggap ketinggalan zaman, CGI mendapat penyokong baru yang berhujah kesederhanaannya menawarkan kelebihan dalam senario tertentu. Teknologi ini menyediakan pengasingan proses yang lengkap, pembersihan memori automatik, dan menghapuskan kebimbangan tentang pengurusan proses yang berjalan lama. Setiap permintaan berjalan dalam prosesnya sendiri, yang berakhir selepas selesai, menghalang kebocoran memori dan mengurangkan risiko keselamatan antara permintaan.

Mempunyai pengendali permintaan sementara yang berasingan sepenuhnya tanpa keadaan dikongsi dan tanpa runtime berterusan menjadikan model pengaturcaraan yang sangat bersih dan bagus.

Beberapa pembangun menyerlahkan kegunaan CGI untuk sistem terbenam, alat korporat dalaman, dan aplikasi trafik rendah di mana overhed rangka kerja moden tidak wajar. Pendekatan ini juga memudahkan penggunaan kerana boleh letak fail boleh laku baru di tempat tanpa memulakan semula perkhidmatan atau orkestrasi yang rumit.

Perbandingan CGI vs Pembangunan Web Moden

Kelebihan CGI:

  • Pengasingan proses yang lengkap bagi setiap permintaan
  • Pembersihan memori automatik semasa penamatan proses
  • Tiada keadaan berkongsi antara permintaan
  • Penggunaan mudah (boleh terus guna fail boleh laku)
  • Tidak memerlukan pengurusan perkhidmatan
  • Tidak bergantung kepada bahasa pengaturcaraan

Kelemahan CGI:

  • Overhed CPU yang lebih tinggi daripada operasi fork/exec
  • Isu penyegerakan yang berpotensi dengan sumber berkongsi
  • Kebimbangan keselamatan tradisional dengan pelaksanaan document root
  • Tidak sesuai untuk aplikasi throughput tinggi
  • Terhad kepada model permintaan/respons

Alternatif Moden:

  • FastCGI: Proses berterusan dengan antara muka seperti CGI
  • Proksi terbalik dengan backend HTTP
  • Fungsi serverless (model pelaksanaan yang serupa)
  • Mikroperkhidmatan berasaskan kontena

Cabaran Teknikal dan Pertimbangan Keselamatan

Penanda aras mendedahkan beberapa isu teknikal yang wujud dalam pelaksanaan CGI . Versi Rust mengandungi ralat time-of-check-to-time-of-use dalam permulaan pangkalan data, menunjukkan bagaimana CGI boleh memperkenalkan masalah penyegerakan sambil menghapuskan alat penyegerakan tradisional. Isu sedemikian biasanya tidak akan berlaku dalam pelayan aplikasi berterusan di mana persediaan pangkalan data berlaku sekali semasa permulaan.

Perbincangan keselamatan tertumpu pada reputasi sejarah CGI berbanding sifat keselamatan sebenar. Walaupun ramai mengaitkan CGI dengan kerentanan kerana skrip yang ditulis dengan buruk dari tahun 1990-an, protokol itu sendiri tidak sememangnya kurang selamat daripada alternatif moden. Walau bagaimanapun, amalan tradisional meletakkan skrip boleh laku dalam akar dokumen pelayan web memang mewujudkan vektor serangan yang berpotensi, terutamanya apabila digabungkan dengan kerentanan muat naik fail.

Kajian prestasi menunjukkan bahawa walaupun CGI mungkin tidak sesuai untuk aplikasi trafik tinggi yang memerlukan beribu-ribu permintaan sesaat, ia kekal sebagai pilihan yang berdaya maju untuk banyak senario dunia sebenar. Memandangkan pembangun terus mencari alternatif kepada tumpukan web moden yang kompleks, kesederhanaan dan kebolehpercayaan CGI menjadikannya berbaloi untuk dipertimbangkan semula bagi kes penggunaan yang sesuai.

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