Vermeiden von CMS-Katastrophen: So verhindern Sie Website-Ausfallzeiten
Veröffentlicht: 2022-08-16Was bedeutet es eigentlich, wenn eine Website als ausgefallen gilt?
Das hängt oft davon ab, wen man fragt.
Dass eine Website als ausgefallen gilt, kann verschiedene Dinge bedeuten:
- Die Website ist vollständig nicht verfügbar.
- Die Website ist online, aber unbrauchbar langsam.
- Die Website gibt Fehlermeldungen für bestimmte Benutzer oder Standorte aus.
- Die Website funktioniert für die meisten Besucher, aber einige können sich einfach nicht bei ihrem CMS anmelden, um beispielsweise Inhalte zu erstellen, zu bearbeiten oder zu veröffentlichen.
Ungeachtet der Ursache oder des Ausmaßes können die Auswirkungen von Website-Ausfällen schwerwiegend sein, von verlorenen E-Commerce-Bestellungen und frustrierten Benutzern bis hin zu geschwächtem Kundenvertrauen.
Im dritten Teil unserer Serie zur Vermeidung von CMS-Katastrophen untersuchen wir klassische Grundursachen für Website-Ausfallzeiten und die Rolle, die kontinuierliche Überwachung und andere Faktoren dabei spielen, dies zu vermeiden.
Erstens spielt die kontinuierliche Überwachung eine Rolle
Wir überwachen verschiedene Aspekte einer Website, damit wir feststellen können, wenn etwas auf einer der verschiedenen Ebenen, aus denen unsere vollständig verwaltete WordPress-VIP-Plattform besteht, nicht richtig funktioniert. Zu diesen Schichten gehören:
- Netzwerkkonnektivität
- Load-Balancer
- Webserver
- Objekt-Caching (Memcached)
- Datenbanken
- Elastische Suche
- Dateidienst (CDN)
Wir versuchen, Probleme frühzeitig zu erkennen, damit wir zukünftige Probleme vorhersehen können, die die Stabilität der Website beeinträchtigen könnten. Querverweise auf Protokolle verschiedener Systemkomponenten ermöglichen es uns, Zeiträume zu überprüfen, in denen eine Website als instabil gemeldet wurde. Da eine Kombination von Faktoren und nicht ein einzelnes Problem für Ausfallzeiten verantwortlich sein kann, verwenden wir eine Reihe von Tools, um Daten über Systeme und Anwendungen hinweg zu vergleichen.
In den meisten Fällen ist die Instabilität einer Website das Ergebnis von Anwendungscode, dh benutzerdefiniertem oder Drittanbieter-WordPress-Theme und Plugin-Code. Hier sind ein paar Dinge, auf die wir achten, wenn wir eine instabile Website untersuchen, und wie wir sie mindern können.
Nicht genug Caching
Das Wichtigste, was Sie tun können, um sicherzustellen, dass eine Website leistungsfähig und stabil ist, ist sicherzustellen, dass alle vollständigen Seiten, die zwischengespeichert werden können, zwischengespeichert werden. Nicht zwischengespeicherte Seiten müssen bei jeder Anforderung auf dem Server erstellt werden, was ein langsamerer Prozess und anfälliger für Fehler ist.
Die WordPress-VIP-Antwort:
Die WordPress VIP-Plattform bietet leistungsstarkes Seiten-Caching über ein globales Netzwerk von Edge-Cache-Servern, die jeweils zum Speichern und Bereitstellen von Inhalten in der Nähe eines Endbenutzers verwendet werden. Die Antwortzeit eines Edge-Cache-Servers ist fast immer um eine Größenordnung schneller als alles, was das Seiten-Caching umgeht und die Ursprungsserver trifft.
Caching-Herausforderungen
Da sie ein personalisiertes, vollständig interaktives Erlebnis erfordern, können einige Websites, insbesondere E-Commerce-Websites, einfach nicht auf Seiten-Cache-Ebene zwischengespeichert werden.
Oft lässt sich ein Kompromiss finden, bei dem eine statische Seite vom Edge-Cache bereitgestellt wird und dynamische Funktionen (z. B. eingeloggter Status, Warenkörbe) über JavaScript hinzugefügt werden. Asynchrone Anfragen von JavaScript können dann verwendet werden, um mit einem WordPress-REST-API-Endpunkt zu kommunizieren, der mit einem viel geringeren Overhead als das Laden einer ganzen Seite ausgelegt ist.
Alternativ kommt hier das Objekt-Caching ins Spiel. Die Seite kann dynamisch bleiben, aber Teile der Seite und alle darin verwendeten Daten können im Objektcache gespeichert und abgerufen werden, um eine Abfrage der Datenbank zu vermeiden.
Die WordPress-VIP-Antwort:
Jede WordPress-VIP-Anwendungsumgebung verfügt über einen eigenen dedizierten Memcached-Cluster, der Objekt-Cache-Daten für einen blitzschnellen und effizienten Abruf im Arbeitsspeicher speichert.
Holen Sie sich die neuesten Inhaltsaktualisierungen
Möchten Sie über neue Inhalte benachrichtigt werden? Hinterlassen Sie unten Ihre E-Mail-Adresse und wir sorgen dafür, dass Sie auf dem Laufenden bleiben.
Ungetestete Codebereitstellungen
Dies ist ein weiterer häufiger Grund für Website-Ausfallzeiten und ziemlich einfach zu diagnostizieren, basierend auf reiner Ursache und Wirkung.
Wenn Ihre Website gerade ungetesteten Code bereitgestellt hat, was zu sofortigen Problemen mit der Website führt, gibt es wahrscheinlich Ihre Ursache. Wenn Sie können, setzen Sie den verdächtigen Code so schnell wie möglich auf die vorherige Version zurück.
Das Beste, was zu tun ist, um diese Situation zu vermeiden? Testen Sie jeden Codeabschnitt gründlich in einer separaten Entwicklungs- oder Staging-Umgebung, bevor Sie ihn für die Produktion freigeben.
Die WordPress-VIP-Antwort:
Da alle unsere Site-Bereitstellungen über GitHub erfolgen, können WordPress-VIP-Kunden den Code problemlos selbst zurücksetzen, ohne dass neue Codeänderungen verloren gehen, die sicher im GitHub-Revisionsverlauf gespeichert bleiben. Optional können wir in Notfallsituationen die Website eines Kunden unabhängig von GitHub in seinem Namen auf eine frühere Bereitstellung zurücksetzen.
In Bezug auf Umgebungen können alle Anwendungen, die auf unserem vollständig verwalteten Service gehostet werden, eine separate Entwicklungs- oder Staging-Umgebung haben. Das Synchronisieren von Daten aus der Produktion dort ist einfach, sodass Sie Code mit der gleichen Menge und dem gleichen Datentyp wie auf Ihrer Produktionswebsite testen können.
PHP-Fehler
WordPress verwendet PHP-Code auf dem Server. Ein PHP-Fehler kann „schwerwiegend“ sein, was bedeutet, dass die Webseite, das Skript oder der Befehl nicht mehr ausgeführt werden, sobald der Fehler auftritt. Diese tauchen fast immer irgendwo als sichtbare Fehler auf und werden in den PHP-Protokollen aufgezeichnet.
Hinweis: Einige PHP-Warnungen in PHP 7 werden in PHP 8 zu schwerwiegenden Fehlern, daher ist es wichtig, diese Fehler ernst zu nehmen.
Die WordPress-VIP-Antwort (plus hilfreiche Ratschläge):
Unsere Plattform protokolliert automatisch alle PHP-Fehler und stellt sie WordPress-VIP-Kunden in ihrem Dashboard und unseren Ingenieuren zur Verfügung.
Profi-Tipp : Gehen Sie auf alle PHP-Fehler ein und beheben Sie sie – auch wenn eine Website scheinbar einwandfrei funktioniert. Routinemäßig sehen wir Protokolle voller PHP-Fehler, sogar schwerwiegender, auf einer Website, die stabil erscheint. Dies bedeutet jedoch nicht zwangsläufig, dass die Website ordnungsgemäß funktioniert . Wenn Sie PHP-Protokolle übersichtlich halten, indem Sie kleinere Fehler und Warnungen beheben, können schwerwiegendere Fehler beim Debuggen leichter gefunden werden.
Langsame MySQL-Datenbankabfragen
Jede WordPress-Website verwendet eine Datenbank, um Website-Inhalte und Konfigurationsdaten zu speichern. Datenbankabfragen rufen diese Inhaltsdaten für Webseiten ab, aber manchmal werden diese Abfragen ineffizient geschrieben. Sie funktionieren möglicherweise gut für Websites mit nur wenigen hundert Seiten, geraten jedoch beim Umgang mit großen Datenmengen ins Stocken (einige Websites auf unserer Plattform haben Millionen gespeicherter Datensätze).
Eine langsame Abfrage bindet Datenbankressourcen und beeinträchtigt möglicherweise die Stabilität der Website – nicht nur für die Seite, das Skript oder den Befehl, der das SQL ausführt, sondern für die gesamte Anwendung. Sites haben oft Probleme, weil einzelne oder mehrere Datenbankabfragen langsam sind, z. B. jede Abfrage, deren Ausführung länger als 0,75 Sekunden dauert.
Die WordPress-VIP-Antwort:
WordPress VIP hilft dabei, Datenbankengpässe zu mindern, indem es jeder Anwendung einen dedizierten Datenbankcluster mit einer primären Datenbank, in der alle Datenbankschreibabfragen stattfinden, und einer oder mehreren schreibgeschützten Replikatdatenbanken zur Verfügung stellt. Dies erhöht die Anzahl gleichzeitiger Datenbankabfragen, die stattfinden können, und verteilt die Ressourcenlast, wenn eine Site unter Druck steht. Allerdings können langsame Datenbankabfragen nicht immer einfach durch Hinzufügen zusätzlicher Datenbankressourcen gelöst werden. Aus diesem Grund raten wir Kunden, langsame Datenbankabfragen mit Query Monitor und New Relic (von unserer Plattform bereitgestellt) zu überwachen. Diese heben hervor, wo Abfragen in der Datenbank entstehen, sodass Ihr Entwicklungsteam sie umgestalten kann, um die Leistung zu optimieren.
Schließlich können unser Anwendungssupport und unsere Premier Engineers Ihrem Team auch dabei helfen, diese Abfragen zu finden und zu analysieren, und Möglichkeiten vorschlagen, sie für Geschwindigkeit und Effizienz zu verbessern.
Übermäßige Datenbankschreibvorgänge
Manchmal aktualisiert eine Funktion, wie z. B. benutzerdefinierte Protokollierung oder Tracking-Code, die Datenbank bei jeder Anfrage. Dies kann aus zwei Gründen zu Instabilität führen:
- Verzicht auf Datenbankreplikate : Alle Schreibabfragen werden an die primäre Datenbank geleitet; nachfolgende Datenbankabfragen für dieselbe Tabelle (oder Tabellen) in derselben Seitenanforderung werden ebenfalls dorthin geleitet. Dadurch, dass Datenbankreplikate nicht genutzt werden, wird die Skalierbarkeit der Site eingeschränkt.
- Seiten-Caching umgehen: Damit bei jeder Seitenanforderung ein Datenbank-Schreibvorgang ausgeführt wird, muss das Seiten-Caching umgangen werden. Dies bedeutet jedoch, dass die erste (und beste) Verteidigungslinie kompromittiert wurde.
Die WordPress-VIP-Antwort:
Unter diesen Umständen empfehlen wir, das Feature zu überarbeiten. Beispielsweise wird die Inhaltsanalyse normalerweise am besten an einen externen Dienst delegiert, der ein JavaScript-Snippet auf der Seite verwendet, anstatt serverseitigen Code, der mit Caching nicht gut funktioniert und zu übermäßigen Datenbankschreibvorgängen führen kann.
Andere bekannte Ursachen für Ausfallzeiten und wie man sie vermeidet
Plugins
Es gibt Tausende beliebter, hilfreicher Plugins von Drittanbietern im WordPress-Ökosystem, die fantastische Features und Funktionen bieten. Einige haben jedoch Herausforderungen bei der Skalierung, was möglicherweise zu Ausfallzeiten führen kann, wenn sie zu einer Website mit Tonnen von Inhalten und Verkehr hinzugefügt werden.
Die WordPress-VIP-Antwort:
Als gute Verwalter des Ökosystems wenden wir uns regelmäßig an Anbieter mit Vorschlägen, wie ihre Plugins in Umgebungen mit hohem Datenverkehr besser funktionieren. Wir können auch alternative Plugins vorschlagen, die auf unserer Plattform in großem Umfang erprobt und getestet wurden.
Benutzerdefinierte Protokollierung
Die benutzerdefinierte Protokollierung ist ein leistungsstarkes Debugging-Tool und oft die einzige praktikable Methode, um einen Fehler oder ein Problem aufzuspüren, das anscheinend nur auf einer Produktionsseite auftritt. Bei zahlreichen Gelegenheiten haben wir jedoch gesehen, dass in PHP eingebautes benutzerdefiniertes Logging auf einer stark frequentierten Website die Dinge verlangsamt oder eine Website durch übermäßige Datenbankschreibvorgänge der Gefahr von Ausfallzeiten aussetzt.
Die WordPress-VIP-Antwort:
Für Kunden bieten wir Zugriff auf Standard-PHP-Protokolle im Health-Panel des WordPress VIP-Anwendungs-Dashboards. Dort können sie benutzerdefinierte Fehler (und auch an New Relic) protokollieren, was sich nicht negativ auf die Datenbank auswirkt.
Remote-API-Aufrufe
Einige Websites nutzen serverseitige REST-API-Aufrufe für andere Anwendungen oder Dienste. Diese sind unter normalen Umständen ziemlich schnell, aber manchmal führt der zugrunde liegende Anwendungscode zu einer langsamen Antwort, zu einer Zeitüberschreitung oder zu einem Fehler.
Die WordPress-VIP-Antwort:
Um diese Probleme zu minimieren, empfehlen wir „defensive Codierung“. Es hängt vom Zweck des Remote-Aufrufs ab, aber wenn eine Remote-Anfrage fehlschlägt, ist es oft möglich, auf eine zwischengespeicherte Antwort von einer früheren Anfrage zurückzugreifen – oder zumindest „den Fehler ordnungsgemäß zu behandeln“, damit der Rest der Seite dies tun kann noch laden. Wir stellen eine Reihe von Hilfsfunktionen bereit, um diese Szenarien zu handhaben. Ein niedriges Timeout bedeutet auch, dass PHP-Ressourcen schneller freigegeben werden, wenn die Remote-API nicht antwortet.
Lesen Sie mehr in unserer Serie Vermeidung von CMS-Katastrophen
Wenn Ihr Geschäft auf dem Spiel steht, können Sie es sich nicht leisten, neue Geschäfte woanders hinzuschicken und Ihre Marke zu schädigen, indem Ihr Content-Management-System (CMS) ein schlechtes digitales Erlebnis liefert. In So verbessern Sie die Website-Leistung diagnostizieren wir fünf häufige Verlangsamungsursachen und wie Sie mit einem agilen CMS den Turbo aufladen können.
Tage mit hohem Verkehrsaufkommen sollten ein Grund zum Feiern sein, kein Albtraum für Ingenieure, die auf ihrem kollektiven Hinterbein versuchen, eine Website und Anwendungen am Laufen zu halten, um die Last zu bewältigen – und Ihren Ruf intakt zu halten. In Skalierung von WordPress für hohen Traffic untersuchen wir vier Ansätze, um eine WordPress-Website in die Lage zu versetzen, diese Traffic-Flutwellen zu bewältigen.