Warum ist der Apache HTTP Server so komplex?

14

Der Apache HTTP Server ist ein ziemlich großes Projekt-viel größer ist als, sagen wir, lighthttpoder nginxoder sicher die „einfachen HTTP - Server“ Sie schwimmen sehen in C / C ++ Tutorials um.

Wofür ist der zusätzliche Code? Fügt es Sicherheit / Stabilität hinzu (und wenn ja, wie?) Oder dient es nur dazu, Apache- confDateien zu analysieren / .htaccessDinge zu tippen (und, denke ich, VirtualHostsusw.).

Ich bitte Apache nicht zu kritisieren, aber weil ich daran interessiert bin, eine Art Webserver zu schreiben, und ich möchte Dinge wissen, die für einen sicheren, stabilen und schnellen Webserver wichtig sind, auch wenn sie vielleicht nicht offensichtlich sind.

Aaron Yodaiken
quelle
Es hilft, alle auszusortieren, die nicht die Ausrüstung für die Handhabung packen.
Joel Etherton
6
Es ist keine richtige Antwort - aber ich habe gehört, dass der Name von der Tatsache herrührt, dass es schon zu Beginn der Entwicklung viele Mitwirkende gab. Viele Patches wurden beigesteuert, so dass es sich um einen Patchy-Server handelt. Wahre Geschichte.
Jeremy
+1 @Joel Etherton: Gute Geschichte, vor allem, dass es wahr ist. Aber lass niemals zu, dass die Wahrheit einer guten Geschichte im Wege steht :)
therobyouknow
+1 @aharon für ein Beispiel, in dem der Status quo in Frage gestellt wird. Aber "einen Webserver schreiben"? Erfinden wir hier nicht das Rad neu, wenn es neben Apache viele andere Angebote gibt?
Therobyouknow

Antworten:

20

Es ist viel komplexer, weil:

Aber auch:

  • Es ist mehr aktiv entwickelt ( Stand - Vergleich . Ab heute 2011-05-28, Apache hat die jüngste Aktualisierung, obwohl sein inhärenter Freigabeprozess sollte auf seine Konkurrenten gegenüber durch seine erweiterten Komplexität behindert werden.)

Davon abgesehen enthält Rs Antwort gültige Punkte zu seiner Architektur und warum einige andere Webserver ebenfalls von relativem Ruhm profitieren. Es kommt darauf an, was Sie wollen.

Sie können auch unter /programming/475386/apache-vs-nginx-vs-lighttpd- nachsehen, um weitere Informationen zu konfigurieren und zu verwalten. Obwohl Sie Ihre Frage nicht direkt beantworten, zeigt der gesamte Thread viele Unterschiede auf.


Wenn Sie daran interessiert sind, einen Webserver von Grund auf neu zu schreiben, ist es eine gute Sache, Apache httpd zu studieren, insbesondere, wenn Sie sich die Entwicklung im Laufe der Zeit ansehen können. Es zeigt Ihnen auch, was Sie vermeiden müssen (sowohl in Bezug auf Punkte, die gut angesprochen wurden, als auch an Stellen, an denen es von anderen übertroffen wird). Allerdings ist der Code anfangs möglicherweise etwas komplex, und Sie bevorzugen möglicherweise kleinere, leichtere Server. Aber studieren Sie die Gesamtarchitektur und vergleichen Sie sie mit anderen.

Haylem
quelle
1
+1: Das bloße Lesen des Änderungsprotokolls kann unglaublich lehrreich sein, um zu erfahren, wie sich der Webserver selbst entwickelt hat und welche Herausforderungen das Team im Laufe der Jahre durchgemacht hat.
Joel Etherton
1
+1 @haylem "Einige andere Webserver genießen relativen Ruhm" - es ist beruhigend, über Alternativen zu Apache zu lesen, die angeblich Apache-kompatibel sind, dh fast den gleichen Job erledigen.
Therobyouknow
3

Meiner persönlichen Meinung nach ist das alles wegen aller Funktionen, die es hat. Sie können Dinge mit Apache tun, die Sie momentan weder mit nginx noch mit lighthttpd tun könnten. Apache ist eigentlich eine Plattform, die mit HTTP-Unterstützung ausgeliefert wird. Sie können so gut wie jedes Protokoll wie FTP oder SMTP implementieren (siehe mod_echo zum Beispiel). Es werden Filter unterstützt, mit denen Sie beispielsweise PHP-Code außerhalb der Datenbank anstelle von Dateien bereitstellen können (da mod_php ein Filtermodul und kein Content-Produzent ist). Dies scheint vielleicht keine sehr nützliche Idee zu sein, aber im Allgemeinen können Sie Filter verwenden, um Inhalte zu ändern, die ein- oder ausgehen, ohne den ursprünglichen Inhaltserzeuger anpassen zu müssen. Es gibt Verbesserungen für HTTP-Clients, die es nicht mehr gibt, aber damals war Apache die einzige Möglichkeit, sie konsistent und fehlerfrei zu bedienen. Ein Großteil davon wird heutzutage nicht mehr verwendet.

Der zusätzliche Code wird auch für die Sicherheit verwendet, da mod_log_forensics zusammen mit CoreDumpDirectory ein echtes Tool darstellt, wenn Sie glauben, dass jemand eine Sicherheitslücke ausnutzt. Habe bei anderen Webservern noch nichts davon gehört. Was die Stabilität angeht, kommt es aus einem gut strukturierten Kern, nicht aus einem zusätzlichen Code. Es gibt Leute auf der Apache-Dev-Mailingliste, die "Core Stabilizers" genannt werden. Sie sind sehr wählerisch in Bezug auf Änderungen im Kern und tendieren dazu, sie zu Modulen zu verschieben, was Apache tatsächlich ziemlich stabil macht. Wenn dies fehlschlägt, liegt meistens ein Modulfehler und nicht der Fehler im Serverkern vor.

Jacek Prucia
quelle
3

Ich habe Apache über zwölf Jahre lang sowohl als Administrator als auch als Entwickler für große Perl-, Python- und Ruby-Webanwendungen verwendet. Apache ist ein solider Webserver, der ein klares / modulares Design und einen starken UNIX-Hang aufweist. Eines der leistungsstärksten Merkmale ist die Modularität und gute Dokumentation. Es ist ein sehr überschaubarer Webserver. Es ist ausgereift und bewährt, wie 15 Jahre vorherrschender Marktanteil zeigen .

Obwohl die Benutzerdokumentation sehr gut ist, gibt es leider wenig Dokumentation für Entwickler / Modulschreiber, und ich denke, dies kann ein wenig schaden, da es nicht so viele Entwickler anzieht, wie es könnte. Das heißt aber keineswegs, dass es schlecht designt ist - nur schlecht dokumentiert in dieser Hinsicht. Es gibt ein Buch von Nick Kew, das die endgültige Quelle für Modulautoren zu sein scheint. Aber es wäre schön, wenn das Projekt selbst eine bessere Dokumentation zu allen Aspekten des Modulschreibens hätte.

Was es angeht, überarbeitet zu sein - Quatsch. Es hat ein ausgezeichnetes Design. Ja, hier und da gibt es einige Warzen, aber das gilt für alle Software. Die Verwendung von Speicherpools ist fantastisch. Die Fähigkeit, verschiedene Back-Ends anzuschließen, spricht dafür, wie sauber und modular sie ist. Sie verfügt über eine großartige C-API und der APR vereinfacht vieles, nicht nur für das Apache-Projekt Entwickler in anderen Projekten. Wenn Ihnen die Portabilität am Herzen liegt, werden Sie den APR zu schätzen wissen. Es ist zwar nicht perfekt, aber dennoch solide, gut gestaltet und sehr praktisch.

Im Hinblick auf Funktionen, Flexibilität, Administration, Plattformunterstützung, Skalierbarkeit, Dokumentation und Reifegrad ist Apache ein fantastischer Webserver.

Mike Owens
quelle
-2

Es ist überentwickelt. Das Schlimmste ist, dass es APR (Apache Portable Runtime) verwendet, eine aufgeblähte Schicht, die viele Ebenen von Funktionsaufrufen und dynamischer Speicherzuweisung und -freigabe benötigt, um das Äquivalent eines einzelnen printfAufrufs zu erreichen. Dies alles führt dazu, dass:

  • sehr langsam
  • sehr ressourcenhungrig
  • Es ist unmöglich, die Sicherheit zu überprüfen
  • schwer zu verstehen und zu ändern
R .. GitHub STOP ICE HILFE
quelle
5
Sie weisen vor allem auf die Tücken seiner Komplexität hin und (fraglich, hängt davon ab, welche Teile) auf ein schlechtes Design. So gültig diese Aussagen auch sein mögen, sie sind keine Ursachen für ihre Komplexität.
Haylem
1
-1 für den Aufblähungs-APR. Ich habe in der Zeit vor 1.0 mit APR gearbeitet und damals wurde nicht mehr Bloat eingeführt als in der 1.3-Codebasis. Auch die dynamische Speicherzuweisung im APR ist mehr oder weniger eine exakte Kopie des 1.3-Speichercodes. Und selbst wenn Sie Recht haben ... wie macht es eine Art Blähung unmöglich, dass etwas auditiert wird?
Jacek Prucia
stimme mit @haylem (+1) überein und auch: diese vier Punkte in @R .. s Antwort: Woher weißt du das? Womit vergleichen Sie? Sie mögen Recht haben, aber Ihre Punkte werden relativ sein, dh "sehr langsam" - aber verglichen mit was? Ein anderer Server wie der hier erwähnte? Wenn ja, zitieren Sie sie bitte.
Therobyouknow
Ich glaube, dass die thttpd-Website einige gute Zahlen für statische Inhalte enthält. Was noch überraschender ist, ist, dass Apache aus eigener Erfahrung mit einem webbasierten Studenten-Hausaufgaben-System auch viel langsamer war, mod_perlals wenn thttpd nur eine neue Perl-Instanz für jeden Client ausführte. Das ist lange her und ich habe nie strenge Tests durchgeführt, um alle Ursachen aufzuspüren. Die Abteilung hat gerade einen neuen Server gekauft ...
R .. GitHub STOP HELPING ICE
@R .: noch einmal, warum würdest du es mit mod_perl laufen lassen :)
haylem