Java und die Micronauten

Microservices auf der JVM

Ralf D. Müller, Sergio del Amo

© Shutterstock.com/vvoee

Im März fand zum siebten Mal die Greach, eine dem Groovy-und-Grails-Ökosystem gewidmete Konferenz, in Madrid/Spanien statt. In einer Keynote verkündete Graeme Rocher, Leiter des Grails-Framework-Teams, eine Überraschung: das Micronaut-Framework. Micronaut ist ein neues JVM-Framework, das von Grund auf für Microservices und Serverless-Computing-Umgebungen entwickelt wurde.

Bei der Entwicklung des Frameworks wurde großer Wert auf folgende Ziele gelegt:

  • Blitzschnelle Startzeit
  • Geringer Speicherbedarf
  • Extrem kleine JAR-Files
  • Keine externen Abhängigkeiten
  • Twelve-Factor App

In der aktuellen Micronaut-Version ist das kleinste JAR einer „Hello World“-Anwendung gerade einmal 8 MB groß und begnügt sich mit nur 10 MB max. Heap. Da die Generierung aller Abhängigkeiten, AOPs und Proxies zur Kompilierungszeit erfolgt, liegt die resultierende Startzeit unter einer Sekunde. Aus dem gleichen Grund wachsen Startzeit und Speicherverbrauch auch nicht linear mit der Anzahl der Codezeilen.

Micronaut ist extrem leichtgewichtig und implementiert die Eigenschaften einer Reactive-App. Es basiert auf Netty und bietet out of the box sowohl einen HTTP-Client als auch -Server zur leichteren Implementierung der HTTP-Komponenten eines Microservice.

Der Code zeigt ein einfaches Micronaut-Hello-World-Beispiel mit einem HTTP-Server-Endpunkt und einen Client, dessen Implementierung zur Compile Time generiert wird:

@Controller 
class HelloController {
       @Get("/hello/{name}") 
       String hello(String name) { 
               return "Hello $name!" 
       } 
} 
// Client Generated at Compile Time 
@Client("/") 
interface HelloClient { 
        @Get("/hello/{name}") 
        String hello(String name)
}

Ähnlichkeiten erleichtern den Umstieg

Am vorigen Beispiel zeigt sich das zu Spring Boot oder Grails ähnliche Programmiermodell. Wenn Sie als Entwickler schon mit diesen Frameworks gearbeitet haben und jetzt ein Framework für eine verteilte Architektur suchen, wird Ihnen der Umstieg auf Micronaut sicherlich leichtfallen. Zusätzlich geht auch der Umbau einer vorhandenen Applikation in eine Micronaut-Applikation leichter von der Hand.

Architektur der Demoanwendung

Micronaut bringt außerdem noch einige Features mit, die speziell auf die Microservices- beziehungsweise Cloud-Welt zugeschnitten sind. Dazu gehören beispielsweise Service Discovery, Circuit Breaker, Configuration Sharing, Client-Side Load Balancing und Unterstützung für Serverless Computing mit AWS Lambda.

All die genannten Features stehen out of the box ohne weitere Abhängigkeiten zur Verfügung. So kann der Circuit Breaker mit einer einfachen @CircuitBreaker-Annotation konfiguriert werden – das wars:

@CircuitBreaker(attempts = '5', delay = '5ms', reset = '300ms')
public List findBooks() {
    ...
}

Die Annotation konfiguriert einen Circuit-Breaker mit maximal fünf Wiederholungsversuchen im Abstand von 5 Millisekunden und 300 Millisekunden zum Reset des Circuit Breakers.

Diese Annotation wird durch eine weitere eingebaute Micronaut-Annotation ergänzt: @Fallback. Über diese Annotation können Sie eine Fallback Bean definieren, die automatisch als Alternative für ausgefallene Microservices oder Microservices in einer Testumgebung genutzt wird.

Demo

Während der Keynote auf der Greach hat Graeme Rocher eine Demonstration einer „Pet Store“-Anwendung gezeigt. Diese ist als Mulit-Project-Gradle-Applikation entworfen. Sie demonstriert, wie Micronaut Microservices mit unterschiedlichen Peristenzmechanismen wie Neo4j, Redis, PostgreSQL und MongoDB umgehen, mit Services von Drittanbietern wie SendGrid oder AWS SES kommunizieren und sogar in Serverless-Umgebungen wie AWS Lambda deployt werden. Die Applikation verwendet Consul als Service Discovery. Die Microservices der Applikationen können manuell oder über einen einzelnen Befehl als Docker-Container gestartet werden. Die ersten Milestone-Releases des Micronaut-Frameworks werden noch in diesem Quartal erwartet – die GR8Conf  in Kopenhagen führt schon einige Micronaut-Sessions auf der Agenda für den 30. Mai.

Geschrieben von
Ralf D. Müller
Ralf D. Müller
Ralf D. Müller arbeitet als Architekt und Entwickler. Er erlebt täglich die Notwendigkeit effektiver Dokumentation. Außerdem ist er erklärter AsciiDoc-Fan und Committer bei arc42 sowie Gründer des docToolchain-Projekts.
Sergio del Amo

Sergio del Amo arbeitet im Grails-Team für OCI. Er ist Verfasser des wöchentlich erscheinenden „Groovy Calamari“-Newsletters mit Nachrichten aus dem Groovy-Ökosystem. Er entwickelt seit sechs Jahren Grails-Anwendungen und schätzt an Groovy wie mächtig und ausdrucksvoll die Sprache ist.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.