5 native AWS-Services, die eine serverlose End-to-End-Plattform aufbauen können

In der Vergangenheit erforderte der Aufbau eines automatisierten Softwaresystems die Einrichtung zahlreicher Server mit jeweils zugewiesener CPU-Leistung, Arbeitsspeicher, Speicherkapazität und anderen spezifischen Ressourcen. Im Anschluss wurde ein Team von Administratoren zusammengestellt, das diese Systeme betreute. Daraufhin übernahm das Entwicklungsteam die Infrastruktur und begann, Prozesse zu implementieren, um die Server miteinander zu verbinden.

Dieser Ablauf konnte recht kompliziert sein, da viele verschiedene Gruppen auf ein gemeinsames Ziel hinarbeiteten. Diese unterschiedlichen Interessen konnten zu Konflikten und somit zu Problemen führen.

Zudem war dies eine kostenintensive Angelegenheit. Es war notwendig, Administratoren zu bezahlen und Server liefen kontinuierlich, auch wenn sie nicht ausgelastet waren, wodurch Ressourcen verbraucht wurden.

Um langfristig eine optimale Leistung zu gewährleisten, war eine Auto-Scaling-Lösung erforderlich, die die Serverressourcen automatisch an den Bedarf anpasste.

Die Cloud-Plattform bietet hier einen entscheidenden Vorteil: Sie erlaubt es, eine durchgängige Architektur aufzubauen, ohne dass die Notwendigkeit besteht, einen Server-Cluster einzurichten. Aus administrativer Sicht entfällt jeglicher Wartungsaufwand.

Dies stellt eine kostengünstige Alternative für Start-ups und die MVP-Phasen (Minimum Viable Product) von Projekten dar. Besonders wenn zukünftige Produktionsauslastungen und Nutzeraktivitäten schwer abzuschätzen sind, ist dies ein idealer Ausgangspunkt. Die Konfiguration von Server-Clustern kann hier eine Herausforderung darstellen.

Die Automatisierung von Prozessen durch serverlose Cloud-Dienste kennzeichnet die serverlose Architektur. Sie verbindet Dienste und liefert Ergebnisse, die denen herkömmlicher Cluster-Server ähneln.

Im Folgenden wird ein Beispiel für den Aufbau einer solchen Architektur vorgestellt, bei der ausschließlich native AWS-Dienste zum Einsatz kommen.

Der serverlose Ablauf der Dienste

Stellen Sie sich vor, Sie möchten eine Plattform entwickeln, die verschiedene Daten und Bilder (oder Fotos) der Infrastruktur bestimmter Anlagen erfasst (dies kann jede beliebige Produktions- oder Versorgungsanlage sein).

  • Um spätere Analysen zu ermöglichen, müssen die eingehenden Daten zunächst erfasst werden.
  • Nach Anwendung von Geschäftsregeln speichert ein Backend-Prozess die errechneten Ergebnisse als normalisierte Informationen in einer relationalen Datenbank.
  • Ein Frontend für die Anwendung, das normalisierte und aufbereitete Daten anzeigt, ermöglicht es den Nutzern, die Ergebnisse einzusehen.

Betrachten wir nun die möglichen Komponenten dieser Architektur.

AWS S3-Buckets

Quelle: aws.amazon.com

Amazon S3-Buckets bieten eine ausgezeichnete Möglichkeit zur Speicherung von Dateien oder Bildern in der AWS-Cloud. Die Speicherkosten für S3-Buckets sind bemerkenswert niedrig. Durch die Implementierung einer S3-Bucket-Lebenszyklusrichtlinie können diese Kosten weiter reduziert werden.

Eine solche Richtlinie verschiebt ältere Dateien automatisch in andere S3-Bucket-Klassen, wie beispielsweise Archiv- oder Tiefarchivzugriff. Diese Klassen unterscheiden sich in der Zugriffszeit, was jedoch bei alten Daten von geringerer Bedeutung ist. Der Zugriff auf die archivierten Daten erfolgt hauptsächlich im Falle eines dringenden Ereignisses und nicht im normalen Betriebsalltag.

  • Ihre Daten können in Unterordnern organisiert werden.
  • Es sollten geeignete Berechtigungsbeschränkungen definiert werden.
  • Buckets sollten mit Tags versehen werden, um sie leicht identifizieren zu können und die Verwendung in dynamischen S3-Bucket-Richtlinien zu ermöglichen.
  • Der Bucket ist von Grund auf serverlos konzipiert. Er dient lediglich als Speicherort für Ihre Daten.

Ein S3-Bucket ist von Grund auf serverlos konzipiert und dient lediglich als Speicherort für Ihre Daten.

AWS Athena-Datenbank

Quelle: aws.amazon.com

Athena vereinfacht die Erstellung eines AWS Basic Data Lake. Es handelt sich um eine serverlose Datenbank, die S3-Buckets zur Speicherung ihrer Daten nutzt. Die Datenorganisation erfolgt über strukturierte Dateiformate, wie zum Beispiel Parquet- oder CSV-Dateien (Comma-Separated Value). Der S3-Bucket enthält die Dateien und Athena referenziert diese, wenn Prozesse Daten aus der Datenbank abfragen.

Es ist jedoch zu beachten, dass Athena bestimmte Funktionen nicht unterstützt, die ansonsten als Standard gelten, wie beispielsweise Update-Anweisungen. Daher sollte Athena als eine sehr einfache Lösung betrachtet werden.

Dennoch unterstützt Athena Indizierung und Partitionierung. Außerdem lässt sie sich sehr einfach horizontal skalieren, da dies so einfach ist wie das Hinzufügen neuer Buckets zur Infrastruktur. Für eine einfache, aber funktionsfähige Data-Lake-Erstellung kann dies in den meisten Fällen ausreichend sein.

Für eine gute Leistung ist die Auswahl des optimalen Datendesigns, mit Fokus auf die zukünftige Nutzung, unerlässlich. Es ist wichtig, dass Sie eine klare Vorstellung davon haben, wie Sie Daten abrufen möchten. Die nachträgliche Umstrukturierung von Tabellen, die bereits existieren und mit Daten gefüllt sind, ist aufwendig.

Athena DB ist eine gute Wahl und passt zu Ihrem Ziel, wenn Sie einen einfachen und unveränderlichen Datenpool erstellen möchten, der im Laufe der Zeit problemlos horizontal skaliert werden kann.

AWS Aurora-Datenbank

Quelle: aws.amazon.com

Athena DB zeichnet sich durch die Speicherung unkuratierter Daten aus. Sie sollten Ihre Originaldaten speichern, um ihre zukünftige Wiederverwendung zu gewährleisten. Allerdings ist Athena langsam bei der Bereitstellung von selektierten Ergebnissen für eine Frontend-App.

Eine der besten Optionen, vor allem im Hinblick auf eine einfache Einrichtung, ist die Aurora-Datenbank, die im serverlosen Modus betrieben wird.

Aurora ist mehr als nur eine einfache Datenbank. Es ist eine der fortschrittlichsten nativen relationalen Datenbanklösungen in AWS. Es handelt sich um eine hochkomplexe Lösung, die mit jeder neuen Version weiterentwickelt wird.

Aurora ist einzigartig, da sie im serverlosen Modus betrieben werden kann, was sie von anderen relationalen Diensten unterscheidet. Der Modus funktioniert folgendermaßen:

  • Der Aurora-Cluster wird über die AWS-Konsole konfiguriert. Hier müssen die standardmäßigen CPU- und RAM-Stufen sowie das maximale Intervall der automatischen Skalierungsfunktion festgelegt werden. Dies wirkt sich auf die Leistung aus, die der Aurora-Cluster dynamisch hinzufügen oder entfernen kann. AWS entscheidet auf Basis der aktuellen Auslastung der Datenbank über die Hoch- oder Herunterskalierung.
  • Der Aurora-Cluster wird nicht gestartet, bis eine tatsächliche Anfrage von einem Benutzer oder Prozess initiiert wird. Beispielsweise wenn die geplante Stapelverarbeitung beginnt oder wenn die Anwendung einen Backend-API-Aufruf durchführt, um Daten aus der Datenbank abzurufen. Die Datenbank wird automatisch geöffnet und bleibt für einen vorher festgelegten Zeitraum aktiv, nachdem die Anfrageprozesse abgeschlossen sind.
  • Der Aurora-Cluster wird automatisch heruntergefahren, wenn keine Arbeit mehr in der Datenbank anfällt.

Um es noch einmal zu betonen: Die serverlose Aurora DB läuft nur dann, wenn sie tatsächlich arbeiten muss. Der automatisch gestartete Cluster wird wieder heruntergefahren, wenn er keine Arbeit verarbeitet. Die tatsächliche Arbeitszeit ist das, was berechnet wird, nicht die Zeit, in der das System ungenutzt ist.

Das serverlose Aurora wird vollständig von AWS verwaltet und erfordert keinen Administrator.

AWS Amplify

Amplify bietet eine serverlose Plattform zur schnellen Bereitstellung von Frontend-Anwendungen, die mit JavaScript- und React-Bibliotheken entwickelt wurden. Die Einrichtung von Cluster-Servern ist nicht erforderlich. Der Code kann direkt über die AWS-Konsole bereitgestellt oder über eine automatisierte DevOps-Pipeline verwendet werden.

Sie können Backend-APIs aufrufen, um auf Daten in den Datenbanken zuzugreifen. Diese Aufrufe ermöglichen den Zugriff auf die eigentlichen Daten in der Frontend-Anwendung. Die Hauptoptimierung der Leistung im Backend sollte vom Team durchgeführt werden. Die Möglichkeit einer langsamen Reaktion in der Benutzeroberfläche lässt sich noch weiter reduzieren, wenn effektive Select-Anweisungen direkt in den API-Aufrufen entworfen werden.

AWS Step Functions

Quelle: aws.amazon.com

Obwohl alle Hauptkomponenten eines Systems serverlos sind, garantiert dies noch keine vollständig serverlose Architektur. Dies ist nur dann der Fall, wenn alle Batch-Prozesse zwischen den Komponenten ebenfalls serverlos ablaufen.

AWS Step Functions bieten die optimale Lösung in der AWS-Cloud. Eine verbundene Liste von AWS Lambda-Funktionen bildet die Step Function. Diese Funktionen erstellen ein Flussdiagramm mit klaren Start- und Endpunkten. Eine Lambda-Funktion, die in der Regel in Python oder Node.js geschrieben ist, ist ein ausführbarer Code-Abschnitt, der alle benötigten Aufgaben verarbeitet.

Das folgende Beispiel veranschaulicht, wie eine Step Function ausgeführt werden kann:

  • Eine automatische Lambda-Funktion wird durch AWS ausgelöst, sobald eine neue Datei in den S3-Ordner gelangt. Nach der Analyse der Datei lädt die Lambda-Funktion diese in Athena. Die Lambda-Funktion speichert ihre Ergebnisse vor dem Beenden entweder in einem CSV-Format in einem S3-Bucket (oder in einer Datenbank-Tracking-Tabelle).
  • Dieses Ergebnis wird dann vom nächsten Lambda-Prozess verwendet, um die nächsten Schritte auszuführen. Dies kann das Aufrufen eines Modells für maschinelles Lernen und die Transformation einer Teilmenge der neuen Daten in normalisierte Tabellen umfassen. Der letzte Schritt kann das Laden der Daten in die Aurora-Datenbank sein.
  • Eine Step Function verknüpft diese Lambda-Funktionen miteinander, um einen Stapelablauf zu erzeugen. Es ist sogar möglich, anstelle eines Schritts eine andere Step Function aufzurufen. Auf diese Weise können viele Szenarien abgebildet werden.
  • Dieser serverlose Ablauf hat einen wesentlichen Nachteil: Jede Lambda-Funktion kann maximal 15 Minuten lang ausgeführt werden. Die Aufteilung des Ablaufs in kleinere Lambda-Funktionen kann dieses Problem reduzieren.

    Es ist möglich, mehrere Lambda-Funktionen gleichzeitig in einem Schritt aufzurufen, was bedeutet, einen Schritt mit mehreren gleichzeitig ablaufenden Lambda-Prozessen zu parallelisieren. Warten Sie einfach, bis die gesamte parallele Lambda-Verarbeitung abgeschlossen ist, bevor Sie fortfahren. Setzen Sie dann die Verarbeitung mit dem nächsten Lambda-Prozess fort.

    Abschließende Bemerkungen

    Die serverlose Architektur bietet die einzigartige Möglichkeit, eine Cloud-Plattform zu schaffen, die die gesamte Systemlandschaft abdeckt. Diese Plattform ist horizontal skalierbar und mit geringen Betriebskosten verbunden.

    Es handelt sich um die ideale Lösung für Projekte mit begrenztem Budget. Insbesondere wenn die tatsächliche Produktionsauslastung unbekannt ist, ist sie eine ausgezeichnete Option für die Exploration. Dies ist besonders wichtig, nachdem alle Nutzer erfolgreich eingebunden wurden. Projektteams können dennoch eine umfassende Übersicht über die Funktionsweise des Systems erhalten. All diese Vorteile können genutzt werden, ohne dass dabei Kompromisse eingegangen werden müssen.

    Diese Lösung ist nicht in allen Fällen ausreichend, insbesondere nicht in Fällen mit hoher CPU-Auslastung. Die AWS-Cloud entwickelt sich jedoch ständig in Bezug auf serverlose Anwendungsfälle weiter. Bevor Sie sich für eine serverlose Lösung für Ihr nächstes AWS-Cloud-Projekt entscheiden, ist es ratsam, gründliche Recherchen anzustellen.

    Informieren Sie sich im nächsten Schritt über die besten serverlosen Datenbanken für moderne Anwendungen.