In der realen Welt kann es zu Situationen kommen, in denen die Leistung Ihrer Server durch Ereignisse wie einen plötzlichen Anstieg des Datenverkehrs oder einen plötzlichen Stromausfall einbricht. Es kann noch viel schlimmer kommen und Ihre Server können lahmgelegt werden – unabhängig davon, ob Ihre Anwendungen in der Cloud oder auf einem physischen Rechner gehostet werden. Solche Situationen sind unvermeidlich. Anstatt jedoch zu hoffen, dass sie nicht eintreten, sollten Sie sich darauf vorbereiten, dass Ihre Systeme nicht ausfallen.
Die Antwort auf das Problem ist die Verwendung einer Hochverfügbarkeitskonfiguration oder -architektur (HA). Die Hochverfügbarkeitsarchitektur ist ein Ansatz zur Definition von Komponenten, Modulen oder der Implementierung von Diensten eines Systems, der eine optimale Betriebsleistung auch in Zeiten hoher Belastung gewährleistet. Obwohl es keine festen Regeln für die Implementierung von HA-Systemen gibt, gibt es im Allgemeinen einige bewährte Praktiken, die man befolgen muss, damit man das meiste aus den wenigsten Ressourcen herausholen kann.
Warum brauchen Sie das?
Lassen Sie uns die Ausfallzeit definieren, bevor wir weitergehen. Ausfallzeit ist der Zeitraum, in dem Ihr System (oder Netzwerk) nicht zur Verfügung steht oder nicht reagiert. Ausfallzeiten können für ein Unternehmen enorme Verluste bedeuten, da alle ihre Dienste auf Eis gelegt werden, wenn ihre Systeme nicht funktionieren. Im August 2013 fiel Amazon für 15 Minuten aus (sowohl Web- als auch mobile Dienste) und verlor am Ende über 66000 Dollar pro Minute. Das sind enorme Zahlen, selbst für ein Unternehmen von der Größe von Amazon.
Es gibt zwei Arten von Ausfallzeiten – geplante und ungeplante. Eine geplante Ausfallzeit ist das Ergebnis von Wartungsarbeiten, die unvermeidlich sind. Dazu gehören das Einspielen von Patches, das Aktualisieren von Software oder auch Änderungen am Datenbankschema. Eine ungeplante Ausfallzeit wird jedoch durch ein unvorhergesehenes Ereignis wie einen Hardware- oder Softwareausfall verursacht. Dies kann durch Stromausfälle oder den Ausfall einer Komponente geschehen. Geplante Ausfallzeiten werden in der Regel nicht in die Leistungsberechnungen einbezogen.
Das Hauptziel der Implementierung einer Hochverfügbarkeitsarchitektur besteht darin, sicherzustellen, dass Ihr System oder Ihre Anwendung so konfiguriert ist, dass es bzw. sie verschiedene Lasten und unterschiedliche Ausfälle mit minimalen oder gar keinen Ausfallzeiten bewältigen kann. Es gibt mehrere Komponenten, die Ihnen dabei helfen, dies zu erreichen, und wir werden sie kurz besprechen.
Wie wird die Verfügbarkeit gemessen?
Organisationen, die planen, eine Cloud-Infrastruktur vollständig zu nutzen, müssen auch in der Lage sein, die Anforderungen an eine 24/7-Verfügbarkeit zu erfüllen. Die Verfügbarkeit kann als Prozentsatz der Zeit gemessen werden, in der die Systeme verfügbar sind.
x = (n – y) * 100/n
Wobei n die Gesamtzahl der Minuten in einem Kalendermonat und y die Gesamtzahl der Minuten ist, in denen der Dienst in dem betreffenden Kalendermonat nicht verfügbar ist. Hochverfügbarkeit bezieht sich einfach auf eine Komponente oder ein System, das über einen wünschenswert langen Zeitraum kontinuierlich betriebsbereit ist. Der weit verbreitete, aber fast unmöglich zu erreichende Verfügbarkeitsstandard für ein Produkt oder System wird als „fünf 9er“ (99,999 Prozent) Verfügbarkeit bezeichnet. Hochverfügbarkeit ist eine Voraussetzung für jedes Unternehmen, das sein Geschäft vor den Risiken schützen will, die ein Systemausfall mit sich bringt. Diese Risiken können zu Umsatzeinbußen in Millionenhöhe führen.
Ist es das Geld wirklich wert?
Die Tatsache, dass eine Hochverfügbarkeitsarchitektur eine höhere Leistung bietet, ist in Ordnung, aber sie ist auch mit hohen Kosten verbunden. Sie müssen sich fragen, ob die Entscheidung aus finanzieller Sicht gerechtfertigt ist.
Eine Entscheidung muss darüber getroffen werden, ob die zusätzliche Betriebszeit wirklich das Geld wert ist, das dafür aufgewendet werden muss. Sie müssen sich fragen, wie schädlich potenzielle Ausfallzeiten für Ihr Unternehmen sein können und wie wichtig Ihre Dienste für den Betrieb Ihres Unternehmens sind.
Wie erreichen wir das?
Nun, da Sie sich dafür entschieden haben, lassen Sie uns die Möglichkeiten der Umsetzung diskutieren. Es ist nicht intuitiv, dass das Hinzufügen weiterer Komponenten zu einem System nicht dazu beiträgt, es stabiler zu machen und eine hohe Verfügbarkeit zu erreichen. Es kann sogar das Gegenteil bewirken, da mehr Komponenten die Wahrscheinlichkeit von Ausfällen erhöhen. Moderne Konzepte ermöglichen die Verteilung der Arbeitslasten auf mehrere Instanzen, z. B. ein Netzwerk oder einen Cluster, wodurch die Ressourcennutzung optimiert, die Leistung maximiert, die Antwortzeiten minimiert und die Überlastung eines Systems vermieden werden kann (Lastausgleich). Dazu gehört auch das Umschalten auf eine Standby-Ressource wie einen Server, eine Komponente oder ein Netzwerk, wenn ein aktives System ausfällt, was als Failover-System bezeichnet wird.
Verwendung mehrerer Anwendungsserver:
Stellen Sie sich vor, Sie haben einen einzigen Server für die Erbringung Ihrer Dienste und ein plötzlicher Anstieg des Datenverkehrs führt zu dessen Ausfall (oder lässt ihn abstürzen). In einer solchen Situation können bis zum Neustart Ihres Servers keine weiteren Anfragen bedient werden, was zu einer Ausfallzeit führt.
Die offensichtliche Lösung besteht darin, Ihre Anwendung auf mehrere Server zu verteilen. Sie müssen die Last auf alle diese Server verteilen, damit keiner überlastet wird und die Ausgabe optimal ist. Sie können auch Teile Ihrer Anwendung auf verschiedenen Servern bereitstellen. Zum Beispiel könnte es einen separaten Server für die Bearbeitung von E-Mails oder einen separaten für die Verarbeitung statischer Dateien wie Bilder geben (wie ein Content Delivery Network).
Skalierung von Datenbanken:
Datenbanken sind die beliebteste und vielleicht eine der konzeptionell einfachsten Möglichkeiten, Benutzerdaten zu speichern. Man muss bedenken, dass Datenbanken für Ihre Dienste genauso wichtig sind wie Ihre Anwendungsserver. Datenbanken laufen auf separaten Servern (wie dem Amazon RDS) und sind ebenfalls anfällig für Abstürze. Noch schlimmer ist, dass ein Datenbankabsturz zu einem Verlust von Benutzerdaten führen kann, was sich als kostspielig erweisen kann.
Redundanz ist ein Prozess, der Systeme mit hoher Verfügbarkeit schafft, indem er die Erkennbarkeit von Ausfällen und die Vermeidung von Ausfällen gemeinsamer Ursache erreicht. Dies kann durch die Unterhaltung von Slaves erreicht werden, die einspringen können, wenn der Hauptserver ausfällt. Ein weiteres interessantes Konzept zur Skalierung von Datenbanken ist das Sharding. Ein Shard ist eine horizontale Partition in einer Datenbank, in der Zeilen derselben Tabelle auf einem separaten Server ausgeführt werden.
Diversifizierte geografische Standorte:
Die Skalierung Ihrer Anwendungen und dann Ihrer Datenbanken ist ein wirklich großer Schritt nach vorn, aber was ist, wenn sich alle Server am selben physischen Standort befinden und etwas Schreckliches wie eine Naturkatastrophe das Rechenzentrum, in dem sich Ihre Server befinden, trifft? Dies kann zu enormen Ausfallzeiten führen.
Es ist daher zwingend erforderlich, dass Sie Ihre Server an verschiedenen Standorten betreiben. Bei den meisten modernen Webdiensten können Sie den geografischen Standort Ihrer Server auswählen. Sie sollten eine kluge Wahl treffen, um sicherzustellen, dass Ihre Server über die ganze Welt verteilt sind und nicht in einem Gebiet lokalisiert sind.
In diesem Beitrag habe ich versucht, die grundlegenden Ideen zu erläutern, die die Idee der Hochverfügbarkeitsarchitektur ausmachen. Letztendlich ist es offensichtlich, dass kein einziges System alle Probleme lösen kann. Daher müssen Sie Ihre Situation sorgfältig prüfen und entscheiden, welche Optionen für Sie am besten geeignet sind. Wir hoffen, dass Ihnen diese Einführung in die Welt der Hochverfügbarkeitsarchitektur geholfen hat, zu entscheiden, wie Sie dies für sich selbst erreichen können.
Was sind die besten Praktiken?
Um Systemausfälle einzudämmen und sowohl geplante als auch ungeplante Ausfallzeiten in Schach zu halten, wird der Einsatz einer Hochverfügbarkeitsarchitektur (HA) dringend empfohlen, insbesondere für unternehmenskritische Anwendungen. Verfügbarkeitsexperten betonen, dass ein System nur dann hochverfügbar ist, wenn seine Bestandteile gut konzipiert und gründlich getestet sind. Der Entwurf und die anschließende Implementierung einer Hochverfügbarkeitsarchitektur kann angesichts der großen Bandbreite an Software-, Hardware- und Bereitstellungsoptionen schwierig sein. Eine erfolgreiche Arbeit beginnt jedoch in der Regel mit klar definierten und umfassend verstandenen Geschäftsanforderungen. Die gewählte Architektur sollte in der Lage sein, die gewünschten Sicherheits-, Skalierbarkeits-, Leistungs- und Verfügbarkeitsniveaus zu erfüllen.
Die einzige Möglichkeit, die wünschenswerte Betriebskontinuität von Rechenumgebungen während der Produktionszeiten zu gewährleisten, besteht darin, sie mit hoher Verfügbarkeit zu konzipieren. Zusätzlich zum richtigen Entwurf der Architektur können Unternehmen wichtige Anwendungen online halten, indem sie die empfohlenen Best Practices für Hochverfügbarkeit beachten.
- Datensicherungen, Wiederherstellung und Replikation
Das Markenzeichen eines guten Datenschutzplans, der vor Systemausfällen schützt, ist eine solide Sicherungs- und Wiederherstellungsstrategie. Wertvolle Daten sollten niemals ohne angemessene Backups, Replikation oder die Möglichkeit, die Daten wiederherzustellen, gespeichert werden. Jedes Rechenzentrum sollte für den Fall eines Datenverlusts oder einer Datenbeschädigung im Voraus planen. Datenfehler können zu Problemen bei der Kundenauthentifizierung führen, Finanzkonten schädigen und in der Folge die Glaubwürdigkeit der Geschäftswelt beeinträchtigen. Die empfohlene Strategie zur Aufrechterhaltung der Datenintegrität besteht darin, ein vollständiges Backup der primären Datenbank zu erstellen und dann den Quellserver schrittweise auf Datenbeschädigungen zu testen. Die Erstellung vollständiger Backups steht an vorderster Front, wenn es darum geht, sich von einem katastrophalen Systemausfall zu erholen.
- Clustering
Selbst bei höchster Qualität der Softwareentwicklung sind alle Anwendungsdienste irgendwann zum Ausfall verurteilt. Bei der Hochverfügbarkeit geht es um die Bereitstellung von Anwendungsdiensten unabhängig von Ausfällen. Clustering kann im Falle eines Fehlers für eine sofortige Ausfallsicherung der Anwendungsdienste sorgen. Ein „clusterfähiger“ Anwendungsdienst ist in der Lage, Ressourcen von mehreren Servern abzurufen; er greift auf einen Sekundärserver zurück, wenn der Hauptserver offline geht. Ein Hochverfügbarkeits-Cluster besteht aus mehreren Knoten, die Informationen über gemeinsame Datenspeichergitter austauschen. Das bedeutet, dass ein beliebiger Knoten vom Netz getrennt oder abgeschaltet werden kann und der Rest des Clusters normal weiterarbeitet, solange mindestens ein Knoten voll funktionsfähig ist. Jeder Knoten kann einzeln aufgerüstet und bei laufendem Betrieb des Clusters wieder angeschlossen werden. Die hohen Kosten für die Anschaffung zusätzlicher Hardware zur Implementierung eines Clusters können durch die Einrichtung eines virtualisierten Clusters, das die verfügbaren Hardwareressourcen nutzt, gemildert werden.
- Netzwerk-Lastverteilung
Lastverteilung ist eine wirksame Methode zur Erhöhung der Verfügbarkeit kritischer webbasierter Anwendungen. Wenn Serverausfälle festgestellt werden, werden sie nahtlos ersetzt, indem der Datenverkehr automatisch auf noch laufende Server umverteilt wird. Der Lastausgleich führt nicht nur zu einer hohen Verfügbarkeit, sondern ermöglicht auch eine inkrementelle Skalierbarkeit. Der Lastausgleich im Netz kann entweder über ein „Pull“- oder ein „Push“-Modell erreicht werden. Sie ermöglicht ein höheres Maß an Fehlertoleranz innerhalb von Serviceanwendungen.
- Failover-Lösungen
Hochverfügbarkeitsarchitekturen bestehen traditionell aus einer Reihe lose gekoppelter Server, die über Failover-Funktionen verfügen. Failover ist im Grunde ein Backup-Betriebsmodus, bei dem die Funktionen einer Systemkomponente von einem sekundären System übernommen werden, falls das primäre System ausfällt, entweder durch einen Ausfall oder eine geplante Ausfallzeit. Ein „kaltes Failover“ liegt vor, wenn der sekundäre Server erst gestartet wird, nachdem der primäre Server vollständig heruntergefahren wurde. Ein „Hot Failover“ liegt vor, wenn alle Server gleichzeitig in Betrieb sind und die gesamte Last zu einem bestimmten Zeitpunkt auf einen einzigen Server gelenkt wird. In beiden Szenarien werden die Aufgaben automatisch auf eine Standby-Systemkomponente verlagert, so dass der Prozess für den Endbenutzer so nahtlos wie möglich bleibt. Failover kann über DNS in einer gut kontrollierten Umgebung verwaltet werden.
- Geografische Redundanz
Geografische Redundanz ist die einzige Verteidigungslinie, wenn es darum geht, den Ausfall von Diensten bei katastrophalen Ereignissen wie Naturkatastrophen zu verhindern, die Systemausfälle verursachen. Wie bei der Georeplikation werden mehrere Server an geografisch getrennten Standorten eingesetzt. Die Standorte sollten global verteilt und nicht auf ein bestimmtes Gebiet beschränkt sein. Es ist von entscheidender Bedeutung, dass an jedem der Standorte unabhängige Anwendungsstacks betrieben werden, so dass bei einem Ausfall an einem Standort der andere weiterlaufen kann. Im Idealfall sollten diese Standorte völlig unabhängig voneinander sein.
- Planen Sie für den Fall eines Ausfalls
Trotz der Tatsache, dass die Anwendung der Best Practices für Hochverfügbarkeit im Wesentlichen eine Planung für den Fall eines Ausfalls ist, gibt es noch andere Maßnahmen, die ein Unternehmen ergreifen kann, um seine Bereitschaft für den Fall eines Systemausfalls zu erhöhen, der zu Ausfallzeiten führt. Unternehmen sollten Daten über Ausfälle oder Ressourcenverbrauch aufbewahren, die zur Eingrenzung von Problemen und zur Analyse von Trends verwendet werden können. Diese Daten können nur durch eine kontinuierliche Überwachung der betrieblichen Auslastung gesammelt werden. Ein Wiederherstellungs-Helpdesk kann eingerichtet werden, um Probleminformationen zu sammeln, einen Problemverlauf zu erstellen und sofortige Problemlösungen einzuleiten. Ein Wiederherstellungsplan sollte nicht nur gut dokumentiert sein, sondern auch regelmäßig getestet werden, um seine Praxistauglichkeit bei ungeplanten Unterbrechungen zu gewährleisten. Die Schulung der Mitarbeiter im Bereich der Verfügbarkeitstechnik verbessert ihre Fähigkeiten bei der Entwicklung, dem Einsatz und der Wartung von Hochverfügbarkeitsarchitekturen. Es sollten auch Sicherheitsrichtlinien eingeführt werden, um Systemausfälle aufgrund von Sicherheitsverletzungen einzudämmen.
Beispiel: FileCloud-Hochverfügbarkeitsarchitektur
Das folgende Diagramm erklärt, wie FileCloud-Server für Hochverfügbarkeit konfiguriert werden können, um die Zuverlässigkeit der Dienste zu verbessern und Ausfallzeiten zu reduzieren. Klicken Sie hier für weitere Details.