Jun 26 2006

Serverlast entgegenwirken (1) – lighttpd statt Apache

Veröffentlicht by . Filed under: Software

Heute möchte ich mit einer kleinen Artikelserie starten, die sich damit beschäftigt, wie man einen Internet-Auftritt derart gestaltet, dass auch große Benutzerzahlen abgefangen werden können. Vor diesem Problem steh ich bei einem aktuellen Projekt und möchte die Gedanken einfach mal in Form von Artikeln festhalten, so dass auch andere mit selben Problem nicht lange suchen müssen.

Serverlast entgegenwirken kann man auf vielerlei Arten. Neben einer sauberen Programmierung und dem Cachen von Seiten ist der Begriff Load-Balancing ein gern genannter Begriff (auf die Technik gehe ich ein andermal ein). Viele vergessen aber das eigentliche Problemkind: den Apache-Webserver.

Das Problem mit diesem Webserver besteht darin, dass es für jeden Request eine eigene (Fork-) Instanz ausführt. Je mehr Besucher eine Website hat, desto mehr Instanzen werden also vom Apache ausgeführt. Da der Speicher eines Servers aber begrenzt ist, können nicht beliebig viele Instanzen ausgeführt werden. Je nach Konfiguration des Web-Servers liefert der Apache also keine Seiten an neue Besucher aus oder er müllt den Speicher derart voll, dass das System praktisch steht.
Eine Alternative stellt der Webserver lighttpd dar. Im Gegensatz zum Apache führt dieser nicht für jeden Request eine eigene Instanz aus und kommt dadurch auch mit einer höheren Besucherzahl passabel zurecht. Wie man in Benchmark-Tests lesen kann, hält sich dieser Vorteil bei einer geringen Besucherzahl in Grenzen (hier ist Apache sogar teilweise schneller), bei hohen bis sehr hohen Anfragen liegt lighttpd aber weit vorne (bzw. Apache macht erst gar nicht mehr mit). Frei übersetzt ist zu hier zu lesen:

Lighttpd fängt ab 800 Anfragen an, merkwürdig zu reagieren, während Apache bereits bei 50 Anfragen zu schwächeln beginnt [...] und bei 250 gleichzeitigen Anfragen nicht mehr reagierte.

Lighttpd nutzt dabei die FastCGI-Schnittstelle für PHP, Ruby und Co. und bietet nahezu alle wirklich relevanten Module wie URL_Rewrite (inkl. regulären Ausdrücken), output-Kompression, etc.

Sehr interessant ist dazu noch die sehr intelligente Cache-Funktion des Webservers, der die Aktualität des Caches auch anhand von MySQL-Abfragen (!!) kontrollieren kann. So stehen (im Vergleich zu PHP) extrem schnelle Cache-Funktionen zur Verfügung:

  • Modellierung der selben Abhängigkeiten wie in PHP
  • Treffen einer Cache-Entscheidung (auch mittels MySQL)
  • direktes Ausliefern des Cache-Inhalten bei einem Cache-Hit
  • Aufrufen des PHPs bei einem Cache-Hiss, zum Auffrischen des Cache-Inhaltes
  • Zusammenführen von mehrere Content-Fragmenten

Alles in allem ist lighttpd eine sehr interessante Alternative für den Apache-Webserver, wenn es auf Skalierbarkeit ankommt. Leider sind die typischen Apache-Einstellungen nicht übernehmbar, so dass mod_rewrite-Regeln entsprechend umgebaut werden müssen. Sollte man aber von vornherein mit einem großen Projekt rechnen, so ist der Server auf jeden Fall einen Blick wert.

[Update]

Sehr interessant ist auch ein Artikel im TextDrive-Weblog: nach einer Verlinkung von Slashdot wurde der Blog und damit der Server stark beansprucht. Auf der Grafik kann man schön sehen, wie sich der Apache im Vergleich zum lighttpd bei gleichbleibender Besucherzahl verhält.

16 responses so far

1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Loading ...
^

16 responses so far

  1. [...] Auf zum ersten Artikel Serverlast entgegenwirken (1) – lighttpd statt Apache. Dort verweist er auf eine interessante Alternative: lighthttpd. [...]

  2. Denison 27 Jun 2006 at 2:23 pm

    Hmm, … das wirkt sehr interessant und auch attraktiv, aber ein Problem welches sich mir jetzt stellt:

    Ich habe einen laufenden Apache2 auf Suse 9.3, …
    und “nur” einen vServer.

    Wie kann ich diesen ohne deutliche Ausfälle nun umstellen?

    Bei durchgehend mehreren Hundert Usern online wäre das nämlich der einzigste Grund, wegen welchem ich noch nicht umgestiegen bin.

  3. Mathias Bankon 27 Jun 2006 at 2:39 pm

    Du könntest im Hintegrund lighttpd auf einem anderen Port fahren, anschließend Apache so konfigurieren, dass er automatisch umleitet und im dritten Schritt dann Apache abstellen und lighttpd auf Port 80 stellen. Das dürfte im Endeffekt eine Ausfallzeit von ca 5 Minuten ausmachen.

  4. Perunon 27 Jun 2006 at 2:59 pm

    Hallo,
    ich bin zwar kein Server-Experte, aber ich frage mich was Heiese, Spiegel.de und Golem.de richtig machen, denn die nutzen auch Apache und deren Websites und Foren sind immer gut erreichbar. Und soweit ich das weiß sind deren Besucherströme sehr groß.

  5. Mathias Bankon 27 Jun 2006 at 4:32 pm

    Heise und Co. verwenden Load-Balancing. Auf die Techniken und Möglichkeiten komme ich später mal zu sprechen (wird nen extra Artikel, weil es doch ein komplexeres Thema ist). Jedenfalls verwendet heise (von denen weiß ich es recht sicher) ein “Nat Based Server Balancing”.

  6. Björn Schotteon 27 Jun 2006 at 7:03 pm

    Man kann mit lighttpd helfen, die Anzahl der verwendeten physikalischen Server zu sparen. So konnten wir bei einem großen deutschen Shoppingsuchmaschinen-Anbieter ein Downsizing von 4 auf 1 Server (der sich dann langweilte) erzielen. Macht etwa 180 Mio. Requests/Monat und enthält noch ein customized Modul zum Skalieren von Bildern (3.500 Bilder pro Sekunde).

  7. [...] Es gibt bekanntermaßen viele Möglichkeiten, die Performance der eigenen Website zu optimieren. Sei es die Verwendung eines anderen Webservers oder der Einsatz mehrerer Server mittels Load-Balancing (hier eine Information am Rande: Strato will bis Ende des Jahres Hardware-Load-Balancing-Systeme ins Produktfolio mitaufnehmen). [...]

  8. Basic Thinking Blog » Serverlast: Tippson 27 Sep 2006 at 10:28 pm

    [...] vom Forenblogger und Strohhalm-Betreiber Matthias Bank: Serverlast entgegenwirken (1) – lighttpd statt Apache Serverlast entgegenwirken (2) – Load-Balancing Serverlast entgegenwirken (3) – nutze deinen Webserver [...]

  9. [...] Zitat von Justchillagain Danke dir auch mal ;-) Würde denn folgender Root-Server meine Anforderungen erfüllen ? – Ich bin ein Link Grüße Wenn es wirklich 100 oder mehr User sein sollten, wird es mit sicherheit Probleme geben Dies liegt grössten teils am Apache und nicht unbedingt an der Serverhardware. Lies mal das hier: Forenblogger » Serverlast entgegenwirken (1) – lighttpd statt Apache Mfg Oemi1980 [...]

  10. [...] Hi, bleib doch beim Forum und wechsel den Webserver. phpBB ist sicherlich nicht sehr schonend mit den Ressourcen, aber es ist auch nicht so schlimm, dass sich deshalb ein Umstieg lohnen würde. Forenblogger » Serverlast entgegenwirken (1) – lighttpd statt Apache Wurstbrot [...]

  11. [...] Ich wollte auf meiner neuen Crux Kiste auf jeden Fall auch Lighttpd testen, weiss aber dass hauptsächlich Webseiten mit viel statischen Downloads und auch für fastcgi optimierte Scripts auf den kleinen und schnellen Dämon setzen. Also wird er mir nicht viel bringen ausser weniger Speichernutzung im Normalbetrieb. Als Seiten die den lighttpd verwenden und die ich ebenfalls oft verwende fallen mir neben youtube.com noch folgende ein: sourceforge.net, bildblog.de, imageshack.us, mininova.org und andere bekannte grosse Torrentseiten. Lighttpd ist hauptsächlich wegen seines geringen Memory- und Ressourcen Footprints dem schwergewichtigen Apache vorzuziehen. Gerade bei Downloadseiten bei vielen gleichzeitigen Zugriffen ist das extrem wichtig, dass er Server nicht in die Knie geht. Ideal natürlich für Torrentseiten oder Bilduploadseiten die vielen Leuten gleichzeitig kleine Dateien zugänglich machen müssen. Eine genauere Analyse gibt es hier: Forenblogger » Serverlast entgegenwirken (1) – lighttpd statt Apache Golem News Seite zur Verschiebung von Apache -> Lighttpd: Apache verliert, Microsoft und lighttpd legen zu – Golem.de __________________ Dieser Beitrag wurde Ihnen präsentiert von: [...]

  12. Rolandon 11 Apr 2007 at 5:00 pm

    Hmmm, hoert sich interessant an. Noch zoegere ich etwas, da ich den Indianer einfach mag… Allerdings geht der Server-Load bei mir teilweise bis > 60 hoch! :( Upps, ja, sehr viel. :) Komischerweise hat sich das gelegt, nachdem ich dieses Mini-Script nun regelmaessig ausfuehren lasse:

    #!/bin/sh

    AMOUNT=`ipcs -s | grep www-data | sort --unique | grep "" --count`

    if test $AMOUNT -gt 10; then
    /etc/init.d/apache2 stop
    sleep 1
    kill -kill `pidof apache2 php5-cgi`
    sleep 1
    kill -kill `pidof apache2 php5-cgi`
    sleep 1
    ipcs -s | grep www-data | perl -e 'while () {@a=split(/\s+/); print `ipcrm sem $a[1]`}'
    sleep 1
    /etc/init.d/apache2 start
    fi

    Ist aber mit Sicherheit nur eine Notloesung… Ich denke mal drueber nach, ob ich den Wechsel mache. :) Bin recht gut in Debian betagt. Zu Hause auch nur Debian im Einsatz (0% Windows).

    Jedenfalls bin ich es gruendlich satt, mich per SSH einzuloggen, zu su-hen und dann “kill -kill `pidof apache2 php5-cgi`” (ich nutze schon den Worker) einzugeben, um anschliessend wieder “/etc/init.d/apache2 start” einzugeben. Ich kann ja nun nicht die ganze Nacht “Wache” am Server halten, ob der Load wieder +30 geht… :(

    Aber wie schon gesagt, das kleine Script wirkt ware Wunder! ;-) Habe ich wo im Netz (Google) gefunden.

  13. Danielon 16 Mai 2007 at 11:06 pm

    @ Roland. Sag ma, wie verwendest du dieses Script?
    Mein Server geht auch langsam in die Knie. Da sind dauerhaft um die 800 User drauf. Kann mir jemand lighttpd installieren? Is nen Suse Server.

    Meldet euch bei mir mit mail an d.johann-krone[at]gmx.de

    Sollts auch nich um sonst machen.

  14. Rolandon 19 Mai 2007 at 11:03 am

    Ja, ich verwende es. Aber (leider) in einer abgewandelten Fassung. Vor einigen Wochen ging der Load auf ueber 120 (!!!) und das ist langsam toedlich fuer Linux.

    Nun ist der Load auf 0.00. Sieht schoen aus, ist es aber nicht. Der Web-Server ist auch nicht mehr erreichbar und ich darf weiterhin das Kill-Script (in einer geaenderten Fassung) alle 3 Stunden ausfuehren, damit mein Server erreichbar bleibt. :(

    Die bei Apache sollten mal an Stabilitaet denken, das ist naemlich ziemlich laestig, jeden Tag mal einen Load von 120 oder von 0 zu haben…

  15. Skullyon 18 Jan 2008 at 9:02 am

    Andere Alternative wäre yaws.
    http://www.sics.se/~joe/apachevsyaws.html

  16. Larson 01 Mai 2010 at 8:18 am

    Interessanter Artikel – nur wird eine Sache vergessen: Apache bietet einige nette Funktionen, die sich auf lighttpd oder nginx nur umständlich umsetzen lassen, so zum Beispiel mod_rewrite (die Rules müssten für lighty umgeschrieben werden) oder mod_uploadprogressbar.

    Apache verwendet standardmäßig das mpm_worker Modul – ähnlich wie bei lighttpd wird hier *nicht* für jeden Request eine eigene Instanz gestartet. Erst wenn PHP hinzukommt, springt Apache um auf das veraltete mpm_prefork Modul, welches noch aus Apache1-Zeiten stammt. Dann treten die Probleme auf, die im Artikel beschrieben wurden.

    Kompiliert man den Apache selbst, kann man ohne Probleme mpm_worker auch mit PHP verwenden. Und ob sich dann der Einsatz von lighttpd noch lohnt, ist die eigentlich interessante Frage. Falls jemand dazu mehr Infos hat, wär ich sehr dankbar… :-)

Trackback URI | Comments RSS

Hinterlasse eine Antwort