Erreichbarkeit und Ladezeit von Websites messen
Wie in unserem Eingangsartikel Wichtigste Kriterien für guten Webspace beschrieben, gehören Erreichbarkeit und Ladezeit zu den Top-Kriterien für gutes Webhosting. Was bringt euch eine Webseite bei einem günstigen Anbietern mit Hunderten von Gigabyte Speicherplatz, wenn die Server häufig überlastet sind oder die Seite extrem langsam lädt? Dieses Problem hatte ich leider mit einigen Anbietern, dass es regelmäßig zu teilweisen mehrstündigen Serverausfällen kam, sehr zum Ärgernis meine Besucher. Wie soll eine Seite wachsen, wenn diese nie zu erreichen ist?
Inhaltsverzeichnis
Python-Script zum Messen der Erreichbarkeit / Ladezeit
Zum Messen der Ladezeiten und der Erreichbarkeit der hier getesteten Anbieter nutze ich den folgenden Python-Script und lasse diesen per Cronjob jede Minute ausführen. Dieser speichert in einer Log-Datei den erhaltenen HTTP-Code sowie weitere Timing-Informationen, z.B. die Dauer des Name-Lookups, die Dauer bis das erste Byte transferiert wurde und natürlich die benötigte Zeit um die Seite komplett zu laden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Dieser Python-Script wird einmal pro Minute aufgerufen, ruft die übergebene URL auf und speichert die Messwerte in einer Textdatei. # Aufruf per cronjob mittels: python script.py {url} {logfile} import commands import sys import time from random import randint time.sleep(randint(0,55)) #Damit Website zu verschiedenen Zeitpunkten aufgerufen wird iso_time = time.strftime("%Y;%m;%d;%H;%M;%S") url = sys.argv[1] outputfile = sys.argv[2] cmd = "curl -s -m 30 -L -w '%{http_code};%{time_namelookup};%{time_connect};%{time_appconnect};%{time_redirect};%{time_pretransfer};%{time_starttransfer};%{time_total}' -o /dev/null -A 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0' "+url results = commands.getstatusoutput(cmd) with open(outputfile, "a") as myfile: myfile.write("%s;%s\n" % (iso_time, results[1])) |
Wie werden die Angebote hier gemessen?
Um die besten Anbieter identifizieren zu können und mich nicht mehr mit Serverausfällen rumärgern zu müssen, fing ich an systematisch die Erreichbarkeit und Ladezeit von verschiedenen Webhosting-Anbietern zu überwachen. Die meisten “Tests” zur Erreichbarkeit die man im Internet findet und mit denen sich die Anbieter auf ihrer Webseite schmücken sind leider kaum zu gebrauchen, den dort wird oft nur geschaut, ob deren Internet-Anbindung des Rechenzentrum noch funktioniert. So kommen dann bei den meisten Anbietern auch Erreichbarkeitswerte von 100% raus, was sich super anhört. Diese Tests geben aber ein sehr verzehrtes Bild wieder, denn es wird nur getestet ob das Rechenzentrum erreichbar ist, nicht aber, ob eure Seite auch wirklich erreichbar ist. Kommt es zu einem Software-Absturz im Webserver oder in der Datenbank, dann ist das Rechenzentrum zwar noch ans Internet angeschlossen, eure Seite ist dennoch nicht zu erreichen. Ebenso messen solche Tests meistens keine Überlastungen, die im Shared Hosting-Bereich recht häufig auftreten können, insbesondere wenn der Anbieter zu viele Kunden auf einen Server platziert.
Aus diesem Grund wollte ich die Erreichbarkeit und Ladezeit so realistisch wie möglich protokollieren. Hierzu habe ich das beliebte Content-Management-System / Blog-System WordPress bei diversen Anbietern installiert und messe seit dem jede Minute die Erreichbarkeit und Ladezeit dieser Seite. WordPress ist eine der beliebtesten Webanwendungen und über 60 Millionen Webseiten basieren auf WordPress, unter Anderem großen Namen wie New York Times oder Techcrunch mit Millionen von Besuchern pro Monat. Auch für diverse meiner Kundenprojekte setze ich auf WordPress.
WordPress liefert auch für andere Webanwendungen wie z.B. Online-Shops oder Forensoftware einen guten Vergleich, da es recht umfangreiche und vielfältige PHP und MySQL-Datenbank Funktionalitäten verwendet. So wird die Performance der Server nicht für eine spezielle Aufgabe getestet, z.B. wie schnell können Multiplikationen durchgeführt werden, sondern es wird ein breites Spektrum an Funktionalitäten getestet.
- 1. Platz
- Erreichbarkeit: 100,00%
- Ausfallzeit: 1 Minuten je Monat
- Ø Antwortzeit: 0,03 Sekunden
- Testergebnis: 5,0 von 5 Sternen
- 2. Platz
- Erreichbarkeit: 100,00%
- Ausfallzeit: 1 Minuten je Monat
- Ø Antwortzeit: 0,16 Sekunden
- Testergebnis: 4,8 von 5 Sternen
- 3. Platz
- Erreichbarkeit: 99,98%
- Ausfallzeit: 8 Minuten je Monat
- Ø Antwortzeit: 0,01 Sekunden
- Testergebnis: 4,7 von 5 Sternen
- 4. Platz
- Erreichbarkeit: 99,99%
- Ausfallzeit: 6 Minuten je Monat
- Ø Antwortzeit: 0,12 Sekunden
- Testergebnis: 4,6 von 5 Sternen
- 5. Platz
- Erreichbarkeit: 99,96%
- Ausfallzeit: 16 Minuten je Monat
- Ø Antwortzeit: 0,20 Sekunden
- Testergebnis: 4,5 von 5 Sternen
- 6. Platz
- Erreichbarkeit: 99,93%
- Ausfallzeit: 31 Minuten je Monat
- Ø Antwortzeit: 0,06 Sekunden
- Testergebnis: 4,2 von 5 Sternen
- 7. Platz
- Erreichbarkeit: 99,53%
- Ausfallzeit: 202 Minuten je Monat
- Ø Antwortzeit: 0,12 Sekunden
- Testergebnis: 4,2 von 5 Sternen
- 8. Platz
- Erreichbarkeit: 99,46%
- Ausfallzeit: 232 Minuten je Monat
- Ø Antwortzeit: 0,30 Sekunden
- Testergebnis: 4,1 von 5 Sternen
- 9. Platz
- Erreichbarkeit: 99,86%
- Ausfallzeit: 58 Minuten je Monat
- Ø Antwortzeit: 0,13 Sekunden
- Testergebnis: 4,0 von 5 Sternen
- 10. Platz
- Erreichbarkeit: 99,56%
- Ausfallzeit: 192 Minuten je Monat
- Ø Antwortzeit: 0,11 Sekunden
- Testergebnis: 4,0 von 5 Sternen
Bei den Webhosting-Anbietern habe ich ein ganz normales Shared-Webhosting Paket gewählt und auf diesen die neueste Version von WordPress installiert. Zusätzliche Plugins zur Performance-Beschleunigung, z.B. zum Server-Caching, wurden nicht installiert. Ebenso wurde die neueste vom Hoster angebotene PHP Version gewählt.
Damit die Ergebnisse nicht verfälscht werden und Internetprobleme bei uns zu keinen angeblichen Serverausfällen bei den Anbietern führen, habe ich umfangreiche Gegenmaßnahmen getroffen. Zuerst einmal läuft dieses Script auf einem Server in Darmstadt, der an das Deutsche Forschungnetz angebunden ist. Das Deutsche Forschungsnetz bietet eine redundante Glasfaseranbindung an die wichtigsten deutschen Internet-Knotenpunkte, unter Anderem an den wichtigsten deutschen Internet-Knotenpunkt DE-CIX in Frankfurt.
Da es dennoch bei uns mal zu Problemen kommen kann, wird zusätzlich noch stets die Verbindung zu Google überwacht. Google ist bekannt für seine extrem verfügbaren und schnellen Datenzentren. Sollte das Script also feststellen, dass Google nicht erreicht werden kann, dann liegt das Problem also bei uns und nicht bei den Hosting-Anbietern und die Messung wird solange ausgesetzt, bis wir Google wieder normal erreichen können. Diese Ausfälle sind zwar extrem selten, können aber mal dazu führen dass für manche Minuten keine Messwerte vorliegen.
Erreichbarkeit berechnen
Die Erreichbarkeit wird berechnet, indem die Anzahl der erfolgreichen Aufrufe durch die Gesamtanzahl geteilt wird. Pro Tag wird die Website 1440 mal aufgerufen, bei einem 30-Tage-Monat entsprechend 43.200 mal pro Monat. Dadurch lässt sich die Erreichbarkeit des Servers sehr gut schätzen.
Neben Verbindungsabbrüchen und Fehlermeldungen kann es auch zu einer extrem langsamen Ausführung kommen. Deswegen habe ich einen Timeout von 20 Sekunden definiert. Sollte die Seite nach 20 Sekunden nicht fertig geladen haben, wird dies als unerreichbar definiert.
Protokollierung längerer Serverausfälle
Bei sehr vielen Anbietern sehen wir häufige und sehr kurze Serveraussetzer, die oft nur einen einzelnen Aufruf betreffen. Grund hierfür ist vermutlich eine kurze, temporäre Überlastung des Servers, die typischerweise nach wenigen Sekunden behoben ist.
Um längere Serverausfälle aufzuzeigen, werden die Log-Dateien analysiert und es wird nach längeren Ausfallzeiten gesucht. Dabei findet ihr in den Test-Berichten alle Serverausfälle die länger als 1 Minute gedauert haben, sprich, bei dem mindestens zwei aufeinanderfolgende Aufrufe erfolglos geblieben sind.
Leider ist es nicht ganz leicht, die exakten Start- und Endzeitpunkte der Serverausfälle zu bestimmen, da die minütliche Messung “nur” eine Auflösung von 1 Minute erlauben. Ebenso ist es nicht möglich, bei diesen kurzen, temporären Ausfällen unter 1 Minute die Zeitdauer exakt zu berechnen.