Microservices mit AWS Serverless

Entwicklung von Microservices mit AWS Lambda, Amazon API Gateway und Amazon DynamoDB

Was sind Microservices?

Microservices werden seit geraumer Zeit zum Erstellen von Anwendungen verwendet. Im Gegensatz zu monolithischen Anwendungen, die eng gekoppelt und stark abhängig sind, sind Microservices lose gekoppelt, voneinander unabhängig, leicht skalierbar und verkürzen die Time-To-Market. Ein Microservice sollte nur eine Aufgabe haben und kann von anderen Services über seine API-Schnittstelle verwendet werden, während jeder Service seine eigene Datenbank verwaltet. Ein Microservice sollte sich nur mit seinem eigenen Domänenmodell befassen und nicht mit dem Domänenmodell eines anderen Services.

Microservices Architecture

Abbildung 1 zeigt eine simple Microservice Architektur bestehend aus drei unabhängigen Komponenten (Order, User und Payment Service). Während eingehende Requests zunächst über ein API-Gateway geleitet werden, werden sie dann basierend auf ihrem Endpunkt an den jeweiligen Microservice weitergeleitet. Der Service übernimmt dann das Abrufen/Speichern der Daten in seiner eigenen Datenbank basierend auf dem Request des Clients.

Ein Grund, warum die Microservice-Architektur bei Softwareentwicklungsteams immer beliebter wird, ist, dass jeder Service unabhängig von den anderen Microservices entwickelt werden kann. Dies bedeutet schnellere Fertigstellung, kleinere und weniger komplexe Codebasen und Fehlerbehebungen sowie eine schnellere Time-To-Market. Ein weiterer Vorteil ist, dass Teams ihre bevorzugte Programmiersprache und ihren bevorzugten Tech-Stack für jeden Service auswählen können, da jeder Microservice normalerweise mit eigenem Code-Repository und eigener Deployment-Pipeline ausgestattet ist. So können ein Java-Entwicklerteam und ein Golang-Entwicklerteam dieselbe Anwendung entwickeln, während sie unabhängig an verschiedenen Microservice-Komponenten der Anwendung arbeiten. Folglich können Entwicklungsteams autonomer arbeiten. Sie können unabhängig von anderen Teams Code schreiben, testen und bereitstellen. Wichtig ist jedoch, dass all die genannten Vorteile von Microservices auch Nachteile mit sich bringen. Zum Beispiel können manche Operationen, die mehrere Microservices involvieren, komplex und schwer nachzuverfolgen sein.

Daher ist es in einer Microservice-Anwendung entscheidend, Logging und Monitoring zu implementieren, damit komplexe Operationen verstanden werden können. Wenn man dies im Hinterkopf behält, bietet die Microservice-Architektur eine großartige Möglichkeit, die Entwicklung von Anwendungen effizienter zu gestalten.

Was ist AWS Serverless?

Amazon Maintains Cloud Sead as Microsoft Edges Closer

Abbildung 2 zeigt Amazons Position als weltweiter Cloud-Infrastruktur-Anbieter mit 31% Marktanteil im ersten Quartal im Jahr 2024

Amazon Web Services (AWS) ist bis heute der führende Cloud-Infrastruktur-Anbieter (siehe Abbildung 2), der eine Vielzahl verschiedener Services anbietet, die Softwareentwicklern und Unternehmen die notwendige Infrastruktur zur Entwicklung verschiedenster Anwendungen bereitstellen. Darunter befinden sich zum Beispiel Services wie EC2, ECS oder AWS Serverless. Der letztgenannte Service bedeutet, dass Entwickler keine zugrunde liegende Infrastruktur verwalten müssen, da dies von AWS selbst übernommen wird. Es gibt eine Reihe von AWS Services, die genutzt werden können, um eine Anwendung in der Cloud auszuführen, ohne sich um Dinge wie automatisches Skalieren oder das Ersetzen von Instanzen kümmern zu müssen. Dies führt erfreulicherweise zu weniger operativem Aufwand für Entwickler.

Einige dieser Services sind beispielsweise:
 

  • AWS Lambda
  • Amazon API Gateway
  • Amazon DynamoDB
  • Amazon Simple Queue Service
  • Amazon EventBridge



Diese Services integrieren sich nahtlos, wodurch Sicherheit, Datenpersistenz und die Kommunikation zwischen Services durch Queues, Notifications und Events ermöglicht werden. Darüber hinaus kann man AWS CloudWatch für Monitoring und Alarme verwenden, was beim Entwickeln einer verteilten Anwendung unerlässlich ist. Die Vorteile liegen in einer effizienteren Entwicklung, weniger Aufwand und schnelleren Time-To-Market Zeiten.

Zudem führt die  Nutzung von AWS Serverless auch zu niedrigen Kosten aufgrund des Pay-for-Value-Abrechnungsmodells. Man zahlt nur für die tatsächlich genutzten Ressourcen, denn AWS kümmert sich darum, die Ressourcen je nach niedriger oder hoher Nachfrage der Anwendung zu optimieren.

basic AWS Serverless architecture setup

Abbildung 3 zeigt ein AWS Serverless Architektur-Setup, indem ein Client mit einem Service über ein Amazon API Gateway interagiert

Amazon DynamoDB ist eine serverlose, nicht-relationale Datenbank, die horizontal skalierbar ist und hohe Leistung (geringe Latenz beim Datenabruf) sowie hohe Verfügbarkeit (über mehrere Verfügbarkeitszonen hinweg) mit nahezu unbegrenztem Datenfluss und Speicherplatz bietet. Sie arbeitet mit mehreren Tabellen, die Werte mit beliebigen Attributen enthalten können, solange ein Primärschlüssel, bestehend aus einem Partitionsschlüssel (HASH) oder einer Partition und einem Sortierschlüssel (HASH+RANGE), bereitgestellt wird. Jeder Eintrag in einer Tabelle sollte alle erforderlichen Daten enthalten, ohne dass zusätzliche Abfragen erforderlich sind. Mit Ausnahme des Primärschlüssels, der bei der Tabellenerstellung definiert werden muss, können alle anderen Attribute der Elemente im Laufe der Zeit hinzugefügt werden. Darüber hinaus bietet DynamoDB eine großartige Möglichkeit zur schnellen Abfrage von Daten mit parallelen Tabellenscans und gefilterten Abfragen mit globalen (alternativer Primärschlüssel, kann nach der Tabellenerstellung hinzugefügt/geändert werden) und lokalen (alternativer Sortierschlüssel, muss zum Zeitpunkt der Tabellenerstellung definiert werden) Sekundärindizes, wodurch Abfragen effizienter und flexibler werden.


Alles in allem machen die Vorteile von Amazon DynamoDB, wie ein flexibles Schema, keine zu verwaltende Server, keine Ausfallzeiten und automatische Skalierung zur schnellen Anpassung an aktuelle Kapazitätsanforderungen diesen AWS-Service zu einer gut geeigneten Wahl als Datenspeicher für einen Microservice.


Darüber hinaus lassen sich die oben genannten Services nahtlos in Amazon CloudWatch - einen Überwachungs- und Warndienst - integrieren, was die Beobachtbarkeit, die Fehlersuche und die Robustheit eines Services sowie die tägliche Arbeit der Entwickler erleichtert.

Fazit

Insgesamt bietet AWS Serverless seinen Nutzern eine Möglichkeit, Microservices effizient zu entwickeln und bereitzustellen und sich dabei auf die wichtigen Komponenten eines Service zu konzentrieren, was zu produktiveren Entwicklungsteams und somit zu einer schnelleren Time-to-Market führt. Natürlich sollte die Entscheidung, ob AWS Serverless die richtige Wahl ist, für jeden einzelnen Service getroffen werden und kann ein komplexer Entscheidungsprozess sein, der viele Faktoren umfasst. Dies kann anfangs überwältigend sein, aber sobald die anfänglichen Hindernisse beseitigt sind, wird die Entwicklung auf AWS Serverless reibungslos verlaufen.