Über unsMediaKontaktImpressum
Michael Wittig 28. Februar 2017

Serverless Architekturen auf AWS

Eine serverless Plattform erlaubt es Ihnen, Ihre Applikation einschließlich Rechenkapazität, Speicher und Netzwerk zu betrieben, ohne dass Sie eine einzige (virtuelle) Maschine hochfahren und verwalten müssen. Dieser Artikel fokussiert auf serverless Architekturen auf AWS samt Lambda, API Gateway, DynamoDB, S3 und mehr. Die Entwurfsmuster kann man auf andere Cloud-Plattformen übertragen.

Die Fähigkeit, sich auf die Softwareentwicklung zu konzentrieren, anstatt eine Flotte von Servern zu betreiben, ist der Haupttreiber hinter serverless. Alternativ, wie Werner Vogels, CTO von Amazon.com, sagt: "Kein Server ist einfacher zu verwalten, als kein Server." Ein weiterer wichtiger Aspekt der serverless Infrastruktur ist die feingranulare Abrechnung und extreme Skalierbarkeit.

Um Ihnen einen Eindruck von typischen Anwendungsfällen zu geben, sind hier einige serverless Anwendungen, an denen ich in der Vergangenheit gearbeitet habe:

  • Sammeln von Metriken aus einer Webanwendung mit einer REST-API in einem Hochlastszenario.
  • Extrahieren und Speichern von Daten aus eingehenden E-Mails, die Auftrags- und Statusinformationen enthalten.
  • Erstellen einer REST-API, die ein Standard-CRUD-Backend bereitstellt.
  • Sammeln und Transformieren von Daten innerhalb eines ETL-Prozesses in einem Big Data-Szenario.
  • Analysieren von Log-Nachrichten aus einem Echtzeit-Datenstrom.
  • Erstellen eines Chatbots, der mit mehreren APIs im Hintergrund interagiert.

Einschränkungen

Die Fähigkeit, Quellcode auf einer hochverfügbaren und skalierbaren Infrastruktur auszuführen, ist das Herzstück jeder serverless Plattform. Mit AWS Lambda können Sie beispielsweise Ihren Quellcode als Reaktion auf Ereignisse ausführen. AWS stellt die Recheninfrastruktur und eine Laufzeitumgebung für JavaScript (Node.js), Java, Python oder NET Core (C#) zur Verfügung. Eine typische serverless Anwendung besteht aus mehreren Funktionen. Bei AWS Lambda gilt für eine Funktionsausführung eine maximale Ausführungszeit von 5 Minuten. Sie können jedoch Funktionen massiv parallel ausführen.

Die Aufteilung der Anwendung in kleine Funktionen ist notwendig, wenn Sie einem serverless Ansatz folgen. Die Nutzung von Microservice-Architekturen hilft Ihnen, dieses Ziel zu erreichen. Serverless wird für ereignisgesteuerte Architekturen erstellt. Ein Ereignis ist die Quelle für das Auslösen einer serverless Funktion oder der Leim beim Orchestrieren mehrerer serverless Funktionen, die ein System bilden.

Das Auslösen einer AWS Lambda-Funktion ist auf folgenden Ereignissen möglich:

  • Eingehende HTTPS-Anfragen.
  • Änderung an Daten in einer Datenbank oder Objektspeicher (S3).
  • Eingehende Nachricht (z. B. E-Mail).
  • Veröffentlichen einer Nachricht auf einem Topic oder Echtzeit-Datenstrom.
  • Zeitgesteuert (vergleichbar mit einem Cronjob).

Asynchrones Modell

Sie können serverless Funktionen in einem asynchronen oder synchronen Modell verwenden. In einem asynchronen Szenario wartet der Aufrufer nicht, bis die Funktion ein Ergebnis zurückliefert. Benachrichtigungen über WebSocket oder Push-Benachrichtigungen an ein mobiles Gerät können verwendet werden, um dem Benutzer asynchrones Feedback zu geben.

Die folgende Abbildung zeigt ein Beispiel einer asynchronen serverless Architektur. Die mobile Anwendung lädt ein Bild zu einem Objektspeicher (1) hoch. Der Objektspeicher erzeugt ein Änderungsereignis nach dem Hochladen des Bildes, was zu einer Ausführung einer serverless Funktion führt (2). Die serverless Funktion erzeugt eine Miniaturansicht basierend auf dem hochgeladenen Bild. Nach dem Hochladen der Miniaturansicht auf dem Objektspeicher (3) sendet die serverless Funktion eine Push-Benachrichtigung an die mobile Anwendung (4). Die mobile Anwendung lädt die Miniaturansicht herunter und aktualisiert die Benutzeroberfläche entsprechend (5).

Synchrones Modell

Ein typischer Anwendungsfall für das synchrone Modell ist eine REST-API. Eine eingehende HTTPS-Anforderung löst eine serverless Funktion aus. Der Aufrufer wartet, bis die Funktion ein Ergebnis zurückgibt.

Abb.2 zeigt die Architektur für eine serverless REST-API. Der Client sendet eine HTTPS-Anforderung an ein API-Gateway (1). Das API-Gateway löst eine serverless Funktion aus (2). Die serverless Funktion liest Daten aus einer NoSQL-Datenbank (3). Anschließend gibt die serverless Funktion das Ergebnis des Datenbankaufrufs an den Client (4) zurück.

Architekturmuster: Ereignissystem

Die synchrone Verkettung von serverless Funktionen ist ein Anti-Muster. Das Entwerfen eines asynchronen Ereignissystems ist stattdessen ein vielversprechender Ansatz. Ein Ereignissystem empfängt und verarbeitet Ereignisse durch das Befolgen von Regeln, die im System definiert sind. Die Verarbeitung von Ereignissen geschieht asynchron. Asynchrone Verarbeitung hat Vorteile, wenn Sie eine skalierbare Lösung erstellen wollen, weil es Sie von der Bürde einer sofortigen Antwort befreit. Stattdessen kann das System die Ereignisse in eine Warteschlange einreihen und so schnell wie möglich bearbeiten.

Die folgende Abbildung zeigt die Architektur eines serverless Ereignissystems, das auf AWS IoT und AWS Lambda basiert. Ein API Gateway empfängt Kauf- und Verkaufereignisse von einem Marktplatz. Eine serverless Funktion validiert eingehende Ereignisse und leitet sie zu einem Topic weiter.

Zwei Regeln subskribieren Ereignisse aus den Topics.

  1. Die erste Regel subskribiert Kauf- und Verkaufereignisse. Die Regel leitet alle Ereignisse an eine NoSQL-Datenbank zur Archivierung weiter.
  2. Die zweite Regel subskribiert sich nur auf Kaufereignisse. Die Regel führt eine serverless Funktion für jedes eingehende Kaufereignis aus. Die serverless Funktion prüft das Kaufereignis auf Betrug und sendet eine Benachrichtigung an ein Betrug-Topic, wenn ein Betrug erkannt wird.

Eine dritte Regel subskribiert das Betrug-Topic und sendet für jedes eingehende Ereignis eine Benachrichtigung an ein Drittsystem.

Es ist nicht erforderlich, dass eine serverless Funktion eine andere Funktion aufruft. Funktionen kommunizieren über Ereignisse, die über Topics verteilt werden.

Zustandslos

Eine serverless Funktion ist zustandslos. Persistierender Zustand zwischen zwei Ausführungen derselben Funktion ist in der Regel nicht möglich. Weder im Speicher, noch auf der Festplatte. Daher muss Ihre serverless Funktion den Zustand extern speichern. Auf AWS gibt es die folgenden Optionen, um Daten zu speichern: Amazon DynamoDB, eine NoSQL-Datenbank und Amazon S3, ein Objektspeicher.

Darüber hinaus können Sie auch eine SQL-Datenbank (Amazon RDS) oder eine In-Memory-Datenbank (Amazon ElastiCache) verwenden. Doch Vorsicht, einige dieser Systeme skalieren nicht horizontal. Sie sind also ein möglicher Engpass innerhalb Ihrer serverless Architektur.

Bausteine

Serverless ist nicht nur das Ausführen von Quellcode. Viel wichtiger ist eine Plattform, die Komponenten zur Lösung allgemeiner Probleme bietet. Sie können diese Bausteine verwenden, um Ihr System zu planen und Ihre Anwendung zu implementieren, ohne das Rad neu zu erfinden. Cloud-Anbieter bieten verschiedene Managed Services an. Normalerweise kommunizieren serverless Funktionen mit diesen Managed Services über eine REST-API, die oft über ein SDK zugänglich ist. Einige Beispiele für Bausteine für serverless Anwendungen von AWS:

  • Amazon SES: Senden und Empfangen von E-Mails
  • Amazon SNS: Senden von Push-Benachrichtigungen
  • Amazon Lex: Inhalt von Text erkennen
  • Amazon Polly: Verwandeln von Text in Sprache
  • Amazon Rekognition: Analyse von Bildern
  • Amazon Machine Learning: Maschinelles Lernen
  • Amazon Cognito: Authentifizierung und Autorisierung von Benutzern

Zusammenfassung

Serverless Architekturen bieten neue Möglichkeiten für den Aufbau von Cloud-Anwendungen. Die wichtigsten Vorteile von serverless Architekturen: Minimaler Aufwand für die Implementierung und den Betrieb von Anwendungen, hoch skalierbare und fehlertolerante Umgebung und die Möglichkeit, Bausteine zu kombinieren, um allgemeine Probleme zu lösen, anstatt das Rad neu zu erfinden. Ereignisgesteuerte Architekturen eignen sich hervorragend für serverless Funktionen, da sie verschiedene Komponenten lose miteinander koppeln können. Das Aufteilen von Aufgaben in kleine Teilaufgaben ist aufgrund der maximalen Ausführungsdauer von wenigen Minuten wichtig.

Autor

Michael Wittig

Michael Wittig ist Autor von Amazon Web Services in Action (Manning) und bloggt auf cloudonauten.de. Als unabhängiger Berater beschleunigt er mit AWS und DevOps die IT seiner Kunden.
>> Weiterlesen
Das könnte Sie auch interessieren
Kommentare (0)

Neuen Kommentar schreiben