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:
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?
Bei dieser Frage geht es eigentlich um den richtigen zu verwendenden Lastausgleichsalgorithmus, da Algorithmen bestimmen, wie der Datenverkehr (Anfragen) auf die Ressourcen (Server) verteilt wird. Die Antwort darauf hängt von vielen Faktoren ab, beginnt aber mit der App-Architektur und den Nutzungsmustern.
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.
Dies liegt daran, dass ein Back-End-„Server“ für die Ausführung der gesamten Geschäftslogik verantwortlich ist. Versuchen Sie, sich anzumelden? Ein Produkt bestellen? Im Katalog stöbern? Alles derselbe "Server". Sie denken vielleicht, Sie könnten den Datenverkehr einfach mit einem einfachen Algorithmus wie Round-Robin verteilen. Im Gegenteil, mein Freund. Jede Geschäftsfunktion hat unterschiedliche Anforderungen an Rechenleistung, Speicher, Netzwerk und Daten. Das bedeutet, dass jede Geschäftsfunktion den „Server“ unterschiedlich belastet. Eine einzelne „Server“-Instanz kann schnell überlastet werden, wenn einfach zu viele ressourcenintensive Anfragen an sie gerichtet werden.
Die beste Möglichkeit, die Verteilung von Anfragen zu optimieren und so die Verfügbarkeit herkömmlicher Apps sicherzustellen, ist die Verwendung eines Algorithmus, der auf der geringsten Anzahl von Verbindungen basiert. Dadurch wird die Last auf die einzelnen „Server“-Instanzen basierend auf der Anzahl der aktuell geöffneten Verbindungen verteilt. Dies funktioniert, weil die Verarbeitung ressourcenintensiver Anfragen länger dauert und die Verbindungen somit aktiv bleiben. Indem Sie Anfragen an „Server“ mit weniger Verbindungen weiterleiten, ist es wahrscheinlicher, dass alle verfügbar bleiben.
Bei modernen (auf Microservices basierenden) Apps lässt sich diese Frage leichter beantworten. Das liegt daran, dass eine moderne App bereits in individuell skalierbare Geschäftsfunktionen zerlegt ist. Es ist immer noch eine gute Idee, einen Algorithmus zu verwenden, der auf der geringsten Anzahl von Verbindungen basiert, da einige Anforderungen für dieselbe Funktion mehr Ressourcen verbrauchen können als andere. In einer modernen App-Architektur ist der Datenverkehr jedoch auf natürliche Weise ausgeglichen, sodass praktisch jeder Algorithmus dazu dient, alle „Server“ verfügbar zu halten.
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.
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.
Sie sollten während der Entwicklung immer nach einer Möglichkeit fragen, einen „Gesundheitscheck“ für die App durchzuführen. Ob über eine API oder eine HTTP-Anfrage – die Existenz eines speziellen „Integritätschecks“ bietet Entwicklern und Betreibern eine einfache Möglichkeit, zu überprüfen, ob die App ordnungsgemäß funktioniert. Hierzu können Funktionen gehören, die die Konnektivität mit externen Ressourcen wie Daten oder Partner-APIs überprüfen. Weil der Ausfall einer dieser Komponenten dazu führen kann, dass die App dem Verbraucher als nicht verfügbar oder nicht reagierend angezeigt wird. Daher ist es wichtig, die Verfügbarkeit aller erforderlichen Komponenten zu überprüfen.
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.