Mengapa Server HTTP Apache begitu rumit?

14

Server HTTP Apache adalah proyek yang cukup besar — ​​jauh lebih besar daripada, katakanlah, lighthttpatau nginxatau tentu saja "server HTTP sederhana" yang Anda lihat beredar di tutorial C / C ++.

Untuk apa kode tambahan itu? Apakah itu menambah keamanan / stabilitas (dan jika demikian, bagaimana?) Atau itu hanya untuk melakukan hal-hal seperti parsing conffile Apache / .htaccessketik hal-hal (dan, saya kira, VirtualHostsdll).

Saya meminta untuk tidak mengkritik Apache, tetapi karena saya tertarik untuk menulis semacam server web dan saya ingin mengetahui hal-hal yang, walaupun mungkin tidak jelas, penting untuk diingat untuk server web yang aman, stabil dan cepat.

Aaron Yodaiken
sumber
Ini membantu untuk menyingkirkan semua orang yang tidak membawa peralatan untuk menanganinya.
Joel Etherton
6
Ini bukan jawaban yang nyata - tetapi saya mendengar namanya berasal dari fakta bahwa ia memiliki banyak kontributor bahkan di awal pengembangan. Banyak tambalan yang dikontribusikan, menjadikannya server Tambalan. Kisah nyata.
Jeremy
+1 @ Joel Etherton: Kisah bagus, terutama karena itu benar. Tapi jangan pernah membiarkan kebenaran menghalangi cerita yang bagus :)
therobyouknow
+1 @aharon untuk contoh mempertanyakan status quo. Tapi "menulis server web"? Bukankah kita menciptakan kembali roda di sini ketika ada banyak penawaran dan juga Apache?
therobyouknow

Jawaban:

20

Ini jauh lebih kompleks karena:

Tetapi juga:

  • Ini lebih aktif dikembangkan ( Perbandingan Status . Pada hari ini 2011-05-28, Apache httpd memiliki pembaruan terbaru, meskipun proses rilis yang melekat harus dihambat oleh kompleksitas yang diperluas sebagai lawan kompetitornya.)

Yang sedang berkata, jawaban R. berisi poin yang valid tentang arsitekturnya dan mengapa beberapa web server lain juga mendapatkan ketenaran relatif. Tergantung pada apa yang Anda inginkan.

Anda mungkin juga ingin melihat /programming/475386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-administer untuk bahan lainnya. Meskipun tidak secara langsung menjawab pertanyaan Anda, keseluruhan utas menunjukkan banyak perbedaan.


Jika tertarik untuk menulis server web dari awal, saya akan mengatakan mempelajari Apache httpd adalah hal yang baik, terutama jika Anda dapat melihat kembali bagaimana itu berkembang dari waktu ke waktu. Ini juga menunjukkan kepada Anda apa yang perlu Anda hindari (baik pada poin-poin yang dialamatkan dengan baik, dan tempat-tempat di mana itu mengungguli orang lain). Namun, kode ini mungkin agak rumit untuk memulai dan Anda mungkin lebih suka melihat server yang lebih kecil, lebih ringan untuk itu. Tetapi pelajari keseluruhan arsitekturnya dan bandingkan dengan yang lain.

haylem
sumber
1
+1: Hanya dengan membaca sejarah changelog bisa sangat membantu dalam mempelajari bagaimana server web itu sendiri berkembang dan tantangan apa yang tim lalui selama bertahun-tahun.
Joel Etherton
1
+1 @haylem "beberapa web-server lainnya mendapatkan keuntungan dari ketenaran relatif" - meyakinkan untuk membaca tentang alternatif untuk Apache yang dikatakan kompatibel dengan Apache, yaitu hanya akan melakukan pekerjaan yang sama.
therobyouknow
3

Menurut pendapat pribadi saya itu semua karena semua fitur yang dimilikinya. Anda dapat melakukan hal-hal dengan Apache yang tidak dapat Anda lakukan sekarang dengan nginx atau lighthttpd. Apache sebenarnya adalah platform yang dikirimkan dengan dukungan HTTP. Anda dapat menerapkan hampir semua protokol seperti FTP atau SMTP (lihat mod_echo misalnya). Ini memiliki dukungan untuk filter yang memungkinkan Anda untuk mis .: melayani kode PHP dari basis data alih-alih file (karena mod_php adalah modul filter dan bukan pembuat konten). Ini mungkin tampak seperti ide yang tidak terlalu berguna, tetapi secara umum Anda dapat menggunakan filter untuk mengubah konten yang masuk atau keluar tanpa perlu men-tweak produsen konten asli. Ini memiliki tweak untuk klien HTTP yang tidak ada lagi, tetapi saat itu, Apache adalah satu-satunya cara untuk melayani mereka secara konsisten dan bebas bug. Banyak dari itu tidak digunakan saat ini.

Kode tambahan juga digunakan untuk keamanan, karena mod_log_forensics bersama dengan CoreDumpDirectory menyediakan alat nyata ketika Anda merasa seseorang mengeksploitasi kerentanan keamanan. Belum pernah mendengar tentang hal seperti itu dalam kasus server web lain. Adapun stabilitas, itu berasal dari inti yang dirancang dengan baik, bukan beberapa kode tambahan. Ada orang-orang di mailing list dev dev, yang disebut "penstabil inti". Mereka sangat pilih-pilih tentang perubahan inti dan cenderung mendorong mereka ke modul, yang sebenarnya membuat Apache cukup stabil. Jika gagal, sebagian besar waktu adalah kegagalan modul dan bukan bug di server inti.

Jacek Prucia
sumber
3

Saya telah menggunakan Apache selama lebih dari dua belas tahun sebagai administrator dan pengembang untuk aplikasi web Perl, Python, dan Ruby yang besar. Apache adalah server web yang tangguh yang memiliki desain bersih / modular dan bengkok UNIX yang kuat. Salah satu fitur yang paling kuat adalah modularitasnya yang tipis dan dokumentasi yang baik. Ini adalah server web yang sangat mudah dikelola. Ini matang dan terbukti karena dapat dilihat dengan jelas oleh 15 tahun pangsa pasar yang dominan .

Walaupun dokumentasi pengguna sangat bagus, sayangnya ada sedikit dokumentasi berharga untuk pengembang / penulis modul, dan saya pikir ini cenderung sedikit menyakitkan karena tidak menarik sebanyak mungkin pengembang. Tapi itu sama sekali tidak berarti bahwa itu dirancang dengan buruk - hanya didokumentasikan dengan buruk dalam hal ini. Ada sebuah buku karya Nick Kew yang tampaknya menjadi sumber definitif untuk penulis modul. Tetapi alangkah baiknya jika proyek itu sendiri memiliki beberapa dokumentasi yang lebih baik tentang semua aspek modul penulisan.

Adapun itu over-engineered - omong kosong. Ini memiliki desain yang sangat baik. Ya, ada beberapa kutil di sana-sini, tetapi itu berlaku untuk semua perangkat lunak. Penggunaan kumpulan memori sangat fantastis, kemampuannya menyambungkan berbagai back-end berbicara tentang betapa bersih dan modularnya, ia memiliki C-API yang hebat, dan April membuat banyak hal lebih mudah, tidak hanya untuk proyek Apache untuk untuk pengembang dalam proyek lain. Jika Anda peduli tentang portabilitas, Anda akan menghargai April. Ini mungkin tidak sempurna, tetapi masih solid, dirancang dengan baik, dan sangat nyaman.

Dari sudut pandang berbagai fitur, fleksibilitas, administrasi, dukungan platform, skalabilitas, dokumentasi, dan kematangan, Apache adalah server web yang fantastis.

Mike Owens
sumber
-2

Ini over-desain / over-engineered. Terburuk dari semuanya, ia menggunakan APR (Apache Portable Runtime), lapisan mengasapi yang pada akhirnya menghabiskan banyak level panggilan fungsi dan alokasi memori dinamis dan membebaskan untuk mencapai yang setara dengan satu printfpanggilan. Ini semua mengarah ke itu menjadi:

  • sangat lambat
  • sangat haus akan sumber daya
  • mustahil untuk mengaudit keamanan
  • sulit dimengerti dan dimodifikasi
R .. GitHub BERHENTI MEMBANTU ICE
sumber
5
Anda kebanyakan menunjukkan jebakan kompleksitasnya dan (bisa diperdebatkan, tergantung pada bagian mana) desain yang buruk; Betapapun validnya pernyataan-pernyataan ini, itu bukan penyebab kompleksitasnya.
haylem
1
-1 untuk mengasapi April. Saya bekerja dengan April di era pra 1.0 dan saat itu tidak memperkenalkan mengasapi lebih dari yang sudah ada di basis kode 1,3. Alokasi memori dinamis juga dalam APR kurang lebih merupakan salinan tepat dari kode memori 1,3. Dan bahkan jika Anda benar ... bagaimana mengasapi apa pun membuat sesuatu yang mustahil untuk diaudit?
Jacek Prucia
setuju dengan @haylem (+1) dan juga: keempat poin di @R .. jawabannya: bagaimana Anda tahu? Apa yang Anda bandingkan. Anda mungkin benar tetapi poin Anda akan relatif, yaitu "sangat lambat" - tetapi dibandingkan dengan apa? Server lain seperti yang disebutkan di sini? Jika demikian, silakan kutip.
therobyouknow
Saya percaya situs web thttpd memiliki beberapa angka yang bagus untuk konten statis. Apa yang lebih mengejutkan adalah bahwa, dari pengalaman pribadi menjalankan sistem pekerjaan rumah siswa berbasis web, Apache juga jauh lebih lambat mod_perldaripada thttpd yang hanya menjalankan instance perl baru untuk setiap klien. Ini sudah lama sekali dan saya tidak pernah melakukan pengujian yang ketat untuk melacak semua penyebabnya; departemen baru saja membeli server baru ...
R .. GitHub BERHENTI MEMBANTU ICE
@R: lagi-lagi, mengapa Anda menjalankannya dengan mod_perl :)
haylem