Mikrodienste als Architekturansatz Microservices-Anwendungen in der AWS Cloud

Autor / Redakteur: Sascha Möllering * / Stephan Augsten

„Wir möchten Microservices als Architekturmuster für unsere Anwendungen in der AWS Cloud nutzen, um die Agilität der Entwicklungsteams zu erhöhen. Welche Empfehlungen und Entwurfsmuster existieren für Microservices in der AWS Cloud?“

Anbieter zum Thema

Serverlose Microservices-Architektur.
Serverlose Microservices-Architektur.
(Bild: Amazon Web Services)

Microservices sind ein Entwurfsmuster aus dem Bereich der Softwarearchitektur und gleichzeitig ein Organisationsansatz. Sie sollen das Ausrollen von neuen Software-Releases beschleunigen, Innovationen vorantreiben und die Wartbarkeit und Skalierbarkeit von Software erhöhen.

Ein wesentliches Konzept von Microservice-Architekturen ist es, die einzelnen Komponenten einer Software in kleine und unabhängige Services aufzuteilen, die miteinander ausschließliche über wohldefinierte Schnittstellen kommunizieren. Dabei liegt die Verantwortung für die einzelnen Services bei kleinen und agilen Entwicklungsteams, die – im Idealfall – für den produktiven Betrieb ihrer Software-Komponenten selbst verantwortlich sind.

Microservices sind kein komplett neuer Ansatz für das Design verteilter Anwendungen. Vielmehr sind sie als eine Sammlung und Kombination verschiedener bewährter Konzepte wie beispielsweise objektorientiertes Design, serviceorientierte Architektur, „API first“-Design oder Continuous Delivery zu begreifen.

Es existiert also keine klare Definition von Microservices, dennoch teilen sich Microservice-Architekturen einige Charakteristika:

  • Polyglott: Microservices können in unterschiedlichen Sprachen implementiert sein, es besteht nicht die Notwendigkeit, eine einzelne Sprache für alle Microservices einer Architektur zu definieren.
  • „Mach nur eine Sache, aber die richtig“: Ein Microservice sollte maximal einen Bounded Context, also einen abgegrenzten Bereich, implementieren.
  • „You build it, you run it“: Teams sollten – im Idealfall – für den produktiven Betrieb ihrer Software selbst verantwortlich sein.
  • Blackbox: Für die Nutzung der einzelnen Services sollte die eigentliche Implementierung irrelevant sein, da nur wohldefinierte APIs konsumiert werden.
  • Unabhängig: Die einzelnen Dienste einer Microservices-Anwendung sollten komplett unabhängig voneinander sein, was auch das Deployment der einzelnen Services einschließt.
  • Dezentralisiert: In einer Microservices-Architektur existiert kein zentraler Dienst, um den sich alle anderen Services gruppieren.

Microservices sind aber kein Allheilmittel, mit dem alle Probleme der Anwendungsentwicklung auf magische Art und Weise gelöst werden. So wie bei jedem anderen Architekturansatz auch, haben Microservices ganz eigene Herausforderungen wie beispielsweise die Überwachung der Services, das Deployment und die Service Discovery.

Service Discovery ist die automatische Erkennung von Services in einem Netzwerk. In AWS kann dies beispielsweise mit Hilfe von Amazon Route 53 auf Basis von DNS oder Application Load Balancern implementiert werden.

Microservices mit Docker

In der Vergangenheit wurden monolithische Anwendungen auf Basis von Schichten gebaut. Hierzu zählten typischerweise ein UI-Layer, ein Business-Layer, der die Geschäftslogik enthält, und ein Persistence-Layer, der für die Persistierung der Daten zuständig ist. Eine zentrale Idee von Microservices ist es, dass diese maximal einen Bounded Context (im Sinne von Domain-driven Design) implementieren.

Auf Docker basierende Microservices-Architektur.
Auf Docker basierende Microservices-Architektur.
(Bild: Amazon Web Services)

Oft wird für die technische Umsetzung von Microservices die Container-Technologie Docker verwendet. Die vorangestellte Abbildung zeigt eine typische Microservices-Implementierung in AWS auf Basis von Amazon EC2 Container Service (ECS). Amazon ECS ist ein hochgradig skalierbarer, sehr leistungsfähiger Container-Management-Service, der Docker-Container unterstützt und es erlaubt, Anwendungen auf einem verwalteten Cluster von Amazon EC2-Instances zu betreiben und zu verwalten.

Serverlose Microservices

Die Architektur auf Basis von Amazon ECS nutzt bereits verwaltete Services, aber es müssen immer noch EC2-Instanzen verwaltet werden. Um die betriebliche Komplexität zu verringern, kann die skizzierte Anwendung auch mit Hilfe von serverlosen Services umgesetzt werden.

Serverlose Microservices-Architektur.
Serverlose Microservices-Architektur.
(Bild: Amazon Web Services)

Ein anderer Ansatz, um Microservices zu implementieren, besteht in der Nutzung von AWS Lambda. AWS Lambda ist ein serverloser Datenverarbeitungsdienst, der Code beim Eintreten bestimmter Ereignisse ausführt und automatisch die zugrundeliegenden Datenverarbeitungsressourcen verwaltet. Die Abbildung links zeigt die Umsetzung der bereits skizzierten Architektur auf Basis von AWS Lambda.

Fazit

Microservices sind ein Architekturansatz, um mit Hilfe eines verteilten Systems die Unzulänglichkeiten einer klassischen monolithischen Architektur bewältigen zu können. Wie bei jedem anderen Architekturansatz hat auch dieser sowohl Vor- als auch Nachteile.

Sascha Möllering
Sascha Möllering
(Bild: AWS Germany GmbH)

Zu letzteren zählen beispielsweise die höhere architekturelle Komplexität und der höhere Aufwand im Betrieb einer solchen Anwendung, deren zentrales Merkmal die Verteilung ist. Das Thema Microservices ist komplex und eine deutlich detailliertere Abhandlung der angesprochenen Themen ist im kürzlich aktualisierten Whitepaper „Microservices on AWS“ zu finden.

(ID:44991844)