Apache HTTP Sunucusu neden bu kadar karmaşık?


14

Apache HTTP sunucusu oldukça büyük proje çok daha büyük diyelim ki, daha, lighthttpya nginxya kesinlikle "basit bir HTTP sunucuları" C / C etrafında yüzen bkz ++ öğreticiler.

Ekstra kod ne için? Güvenlik / kararlılık ekliyor mu (ve eğer öyleyse, nasıl?) Veya sadece Apache confdosyalarını / .htaccesstürü şeyleri (ve sanırım VirtualHostsvb.) Ayrıştırmak gibi şeyler yapmak için mi?

Apache'yi eleştirmemeyi istiyorum, çünkü bir tür web sunucusu yazmakla ilgileniyorum ve belki de açık olmasa da güvenli, istikrarlı ve hızlı bir web sunucusu için hatırlanması gereken şeyleri bilmek istiyorum.


Dişliyi paketlemek için paketlemeyen herkesi ayıklamaya yardımcı olur.
Joel Etherton

6
Bu gerçek bir cevap değil - ama ismin gelişimin erken dönemlerinde bile çok sayıda katkıda bulunduğu gerçeğinden geldiğini duydum. Çok sayıda yama eklendi ve onu bir Patchy sunucusu haline getirdi. Gerçek hikaye.
Jeremy

+1 @Joel Etherton: İyi hikaye, özellikle de doğru. Ama asla gerçeğin iyi bir hikayenin önüne geçmesine izin vermeyin :)
therobyouknow

Statükoyu sorgulama örneği için +1 @aharon. Ama "bir web sunucusu yazmak"? Apache'nin yanı sıra birçok teklif olduğunda burada tekerleği yeniden icat etmiyor muyuz?
therobyouknow

Yanıtlar:


20

Çok daha karmaşık çünkü:

Ayrıca:

  • Daha aktif olarak geliştirildi ( Durum Karşılaştırması . Bugün 2011-05-28 itibariyle, Apache httpd en son güncellemeye sahip olmasına rağmen, doğal serbest bırakma sürecinin rakiplerinin aksine genişletilmiş karmaşıklığı nedeniyle engellenmesi gerekiyor.)

Bununla birlikte, R.'nin cevabı mimarisi ve diğer bazı web sunucularının neden göreceli şöhretten yararlandığı hakkında geçerli noktaları içermektedir. Ne istediğine bağlı.

Daha fazla malzeme için /programming/475386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-administer adresini de incelemek isteyebilirsiniz . Sorunuza doğrudan cevap vermese de, tüm iş parçacığı birçok farklılığa dikkat çekiyor.


Sıfırdan bir web sunucusu yazmakla ilgileniyorsanız, Apache httpd'nin iyi bir şey olduğunu söyleyebilirim, özellikle de zaman içinde nasıl geliştiğine bakabilirsiniz. Ayrıca kaçınmanız gerekenleri de gösterir (hem iyi hitap ettiği noktalarda hem de başkaları tarafından daha iyi performans gösterdiği yerlerde). Bununla birlikte, kod başlangıçta biraz karmaşık olabilir ve bunun için daha küçük, daha hafif sunuculara bakmayı tercih edebilirsiniz. Ancak genel mimarisini inceleyin ve başkalarıyla karşılaştırın.


1
+1: Değişiklik günlüğü geçmişini okumak, web sunucusunun kendisinin nasıl geliştiğini ve ekibin yıllar boyunca hangi zorluklardan geçtiğini öğrenmede inanılmaz derecede öğretici olabilir.
Joel Etherton

1
+1 @haylem "diğer bazı web sunucuları göreceli şöhretten yararlanır" - Apache'ye uyumlu olduğu söylenen Apache'ye alternatifler hakkında bir şeyler okumak güven verici, yani hemen hemen aynı işi yapacak.
therobyouknow

3

Kişisel görüşüme göre, sahip olduğu tüm özellikler yüzünden hepsi bu. Şu anda yapamayacağınız Apache ile ne nginx ne de lighthttpd ile bir şeyler yapabilirsiniz. Apache aslında HTTP desteği ile gelen bir platformdur. FTP veya SMTP gibi hemen hemen herhangi bir protokol uygulayabilirsiniz (örneğin, mod_echo'ya bakın). Örneğin: PHP kodu dosyalar yerine veritabanından sunulmasına izin veren filtreleri destekler (mod_php, içerik üreticisi değil, bir filtre modülüdür). Bu çok yararlı bir fikir gibi görünmeyebilir, ancak genel olarak orijinal içerik üreticisini değiştirmeye gerek kalmadan içeri veya dışarı giren herhangi bir içeriği değiştirmek için filtreleri kullanabilirsiniz. HTTP istemcileri için artık etrafta olmayan ince ayarlar var, ancak o zamana kadar, Apache onlara tutarlı ve hatasız bir şekilde hizmet etmenin tek yoluydu. Günümüzde çoğu kullanılmıyor.

Ek kod da güvenlik için kullanılır, çünkü mod_log_forensics ve CoreDumpDirectory, birisinin bir güvenlik açığından yararlandığını hissettiğinizde gerçek bir araç sağlar. Diğer web sunucularında böyle bir şey duymadım. İstikrar gelince, bazı ekstra kodlardan değil, iyi yapılandırılmış çekirdekten gelir. Apache dev posta listesinde "çekirdek stabilizatörler" olarak adlandırılan adamlar var. Çekirdekteki herhangi bir değişiklik konusunda çok seçici davranıyorlar ve onları modüllere itme eğilimi gösteriyorlar, bu da Apache'yi oldukça kararlı hale getiriyor. Başarısız olursa, çoğu zaman sunucu çekirdeğindeki hata değil, modülün bir hatasıdır.


3

On iki yılı aşkın bir süredir Apache'yi büyük Perl, Python ve Ruby web uygulamaları için yönetici ve geliştirici olarak kullandım. Apache, temiz / modüler bir tasarıma ve güçlü bir UNIX'e sahip kaya gibi sağlam bir web sunucusudur. En güçlü özelliklerinden biri, modülerliği ve iyi dokümantasyonu. Çok yönetilebilir bir web sunucusudur. 15 yıllık baskın pazar payı ile açıkça görülebildiği gibi olgun ve kanıtlanmış bir durumdur .

Kullanıcı belgeleri çok iyi olsa da, maalesef geliştiriciler / modül yazarları için değerli küçük belgeler var ve bence bu, olabildiğince çok geliştiriciyi çekmemesi için biraz zarar verme eğiliminde. Ancak bu hiçbir şekilde kötü tasarlanmış olmadığı anlamına gelmez - bu açıdan sadece belgelenmemiş. Nick Kew'in modül yazarları için kesin bir kaynak olduğu düşünülen bir kitabı var. Ancak projenin kendisinin modül yazmanın tüm yönleri hakkında daha iyi belgelere sahip olması iyi olurdu.

Aşırı mühendisliğe gelince - hogwash. Mükemmel bir tasarıma sahiptir. Evet, burada ve orada bazı siğiller var, ancak bu tüm yazılımlar için geçerlidir. Bellek havuzlarının kullanımı harika, farklı arka uçları takma kabiliyeti ne kadar temiz ve modüler olduğunu konuşuyor, harika bir C-API'sı var ve APR birçok şeyi sadece Apache projesi için değil, diğer projelerdeki geliştiriciler. Taşınabilirlik hakkında hiçbir şey umursamazsanız, APR'yi takdir edersiniz. Mükemmel olmayabilir, ancak yine de sağlam, iyi tasarlanmış ve çok uygun.

Saf özellikler, esneklik, yönetim, platform desteği, ölçeklenebilirlik, dokümantasyon ve olgunluk açısından Apache harika bir web sunucusudur.


-2

Aşırı tasarlanmış / aşırı tasarlanmış. Hepsinden kötüsü, birçok işlev çağrısı ve dinamik bellek ayırma düzeyi harcayan ve tek bir printfçağrının eşdeğerini gerçekleştirmek için serbest kalan bir şişirme katmanı olan APR (Apache Taşınabilir Çalışma Zamanı) kullanır . Tüm bunlar bunun olmasına neden olur:

  • çok yavaş
  • çok açlık
  • güvenliği denetlemek imkansız
  • anlaşılması ve değiştirilmesi zor

5
Çoğunlukla karmaşıklığının tuzaklarına dikkat çekiyorsunuz ve (tartışılabilir, hangi parçalara bağlı olduğuna bağlı olarak) kötü tasarım; Bu ifadeler geçerli olsa da, karmaşıklığının nedeni değildir .
haylem

1
APR şişmesi için -1. 1.0 öncesi APR ile çalışıyordum ve o zamanlar daha önce 1.3 kod tabanından daha fazla şişkinlik getirmiyordu. Ayrıca APR'deki dinamik bellek tahsisi, 1.3 bellek kodunun aşağı yukarı bir kopyasıdır. Ve haklı olsanız bile ... herhangi bir şişlik nasıl denetlenmeyi imkansız hale getirir?
Jacek Prucia

@haylem (+1) ile aynı fikirde: @R .. 'in cevabındaki şu dört nokta: nereden biliyorsun? Neyle kıyaslıyorsun. Haklı olabilirsin ama puanların göreceli olacak, yani "çok yavaş" - ama neye kıyasla? Burada bahsedilenler gibi bir sunucu mu? Eğer öyleyse lütfen bunları belirtin.
therobyouknow

Ben thttpd web sitesi statik içerik için bazı iyi rakamlar olduğuna inanıyorum. Daha da şaşırtıcı olanı, web tabanlı bir öğrenci ödev sistemi çalıştıran kişisel deneyimlerden, Apache'nin de her müşteri için yeni bir perl örneği çalıştırmasından çok daha yavaş mod_perlolmasıdır. Bu uzun zaman önceydi ve tüm nedenleri takip etmek için hiçbir zaman titiz bir test yapmadım; bölüm yeni bir sunucu satın aldı ...
R. .. GitHub DURDURMAK ICE

@R .: yine, neden mod_perl ile çalıştırıyorsunuz :)
haylem
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.