So schlafen Sie gut, wenn Sie über einen Cloud-Dienst verfügen: grundlegende Architekturtipps

So schlafen Sie gut, wenn Sie über einen Cloud-Dienst verfügen: grundlegende ArchitekturtippsVERLOREN von sophiagworld

Dieser Artikel enthält einige gängige Muster, die Ingenieuren bei der Arbeit mit umfangreichen Diensten helfen sollen, auf die Millionen von Benutzern zugreifen. 

Nach Erfahrung des Autors handelt es sich hierbei nicht um eine erschöpfende Liste, aber tatsächlich Wirksam Rat. Also, fangen wir an.

Mit Unterstützung übersetzt Mail.ru Cloud-Lösungen.

Einstiegsniveau

Die unten aufgeführten Maßnahmen sind relativ einfach umzusetzen, haben aber eine hohe Wirkung. Wenn Sie sie noch nicht ausprobiert haben, werden Sie von den deutlichen Verbesserungen überrascht sein.

Infrastruktur als Code

Der erste Teil des Ratschlags besteht darin, die Infrastruktur als Code zu implementieren. Das bedeutet, dass Sie über eine programmgesteuerte Möglichkeit verfügen müssen, die gesamte Infrastruktur bereitzustellen. Es klingt kompliziert, aber wir reden tatsächlich über den folgenden Code:

Bereitstellung von 100 virtuellen Maschinen

  • mit Ubuntu
  • Jeweils 2 GB RAM
  • Sie werden den folgenden Code haben
  • mit diesen Parametern

Sie können Änderungen an Ihrer Infrastruktur verfolgen und mithilfe der Versionskontrolle schnell darauf zurückgreifen.

Der Modernist in mir sagt, dass man Kubernetes/Docker für all das nutzen kann, und er hat Recht.

Darüber hinaus können Sie Automatisierung mithilfe von Chef, Puppet oder Terraform bereitstellen.

Kontinuierliche Integration und Bereitstellung

Um einen skalierbaren Dienst zu erstellen, ist es wichtig, für jede Pull-Anfrage eine Build- und Testpipeline zu haben. Auch wenn der Test sehr einfach ist, stellt er zumindest sicher, dass der von Ihnen bereitgestellte Code kompiliert wird.

Jedes Mal beantworten Sie in dieser Phase die Frage: Wird meine Assembly kompiliert und besteht die Tests, ist sie gültig? Das mag wie eine niedrige Messlatte erscheinen, aber es löst viele Probleme.

So schlafen Sie gut, wenn Sie über einen Cloud-Dienst verfügen: grundlegende Architekturtipps
Es gibt nichts Schöneres, als diese Zecken zu sehen

Für diese Technologie können Sie Github, CircleCI oder Jenkins evaluieren.

Load Balancer

Daher möchten wir einen Load Balancer ausführen, um den Datenverkehr umzuleiten und sicherzustellen, dass alle Knoten gleichmäßig belastet werden, damit der Dienst im Falle eines Ausfalls nicht weiter ausgeführt wird:

So schlafen Sie gut, wenn Sie über einen Cloud-Dienst verfügen: grundlegende Architekturtipps
Ein Load Balancer leistet normalerweise gute Arbeit bei der Verteilung des Datenverkehrs. Die beste Vorgehensweise besteht darin, das Gleichgewicht zu halten, damit es keinen Single Point of Failure gibt.

Typischerweise werden Load Balancer in der von Ihnen verwendeten Cloud konfiguriert.

RayID, Korrelations-ID oder UUID für Anfragen

Haben Sie jemals einen Anwendungsfehler mit einer Meldung wie dieser festgestellt: "Etwas ist schief gelaufen. Speichern Sie diese ID und senden Sie sie an unser Support-Team.?

So schlafen Sie gut, wenn Sie über einen Cloud-Dienst verfügen: grundlegende Architekturtipps
Eine eindeutige Kennung, Korrelations-ID, RayID oder eine der Variationen ist eine eindeutige Kennung, mit der Sie eine Anfrage während ihres gesamten Lebenszyklus verfolgen können. Dadurch können Sie den gesamten Anforderungspfad in den Protokollen verfolgen.

So schlafen Sie gut, wenn Sie über einen Cloud-Dienst verfügen: grundlegende Architekturtipps
Der Benutzer stellt eine Anfrage an System A, dann kontaktiert A B, das C kontaktiert, sie in X speichert und dann die Anfrage an A zurücksendet

Wenn Sie eine Remote-Verbindung zu virtuellen Maschinen herstellen und versuchen würden, den Anforderungspfad zu verfolgen (und manuell zu korrelieren, welche Aufrufe getätigt werden), würden Sie verrückt werden. Eine eindeutige Kennung macht das Leben viel einfacher. Dies ist eines der einfachsten Dinge, die Sie tun können, um Zeit zu sparen, wenn Ihr Service wächst.

Durchschnittliches Niveau

Die Beratung ist hier komplexer als bei den vorherigen, aber die richtigen Tools erleichtern die Aufgabe und sorgen auch für kleine und mittlere Unternehmen für einen Return on Investment.

Zentralisierte Protokollierung

Glückwunsch! Sie haben 100 virtuelle Maschinen bereitgestellt. Am nächsten Tag kommt der CEO und beschwert sich über einen Fehler, den er beim Testen des Dienstes erhalten hat. Es meldet die entsprechende ID, über die wir oben gesprochen haben, aber Sie müssen die Protokolle von 100 Maschinen durchsuchen, um diejenige zu finden, die den Absturz verursacht hat. Und es muss vor der morgigen Präsentation gefunden werden.

Auch wenn das nach einem lustigen Abenteuer klingt, ist es am besten, sicherzustellen, dass Sie alle Zeitschriften an einem Ort durchsuchen können. Ich habe das Problem der Zentralisierung von Protokollen mithilfe der integrierten Funktionalität des ELK-Stacks gelöst: Er unterstützt die durchsuchbare Protokollsammlung. Dies wird wirklich dazu beitragen, das Problem zu lösen, eine bestimmte Zeitschrift zu finden. Als Bonus können Sie Diagramme und ähnliche lustige Dinge erstellen.

So schlafen Sie gut, wenn Sie über einen Cloud-Dienst verfügen: grundlegende Architekturtipps
ELK-Stack-Funktionalität

Überwachungsagenten

Nachdem Ihr Dienst nun betriebsbereit ist, müssen Sie sicherstellen, dass er reibungslos funktioniert. Der beste Weg, dies zu tun, besteht darin, mehrere auszuführen Agenten, die parallel arbeiten und prüfen, ob es funktioniert und grundlegende Vorgänge ausgeführt werden.

An dieser Stelle überprüfen Sie das Der Laufaufbau fühlt sich gut an und funktioniert gut.

Für kleine bis mittlere Projekte empfehle ich Postman zur Überwachung und Dokumentation von APIs. Im Allgemeinen möchten Sie jedoch nur sicherstellen, dass Sie wissen, wann ein Ausfall aufgetreten ist, und rechtzeitig benachrichtigt werden.

Automatische Skalierung abhängig von der Last

Es ist sehr einfach. Wenn eine VM Bearbeitungsanfragen stellt und diese sich einer Speicherauslastung von 80 % nähert, können Sie entweder ihre Ressourcen erhöhen oder dem Cluster weitere VMs hinzufügen. Die automatische Ausführung dieser Vorgänge eignet sich hervorragend für elastische Leistungsänderungen unter Last. Man sollte jedoch stets darauf achten, wie viel Geld man ausgibt, und angemessene Grenzen setzen.

So schlafen Sie gut, wenn Sie über einen Cloud-Dienst verfügen: grundlegende Architekturtipps
Bei den meisten Cloud-Diensten können Sie eine automatische Skalierung mit mehr oder leistungsstärkeren Servern konfigurieren.

Experimentiersystem

Eine gute Möglichkeit, Updates sicher auszurollen, besteht darin, etwas eine Stunde lang für 1 % der Benutzer testen zu können. Natürlich haben Sie solche Mechanismen in Aktion gesehen. Beispielsweise zeigt Facebook Teilen des Publikums eine andere Farbe oder ändert die Schriftgröße, um zu sehen, wie Nutzer die Änderungen wahrnehmen. Dies wird als A/B-Testing bezeichnet.

Sogar die Veröffentlichung einer neuen Funktion kann als Experiment gestartet und dann festgelegt werden, wie sie veröffentlicht werden soll. Sie haben außerdem die Möglichkeit, sich die Konfiguration im Handumdrehen zu „merken“ oder zu ändern, basierend auf der Funktion, die zu einer Verschlechterung Ihres Dienstes führt.

Fortgeschrittenes Niveau

Hier sind Tipps, die ziemlich schwer umzusetzen sind. Sie werden wahrscheinlich etwas mehr Ressourcen benötigen, sodass ein kleines oder mittleres Unternehmen Schwierigkeiten haben wird, dies zu bewältigen.

Blau-grüne Bereitstellungen

Das nenne ich die „Erlang“-Entfaltungsart. Erlang wurde weit verbreitet, als Telefongesellschaften auftauchten. Softswitches wurden zunehmend zur Weiterleitung von Telefongesprächen eingesetzt. Der Hauptzweck der Software auf diesen Switches bestand darin, Anrufe während Systemaktualisierungen nicht abzubrechen. Erlang bietet eine nette Möglichkeit, ein neues Modul zu laden, ohne das vorherige zum Absturz zu bringen.

Dieser Schritt hängt vom Vorhandensein eines Load Balancers ab. Stellen Sie sich vor, Sie haben Version N Ihrer Software und möchten dann Version N+1 bereitstellen. 

Sie könnten Stoppen Sie einfach den Dienst und führen Sie die nächste Version zu einem Zeitpunkt ein, der für Ihre Benutzer geeignet ist, und sorgen Sie für eine gewisse Ausfallzeit. Aber nehmen wir an, Sie haben es getan wirklich strenge SLA-Bedingungen. Ein SLA von 99,99 % bedeutet also, dass Sie offline gehen können nur um 52 Minuten pro Jahr.

Wenn Sie solche Indikatoren wirklich erreichen möchten, benötigen Sie zwei Bereitstellungen gleichzeitig: 

  • derjenige, der gerade ist (N);
  • nächste Version (N+1). 

Sie weisen den Load Balancer an, einen Prozentsatz des Datenverkehrs auf die neue Version (N+1) umzuleiten, während Sie aktiv auf Regressionen überwachen.

So schlafen Sie gut, wenn Sie über einen Cloud-Dienst verfügen: grundlegende Architekturtipps
Hier haben wir eine Green-N-Bereitstellung, die gut funktioniert. Wir versuchen, zur nächsten Version dieser Bereitstellung überzugehen

Zuerst senden wir einen wirklich kleinen Test, um zu sehen, ob unsere N+1-Bereitstellung mit einer kleinen Menge an Datenverkehr funktioniert:

So schlafen Sie gut, wenn Sie über einen Cloud-Dienst verfügen: grundlegende Architekturtipps
Schließlich verfügen wir über eine Reihe automatisierter Prüfungen, die wir schließlich ausführen, bis unsere Bereitstellung abgeschlossen ist. Wenn Sie sehr sehr Seien Sie vorsichtig, Sie können Ihre N-Bereitstellung auch für immer speichern, um im Falle einer schlechten Regression ein schnelles Rollback durchzuführen:

So schlafen Sie gut, wenn Sie über einen Cloud-Dienst verfügen: grundlegende Architekturtipps
Wenn Sie zu einem noch fortgeschritteneren Level aufsteigen möchten, lassen Sie alles in der Blau-Grün-Bereitstellung automatisch ablaufen.

Anomalieerkennung und automatische Schadensbegrenzung

Wenn Sie über eine zentralisierte Protokollierung und eine gute Protokollsammlung verfügen, können Sie sich bereits höhere Ziele setzen. Prognostizieren Sie beispielsweise Ausfälle proaktiv. Funktionen werden auf Monitoren und in Protokollen verfolgt und verschiedene Diagramme erstellt – und Sie können im Voraus vorhersagen, was schief gehen wird:

So schlafen Sie gut, wenn Sie über einen Cloud-Dienst verfügen: grundlegende Architekturtipps
Sobald Anomalien erkannt werden, beginnen Sie mit der Untersuchung einiger Hinweise, die der Dienst liefert. Beispielsweise kann ein Anstieg der CPU-Auslastung darauf hindeuten, dass eine Festplatte ausfällt, während ein Anstieg der Anforderungen darauf hindeuten kann, dass eine Skalierung erforderlich ist. Mithilfe dieser Art von statistischen Daten können Sie den Dienst proaktiv gestalten.

Mit diesen Erkenntnissen können Sie in jeder Dimension skalieren und die Eigenschaften von Maschinen, Datenbanken, Verbindungen und anderen Ressourcen proaktiv und reaktiv ändern.

Das ist alles!

Diese Prioritätenliste erspart Ihnen viele Probleme, wenn Sie einen Cloud-Dienst einrichten.

Der Autor des Originalartikels lädt die Leser ein, Kommentare zu hinterlassen und Änderungen vorzunehmen. Der Artikel wird vom Autor als Open-Source-Pull-Request verbreitet akzeptiert auf Github.

Was es sonst noch zum Thema zu lesen gibt:

  1. Gehen Sie und CPU-Caches
  2. Kubernetes im Geiste der Piraterie mit Vorlage zur Umsetzung
  3. Unser Kanal Rund um Kubernetes in Telegram

Source: habr.com

Kommentar hinzufügen