© Excellent backgrounds/Shutterstock.com
Java Magazin
Wie setze ich einen Microservice konkret um?

Java Microservices im Praxischeck

Welche Bibliotheken gibt es, um die vielen Patterns zu implementieren? Wo muss man selbst Hand anlegen? Dieser Artikel gibt einen Überblick über die gängigen Themen, die bei der Implementierung eines Microservice auf den Entwickler zukommen.

Arne Limburg


Eine der Grundideen von Microservices ist, dass zwar das Zusammenspiel der Services von zentraler Stelle vorgegeben wird (Makroarchitektur), sich die Implementierung aber von Microservice zu Microservice unterscheiden kann. Ist also die Makroarchitektur einmal definiert, gilt es für die einzelnen Teams, die dadurch entstehenden Anforderungen innerhalb ihres Microservice umzusetzen. Bei der Wahl des Frameworks haben die Teams dann freie Hand. Wir werden in diesem Artikel den Fokus auf Java-basierte Frameworks legen und betrachten, welche Möglichkeiten es gibt, die einzelnen Anforderungen, die aus einer Makroarchitektur entstehen, umzusetzen.

Cross-cutting Concerns

Wie im Artikel „Vom Java-EE-Monolithen zu Microservices“ (S. 26) beschrieben, gibt es verschiedene Herausforderungen, die erst dadurch entstehen, dass man durch eine Microservices-Architektur ein hohes Maß an Inter-Service-Kommunikation hat.

Resilience

Bei dieser Kommunikation kann es zu verschiedenen Problemen kommen, die dazu führen, dass ein Inter-Service-Aufruf fehlschlägt [1]. Damit das Gesamtsystem bei einem solchen Problem weiterhin funktioniert, müssen Strategien implementiert werden, um mit den Problemen umzugehen. Eine Möglichkeit ist, den Umgang direkt innerhalb der Microservices zu implementieren. Diese Möglichkeit wollen wir hier betrachten. Eine weitere Möglichkeit, nämlich die Behandlung durch einen Service Mesh, betrachten wir im Artikel „Java Microservices: ab in die Cloud“ (S. 40).

Die erste Open-Source-Bibliothek zur Behandlung der Resilience-Patterns innerhalb eines Microservice war Hystrix von Netflix [1]. Das Spring Framework [2] bietet mit spring-cloud-starter-hystrix eine Integration für diese Bibliothek. Damit ist es möglich, eine Methode, die einen Aufruf zu einem anderen Microservice absetzt, mit @HystrixCommand zu markieren. Über die Parameter dieser Annotation lässt sich dann konfigurieren, wie sich Hystrix verhalten soll. Eine detaillierte Beschreibung der Funktionsweise von Hystrix findet sich unter [1].

Im MicroProfile-Umfeld [3] gibt es mittlerweile einen Standard, der es ermöglicht, Resilience unabhängig von Hystrix (je nach der unterliegenden Implementierung) zu realisieren: MicroProfile Fault Tolerance. Dieser definiert sechs Annotations, mit denen Methoden markiert werden können, die externe Aufrufe tätigen:

@Timeout verhindert, dass eine Methode endlos läuft. Ist das angegebene Time-out überschritten, wird eine Time-out-Exception geworfen.@Retry definiert, in welc...

Java Magazin
Wie setze ich einen Microservice konkret um?

Java Microservices im Praxischeck

Welche Bibliotheken gibt es, um die vielen Patterns zu implementieren? Wo muss man selbst Hand anlegen? Dieser Artikel gibt einen Überblick über die gängigen Themen, die bei der Implementierung eines Microservice auf den Entwickler zukommen.

Arne Limburg


Eine der Grundideen von Microservices ist, dass zwar das Zusammenspiel der Services von zentraler Stelle vorgegeben wird (Makroarchitektur), sich die Implementierung aber von Microservice zu Microservice unterscheiden kann. Ist also die Makroarchitektur einmal definiert, gilt es für die einzelnen Teams, die dadurch entstehenden Anforderungen innerhalb ihres Microservice umzusetzen. Bei der Wahl des Frameworks haben die Teams dann freie Hand. Wir werden in diesem Artikel den Fokus auf Java-basierte Frameworks legen und betrachten, welche Möglichkeiten es gibt, die einzelnen Anforderungen, die aus einer Makroarchitektur entstehen, umzusetzen.

Cross-cutting Concerns

Wie im Artikel „Vom Java-EE-Monolithen zu Microservices“ (S. 26) beschrieben, gibt es verschiedene Herausforderungen, die erst dadurch entstehen, dass man durch eine Microservices-Architektur ein hohes Maß an Inter-Service-Kommunikation hat.

Resilience

Bei dieser Kommunikation kann es zu verschiedenen Problemen kommen, die dazu führen, dass ein Inter-Service-Aufruf fehlschlägt [1]. Damit das Gesamtsystem bei einem solchen Problem weiterhin funktioniert, müssen Strategien implementiert werden, um mit den Problemen umzugehen. Eine Möglichkeit ist, den Umgang direkt innerhalb der Microservices zu implementieren. Diese Möglichkeit wollen wir hier betrachten. Eine weitere Möglichkeit, nämlich die Behandlung durch einen Service Mesh, betrachten wir im Artikel „Java Microservices: ab in die Cloud“ (S. 40).

Die erste Open-Source-Bibliothek zur Behandlung der Resilience-Patterns innerhalb eines Microservice war Hystrix von Netflix [1]. Das Spring Framework [2] bietet mit spring-cloud-starter-hystrix eine Integration für diese Bibliothek. Damit ist es möglich, eine Methode, die einen Aufruf zu einem anderen Microservice absetzt, mit @HystrixCommand zu markieren. Über die Parameter dieser Annotation lässt sich dann konfigurieren, wie sich Hystrix verhalten soll. Eine detaillierte Beschreibung der Funktionsweise von Hystrix findet sich unter [1].

Im MicroProfile-Umfeld [3] gibt es mittlerweile einen Standard, der es ermöglicht, Resilience unabhängig von Hystrix (je nach der unterliegenden Implementierung) zu realisieren: MicroProfile Fault Tolerance. Dieser definiert sechs Annotations, mit denen Methoden markiert werden können, die externe Aufrufe tätigen:

@Timeout verhindert, dass eine Methode endlos läuft. Ist das angegebene Time-out überschritten, wird eine Time-out-Exception geworfen.@Retry definiert, in welc...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang