BLOG

Die zwei Fragen, die Sie beantworten müssen, um eine hohe Verfügbarkeit zu erreichen

Lori MacVittie Miniaturbild
Lori MacVittie
Veröffentlicht am 26. Mai 2020

Die möglicherweise größte Auswirkung der abrupten Migration von Verbrauchern und Mitarbeitern zu digitalen Erlebnissen auf den Betrieb ist die Verfügbarkeit. Sicherlich hatte ein erheblicher Prozentsatz der Unternehmen Probleme mit dem Fernzugriff, als die Mitarbeiter vom Büro ins Homeoffice wechselten. Doch nur ein Teil der Arbeitnehmer arbeitete letztlich von zu Hause aus, während ganze Bevölkerungen plötzlich auf digitale Lösungen ihres täglichen Lebens angewiesen waren. 

Betrachten wir die Ergebnisse von Nokia , das meldet, dass es im „Upstream-Verkehr (ausgewählte Netzwerke in den USA) für den Monat März 2020“ einen „Anstieg des Upstream-Verkehrs um 30 % gegenüber dem Niveau vor der Pandemie“ gab. Oder diese Daten, die einen Anstieg der Transaktionen um 72 % (und der Seitenaufrufe um 29 %) für die zweite Aprilwoche zeigen.  

Die Nachfrage nach digitalen Erlebnissen steigt. Und es gibt kaum etwas Frustrierenderes für einen Benutzer, als wenn eine App oder Website nicht geladen wird. Ehrlich gesagt gibt es für einen Betreiber kaum etwas Frustrierenderes, als wenn eine App oder Website nicht geladen wird.

Um eine hohe Verfügbarkeit zu erreichen, reicht es nicht aus, einfach einen Load Balancer in den Datenpfad einzufügen. Dies ist ein Teil der Gleichung, aber nur einer der Schritte, die erforderlich sind, um sicherzustellen, dass eine App oder Website verfügbar bleibt.

Als Erstes müssen Sie zwei nicht ganz einfache Fragen beantworten:

  • Wie verteilen Sie den Datenverkehr zwischen Servern, um eine hohe Verfügbarkeit zu gewährleisten?
  • Welches Maß an Integritätsprüfung ist erforderlich, um die Verfügbarkeit eines Servers ordnungsgemäß zu bestätigen?

Diese erscheinen auf den ersten Blick einfacher als sie tatsächlich sind. Denn um diese Fragen beantworten zu können, ist viel Wissen über die App und ihre Infrastruktur erforderlich.

Lassen Sie uns anfangen, einverstanden?

Wie verteilen Sie den Datenverkehr zwischen Servern, um eine hohe Verfügbarkeit zu gewährleisten?

Sie fragen gezielt nach dem passenden Load-Balancing-Algorithmus, denn durch Algorithmen bestimmen wir, wie Anfragen auf Server verteilt werden. Die Antwort hängt von vielen Faktoren ab – sie beginnt jedoch stets bei der Anwendungsarchitektur und den Nutzungsgewohnheiten. 

Wenn Sie also versuchen, eine herkömmliche App (Monolith, Client-Server, dreistufiges Web) hochverfügbar zu machen, müssen Sie die Nutzungsmuster aus einer völlig anderen Perspektive verstehen.

Ein Back-End-"Server" führt die gesamte Geschäftslogik aus und ist dafür verantwortlich. Möchten Sie sich anmelden? Möchten Sie ein Produkt bestellen? Stöbern Sie im Katalog? Es ist stets derselbe "Server". Sie könnten meinen, eine einfache Round-Robin-Verteilung sei ausreichend. Doch weit gefehlt. Jede Geschäftsfunktion benötigt unterschiedliche Rechenleistung, Speicher, Netzwerk und Datenzugriff. Das bedeutet, sie bringt jeweils eine andere Last auf den "Server". Sie laufen Gefahr, dass eine einzelne "Server"-Instanz durch zu viele ressourcenintensive Anfragen schnell überlastet wird.

Um die Verteilung von Anfragen zu optimieren und Verfügbarkeit traditioneller Apps sicherzustellen, sollten Sie einen Algorithmus verwenden, der auf der geringsten Anzahl offener Verbindungen basiert. So verteilen wir die Last auf die Serverinstanzen basierend auf der aktuell offenen Verbindungsanzahl. Das funktioniert, weil ressourcenintensive Anfragen länger bearbeiten, wodurch die Verbindungen länger aktiv bleiben. Indem Sie Anfragen an Server mit weniger Verbindungen leiten, halten Sie eher alle Server verfügbar.  

Bei modernen, microservices-basierten Apps können Sie diese Frage leichter beantworten. Moderne Apps sind bereits in Geschäftsfunktionen aufgeteilt, die einzeln skalierbar sind. Es empfiehlt sich dennoch, einen Algorithmus auf Basis der wenigsten Verbindungen zu nutzen, da manche Anfragen einer Funktion mehr Ressourcen beanspruchen als andere. In einer modernen App-Architektur gleicht sich der Datenverkehr jedoch meist von selbst aus, sodass nahezu jeder Algorithmus die Verfügbarkeit aller Server sichert.

Das (für mich jedenfalls) Interessante an der Verfügbarkeit ist, dass das Wissen, wie die Anfragen verteilt werden, nur die halbe Miete ist. Bei der anderen Methode kommen leider keine roten und blauen Laser zum Einsatz, sondern es kommt auf die Transparenz des Gesundheitszustands der Application an.

Welches Maß an Integritätsprüfung ist erforderlich, um die Verfügbarkeit eines Servers ordnungsgemäß zu bestätigen?

Hier sollte meine Abhandlung über Beobachtbarkeit* eingefügt werden, aber der Kürze und Ihrer geistigen Gesundheit halber fasse ich es einfach folgendermaßen zusammen: 

Wenn Sie zur Ermittlung des Status einer App etwas anderes als die „Application “ verwenden, gefährden Sie die hohe Verfügbarkeit. Das liegt daran, dass keine der anderen beobachtbaren Maßnahmen etwas über die App aussagt. Sie benötigen zwar Netzwerk-, Transport- und Plattformverfügbarkeit, aber solange Sie nicht sicher sind, dass die App bereit ist, Anfragen zu empfangen, riskieren Sie Probleme, wenn Sie ihr Datenverkehr senden.

Alle vier Komponenten der Beobachtbarkeit sind wichtig. Wenn Sie die Netzwerkverbindung verlieren, ist der Rest im Grunde egal. Deshalb ist es wichtig, alle vier Maßnahmen im Auge zu behalten bzw. zu kontrollieren. Die Architektur der App ist dabei unerheblich. Alle Apps sind von den Netzwerk-, Transport- und Plattformebenen abhängig. Die Architektur macht auf der App-Ebene einen Unterschied, da sie die Art und Weise einschränken kann, wie Sie feststellen, ob die App funktioniert oder nicht.

Bitten Sie während der Entwicklung immer um eine Möglichkeit, den Zustand der App zu überprüfen. Ob per API oder HTTP-Anfrage – ein dedizierter Zustandstest bietet Ihnen als Entwickler und Betriebsteam eine einfache Methode, um sicherzustellen, dass die App ordnungsgemäß funktioniert. Dazu gehört oft die Überprüfung der Verbindung zu externen Ressourcen wie Daten oder Partner-APIs. Da der Ausfall einer dieser Komponenten dazu führen kann, dass die App für Nutzer nicht erreichbar oder nicht reaktionsfähig wirkt, ist es entscheidend, die Verfügbarkeit aller erforderlichen Komponenten zu bestätigen.

Hohe Verfügbarkeit ist schwieriger als es scheint

In der Marketingliteratur wird oft behauptet, Hochverfügbarkeit ließe sich ganz einfach erreichen, indem man einen Server klonen und davor einen Load Balancer schieben würde. Tatsächlich sind jedoch erhebliche Überlegungen, Messungen und Vorbereitungen erforderlich, um die hohe Verfügbarkeit einer App sicherzustellen. Dabei geht es nicht nur darum, die Verfügbarkeit der Instanzen sicherzustellen. Es geht auch darum, die Verfügbarkeit aller abhängigen Apps sicherzustellen und die Anfragen so zu verteilen, dass keine der Instanzen überlastet wird.

Der Vorteil all der zusätzlichen Arbeit, die Sie in die Sicherstellung einer hohen Verfügbarkeit von Apps stecken, besteht in einer positiven Kundenerfahrung und in der Verringerung panischer Anrufe zu später Stunde wegen ausgefallener Apps.

* Ich habe eigentlich keine Dissertation über Beobachtbarkeit. Aber wenn ich es getan hätte, wäre es hier eingefügt worden.