Wie man ruhig schläft, wenn man einen Cloud-Service hat: wichtige architektonische Tipps

Wie man ruhig schläft, wenn man einen Cloud-Service hat: wichtige architektonische TippsLOST by sophiagworld

In diesem Artikel finden Sie einige allgemeine Vorlagen, die Ingenieuren helfen, mit großangelegten Diensten zu arbeiten, die von Millionen von Nutzern aufgerufen werden. 

Laut den Erfahrungen des Autors ist dies keine vollständige Liste, beinhaltet jedoch wirklich effektive Tipps. Lassen Sie uns also beginnen.

Übersetzt mit Unterstützung von Mail.ru Cloud Lösungen.

Anfängerniveau

Die unten aufgeführten Maßnahmen sind relativ einfach umzusetzen, bieten jedoch eine hohe Rendite. Wenn Sie sie noch nicht umgesetzt haben, werden Sie von den erheblichen Verbesserungen überrascht sein.

Infrastruktur als Code

Der erste Teil der Tipps besteht darin, Infrastruktur als Code umzusetzen. Das bedeutet, dass Sie einen programmatischen Weg zur Bereitstellung Ihrer gesamten Infrastruktur benötigen. Das klingt kompliziert, aber wir sprechen tatsächlich über den folgenden Code:

Bereitstellung von 100 virtuellen Maschinen

  • mit Ubuntu
  • 2 GB RAM in jedem
  • sie werden den folgenden Code haben
  • mit diesen Parametern

Sie können Änderungen an der Infrastruktur verfolgen und schnell zu ihnen zurückkehren, indem Sie ein Versionskontrollsystem verwenden.

Mein modernistischer Ansatz sagt, dass Sie Kubernetes/Docker verwenden können, um alles oben Genannte zu erreichen, und das hat er auch recht.

Zusätzlich können Sie Automatisierung mit Chef, Puppet oder Terraform erreichen.

Kontinuierliche Integration und Lieferung

Um einen skalierbaren Service zu erstellen, ist es wichtig, eine Build- und Testpipeline für jeden Pull-Request zu haben. Selbst der einfachste Test stellt sicher, dass der Code, den Sie bereitstellen, kompiliert wird.

In diesem Schritt stellen Sie sich immer die Frage: Wird mein Build kompiliert und die Tests bestehen, ist es valide? Es mag nach einem niedrigen Standard erscheinen, aber es löst viele Probleme.

Wie man ruhig schläft, wenn man einen Cloud-Service hat: wichtige architektonische Tipps
Es gibt nichts Schönes, als diese Häkchen zu sehen.

Für diese Technologie können Sie Github, CircleCI oder Jenkins in Betracht ziehen.

Lastenausgleich

Wir möchten also einen Lastenausgleich einrichten, um den Verkehr umzuleiten und eine gleichmäßige Lastverteilung auf allen Knoten sicherzustellen oder um den Dienst im Falle eines Ausfalls aufrechtzuerhalten:

Wie man ruhig schläft, wenn man einen Cloud-Service hat: wichtige architektonische Tipps
Ein Lastenausgleich hilft in der Regel gut, den Datenverkehr zu verteilen. Eine bewährte Praxis ist die redundante Lastenverteilung, um einen Single Point of Failure zu vermeiden.

Lastenausgleicher werden normalerweise in der Cloud konfiguriert, die Sie verwenden.

RayID, Korrelations-ID oder UUID für Anfragen

Hatten Sie jemals in einer Anwendung einen Fehler mit einer Nachricht wie dieser: „Etwas ist schiefgelaufen. Bitte speichern Sie diese ID und senden Sie sie an unseren Support“?

Wie man ruhig schläft, wenn man einen Cloud-Service hat: wichtige architektonische Tipps
Eine eindeutige Kennung, Korrelations-ID, RayID oder eine ihrer Varianten ist ein einzigartiger Identifier, der es ermöglicht, eine Anfrage während ihres gesamten Lebenszyklus zu verfolgen. Dies ermöglicht es, den gesamten Verlauf der Anfrage in den Protokollen nachzuvollziehen.

Wie man ruhig schläft, wenn man einen Cloud-Service hat: wichtige architektonische Tipps
Der Benutzer stellt eine Anfrage an System A, dann verbindet sich A mit B, B mit C, speichert in X und schließlich wird die Anfrage zurück zu A gesendet.

Wenn Sie sich remote mit virtuellen Maschinen verbinden und versuchen würden, den Verlauf der Anfrage nachzuvollziehen (und manuell zuzuordnen, welche Aufrufe stattfinden), würden Sie verrückt werden. Eine eindeutige Kennung erleichtert das Leben erheblich. Es ist eine der einfachsten Maßnahmen, um Zeit zu sparen, während der Service wächst.

Durchschnittliches Niveau

Hier sind die Ratschläge komplizierter als die vorherigen, aber die richtigen Werkzeuge erleichtern die Aufgabe und bieten auch für kleine und mittlere Unternehmen eine rentierliche Lösung.

Zentralisierte Protokollierung

Herzlichen Glückwunsch! Sie haben 100 virtuelle Maschinen bereitgestellt. Am nächsten Tag kommt der Geschäftsführer und beklagt sich über einen Fehler, den er während der Testphase des Dienstes erhalten hat. Er erwähnt die entsprechende ID, die wir oben besprochen haben, aber Sie müssen die Protokolle von 100 Maschinen durchsuchen, um diejenige zu finden, die den Fehler verursacht hat. Und das muss vor der morgigen Präsentation erledigt werden.

Obwohl das nach einem unterhaltsamen Abenteuer klingt, ist es besser, sicherzustellen, dass Sie von einem Ort aus nach allen Protokollen suchen können. Ich habe das Problem der Protokollzentralisierung mit der integrierten Funktionalität des ELK-Stacks gelöst: Hier wird die Protokollsammlung mit Suchmöglichkeiten unterstützt. Das wird Ihnen wirklich helfen, das spezifische Protokoll zu finden. Als Bonus können Sie Diagramme erstellen und ähnliche unterhaltsame Dinge tun.

Wie man ruhig schläft, wenn man einen Cloud-Service hat: wichtige architektonische Tipps
Funktionalität des ELK-Stacks

Überwachungsagenten

Nun, da Ihr Dienst in Betrieb ist, müssen Sie sicherstellen, dass er fehlerfrei läuft. Der beste Weg, dies zu tun, ist, mehrere Agenten, die parallel arbeiten und überprüfen, dass alles funktioniert und die grundlegenden Operationen ausgeführt werden.

In diesem Schritt überprüfen Sie, ob die gestartete Version gut funktioniert und ordnungsgemäß läuft..

Für kleine und mittlere Projekte empfehle ich Postman zur Überwachung und Dokumentation von APIs. Aber insgesamt sollten Sie einfach sicherstellen, dass Sie eine Möglichkeit haben, herauszufinden, wann ein Ausfall aufgetreten ist, und rechtzeitig benachrichtigt werden.

Automatisches Skalieren je nach Last

Das ist ganz einfach. Wenn Sie eine virtuelle Maschine haben, die Anfragen bearbeitet und sie sich dem Punkt nähert, an dem 80 % des Speichers belegt sind, können Sie entweder ihre Ressourcen erhöhen oder weitere virtuelle Maschinen zum Cluster hinzufügen. Die automatisierte Durchführung dieser Vorgänge eignet sich hervorragend für die elastische Anpassung der Kapazität an die Last. Sie sollten jedoch immer darauf achten, wie viel Geld Sie ausgeben, und angemessene Grenzen setzen.

Wie man ruhig schläft, wenn man einen Cloud-Service hat: wichtige architektonische Tipps
In den meisten Cloud-Services können Sie automatisches Scaling einrichten, indem Sie eine größere Anzahl von Servern oder leistungsstärkere Server verwenden.

Experimentsystem

Eine sichere Methode, Updates zu implementieren, besteht darin, etwas für 1 % der Nutzer über einen Zeitraum von einer Stunde zu testen. Sie haben sicherlich gesehen, wie solche Mechanismen funktionieren. Zum Beispiel zeigt Facebook einem Teil der Nutzer eine andere Farbe oder ändert die Schriftgröße, um zu sehen, wie die Nutzer auf die Änderungen reagieren. Das nennt man A/B-Testing.

Selbst die Einführung einer neuen Funktion kann als Experiment gestartet werden, um zu bestimmen, wie sie veröffentlicht werden soll. Außerdem erhalten Sie die Möglichkeit, die Konfiguration „zurückzusetzen“ oder in Echtzeit anzupassen, wenn eine Funktion Ihr Service beeinträchtigt.

Fortgeschrittenes Niveau

Hier sind Ratschläge, die recht schwer umzusetzen sind. Wahrscheinlich benötigen Sie etwas mehr Ressourcen, weshalb es für kleine oder mittelständische Unternehmen schwierig sein wird, dies zu bewältigen.

Blue-Green Deployments

Das nenne ich die "Erlang-Methode" für das Deployment. Erlang wurde weit verbreitet, als die Telekommunikationsunternehmen aufkamen. Zur Anrufweiterleitung wurden softwarebasierte Vermittler genutzt. Die Hauptaufgabe dieser Software bestand darin, Anrufe während des Systemupdates nicht abzubrechen. Erlang bietet eine hervorragende Möglichkeit, ein neues Modul zu laden, ohne das vorherige zu beeinträchtigen.

Dieser Schritt hängt von der Verfügbarkeit eines Lastenausgleichs ab. Stellen Sie sich vor, Sie haben Version N Ihrer Software und möchten dann Version N+1 bereitstellen. 

Sie könnten Sie einfach den Dienst stoppen und die nächste Version zu einem für Ihre Nutzer passenden Zeitpunkt bereitstellen, was einige Ausfallzeiten mit sich bringt. Aber nehmen wir an, Sie haben gibt es wirklich strenge SLA-Anforderungen. Ein SLA von 99,99 % bedeutet, dass Sie für nur 52 Minuten pro Jahr offline gehen können.

Wenn Sie wirklich solche Werte erreichen wollen, benötigen Sie zwei gleichzeitige Deployments: 

  • das, das gerade läuft (N);
  • die nächste Version (N+1). 

Sie geben dem Lastenausgleich an, einen bestimmten Prozentsatz des Traffics auf die neue Version (N+1) umzuleiten, während Sie aktiv auf Regressionen überwachen.

Wie man ruhig schläft, wenn man einen Cloud-Service hat: wichtige architektonische Tipps
Hier haben wir das grüne Deployment N, das einwandfrei funktioniert. Wir versuchen, zur nächsten Version dieses Deployments zu wechseln.

Zuerst senden wir einen wirklich kleinen Test, um zu sehen, ob unser Deployment N+1 mit einer geringen Trafficmenge funktioniert:

Wie man ruhig schläft, wenn man einen Cloud-Service hat: wichtige architektonische Tipps
Schließlich haben wir eine Reihe automatisierter Überprüfungen, die wir letztendlich ausführen, bis unser Deployment abgeschlossen ist. Wenn Sie sehr, sehr vorsichtig sind, können Sie auch Ihr Deployment N für einen schnellen Rollback im Falle einer schlechten Regression dauerhaft beibehalten:

Wie man ruhig schläft, wenn man einen Cloud-Service hat: wichtige architektonische Tipps
Wenn Sie auf ein noch fortschrittlicheres Niveau gehen möchten, lassen Sie alles im Blue-Green-Deployment automatisch ablaufen.

Anomalieerkennung und automatisches Abmildern von Auswirkungen

Mit einem zentralisierten Protokollmanagement und einer effektiven Protokollsammlung können Sie höhere Ziele setzen. Beispielsweise die proaktive Vorhersage von Ausfällen. Auf Monitoren und in Protokollen werden Funktionen überwacht und verschiedene Diagramme erstellt – somit können Probleme vorab erkannt werden:

Wie man ruhig schläft, wenn man einen Cloud-Service hat: wichtige architektonische Tipps
Mit der Anomalieerkennung beginnen Sie, einige Hinweise zu analysieren, die der Dienst liefert. Ein Anstieg der CPU-Auslastung könnte darauf hinweisen, dass die Festplatte versagt, während ein Anstieg der Anzahl von Anfragen signalisiert, dass eine Skalierung erforderlich ist. Solche statistischen Daten machen den Dienst proaktiv.

Mit solchen Analysedaten können Sie in jeder Dimension skalieren und sowohl proaktive als auch reaktive Anpassungen an Maschinen, Datenbanken, Verbindungen und anderen Ressourcen vornehmen.

Das ist alles!

Diese Prioritätenliste wird Ihnen viele Probleme ersparen, wenn Sie einen Cloud-Service aufbauen.

Der Autor des Originalartikels lädt die Leser ein, ihre Kommentare zu hinterlassen und Änderungen vorzunehmen. Der Artikel wird als Open Source bereitgestellt, Pull-Requests akzeptiert der Autor auf GitHub.

Weitere lesenswerte Artikel zu diesem Thema:

  1. Go und CPU-Caches
  2. Kubernetes im Geiste der Piraterie mit einem Implementierungsschema
  3. Unser Kanal Rund um Kubernetes auf Telegram

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster