Vergleich Spring Boot vs Micronaut vs Quarkus

09.12.2019

In diesem Blog Beitrag geht es um den Vergleich der beiden Frameworks Micronaut und Quarkus mit Spring Boot.

Micronaut

Micronaut ist „ein modernes, JVM-basiertes Full-Stack-Framework für den Aufbau modularer, leicht testbarer Microservice- und Serverless-Anwendungen.“ [1]

Dabei unterstützt Micronaut Sprachen wie

  • Java
  • Kotlin
  • Groovy

Vorteile

Micronaut zielt auf folgende Aspekte von Anwendungen für die JVM ab und versucht, sie zu optimieren:

  • schneller Applikationsstart
  • reduzierter Laufzeit-Speicherbedarf
  • minimaler Einsatz von Java Reflection
  • minimaler Einsatz von Java Proxies
  • einfache, schnelle Applikationstests

Die schnelle Startzeit fällt sowohl bei der Entwicklung und der Ausführung von Integrationstests als auch bei einem Kaltstart als AWS-Lambda-Funktion positiv auf. Aufgrund des geringen Speicherbedarfs zur Laufzeit eignet sich Micronaut besonders für die Entwicklung von „Serverless“-Anwendungen. Damit verbunden wirbt das Entwicklungsteam vor allem mit dem inhärenten Cloud-Support, der keine zusätzlichen externen Abhängigkeiten benötigt, sondern Teil des Ökosystems ist. [2]

Eine Beispielmessung der Seite w-jax zeigt den genauen Vergleich:
Die Abbildung zeigt die Verbesserungen von Micronaut gegenüber Spring. Während die Compile-Zeit nun signifikant länger ist, kann das Framework bei anderen Metriken punkten. Dabei ist zu beachten, dass die Startzeit je nach Größe der Anwendung bei Spring immer länger wird, während die Startzeit der MicronautAnwendung relativ konstant bleibt. [3]

Micronaut im Vergleich zur Spring-Anwendung

Quarkus

Quarkus ist „ein Kubernetes Native Java-Stack, der auf OpenJDK HotSpot und GraalVM zugeschnitten ist und aus den besten Java-Bibliotheken und -Standards entwickelt wurde.“ [4]

 

Bei der Optimierung von Quarkus steht besonders der Einsatz in Cloud- und Container-Umgebungen im Fokus. Hierbei sind besonders geringe Speichernutzung und schnelle Startzeiten wichtig. Quarkus erreicht diese Eigenschaften durch verschiedene Optimierungen:  Sehr gute Unterstützung von Graal/SubstrateVM  Verarbeitung der Metadaten zur Build-Zeit  Reduzierte Nutzung von Reflection  Vorverarbeitung des Boot-Prozesses
Quarkus ist ein Fullstack-Framework, das eine ganze Reihe von Bibliotheken integriert. Hierbei wird stark auf bewährte Bibliotheken, wie z.B. Hibernate, RESTEasy oder Apache Kafka, gesetzt. Das Ziel hierbei ist, dass Entwickler nicht viel Zeit investieren müssen, um neue Technologien zu lernen, sondern mit bewährten Bibliotheken und Standards arbeiten können. Quarkus sieht sich hierbei nicht nur als einfacher Konsument, sondern möchte auch daran teilhaben die verwendeten Bibliotheken zu verbessern.Viele der Bibliotheken, die in Quarkus verwendet werden, müssen vorher für das Framework optimiert werden. Quarkus verzichtet so gut es geht auf Reflection, und da viele Frameworks stark darauf ausgelegt sind, müssen diese angepasst werden. Es stehen hierzu eine Reihe von Erweiterungen bereit, welche für Quarkus genutzt werden können. Diese liefern direkt die optimierten Versionen der Bibliotheken. [5]
Ein Test der Seite itemis zeigt den Vergleich mit Spring Boot [6]:
Vergleich mit Spring Boot

Vergleich der „HelloWorld“-Anwendungen

Nachdem ich die „HelloWorld“-Anwendung des jeweiligen Frameworks testen konnte, kam es zu folgendem Ergebnis:

 

Framework Durchschnittliche Zeit bis zum kompletten Startup Arbeitsspeicher Auslastung
Micronaut 1,83 Sekunden 98 MB
Quarkus 1,12 Sekunden 70 MB
Spring Boot 2,55 Sekunden 215 MB

Es wird deutlich, dass die beiden Frameworks im Vergleich mit Spring Boot etwas schneller sind und weniger Arbeitsspeicher Auslastung haben, wobei Quarkus das beste Ergebnis erzielt hat.

Migration von Spring Boot zu Micronaut/Quarkus

An einem bestehenden Maven Projekt, das Spring Boot nutzt soll nun Micronaut/Quarkus zum Einsatz kommen.

Micronaut for Spring

Micronaut for Spring ermöglicht es, traditionelle Spring Annotationen zu verwenden, die zur Kompilierungszeit auf Micronaut Annotationen abgebildet werden. Auf diese
Weise kann eine Anwendung geschrieben werden, die ohne Änderung in eine andere Spring- oder Mikronaut-Anwendung importiert werden kann.
Im Gegensatz zu herkömmlichen, auf Laufzeitreflexion basierenden Frameworks verwendet Micronaut die Ahead of Time (AOT)-Kompilierung, sodass es keinen Laufzeit-Overhead für die Unterstützung eines zusätzlichen Satzes von Annotationen gibt (in diesem Fall Spring’s Annotation Programming Model).
Vorteile sind:

 

  • Es kann die kompilierte Anwendung genommen und ohne Änderungen in eine andere Spring oder Micronaut Anwendung eingebunden werden.
  • Ein bestehendes Team von Spring-Entwicklern kann mit Micronaut arbeiten, ohne eine neue Annotation DSL zu lernen.

 

Man sollte dabei beachten, dass Spring riesig ist und nur einige Teile unterstützt werden. [7]

Bemerkung: Bei Micronaut for Spring wurde die Startup Zeit bei jedem Neustart geringer. So startete es beim ersten Start mit 5,8 Sekunden und brauchte nach einigen weiteren Starts nur noch 3,8 Sekunden.

Quarkus

Quarkus nutzt Jersey für seine Annotationen.
Die Controller Klassen heißen hier Resource Klassen und müssen mit der Annotation @Path() eingeleitet werden.
@Path("/")
public class HelloWorldResource{
     @GET
     @Path("/hello")
     public String helloWorld(){
          return "hello";
          }
}

 

Vergleich

Durchschnittliche Zeit bis zum kompletten Startup Arbeitsspeicher Auslastung
Nur Spring Boot 6,8 Sekunden 800 MB
Micronaut for Spring 3,9 Sekunden 210 MB
Micronaut ohne Spring 2,2 Sekunden 130 MB
Quarkus 1,2 Sekunden 87 MB

Fazit

Zusammenfassend lässt sich sagen, dass jedes Framework seine Vor-und Nachteile hat.
Am einfachsten war es, ein bestehendes Projekt mit Micronaut for Spring umzuformen, da man mit kleinen Änderungen in der pom das Projekt schneller und arbeitsspeichersparender machen kann.
Allerdings ist Micronaut for Spring natürlich nicht so schnell und arbeitsspeichersparend wie Micronaut oder Quarkus alleine.
Es fiel mir allerdings leichter, den bestehenden Spring Boot Code in Quarkus umzuschreiben, da Quarkus mit Jersey arbeitet und sich die bestehenden Annotationen einfacher ersetzen lassen.
Von Quarkus in Micronaut umzuformen ist dann genau so leicht, da sich die Micronaut Annotationen stark an Jersey orientieren.
An sich hat mir Quarkus am besten gefallen. Auch hat Quarkus die besten Ergebnisse im Test erzielt, wie man in der obigen Tabelle sieht. Die Zeit zum kompletten Startup ist um einiges geringer und arbeitsspeichersparender als bei den anderen Frameworks.
Wobei Micronaut nicht viel schlechter abschneidet.
Beide Frameworks sind unter der Apache License v2 lizenziert. [8]

[5] https://blog.codecentric.de/2019/04/quarkus-macht-java-fit-fuer-die-cloud/

Zurück zur Übersicht

Ein Kommentar zur “Vergleich Spring Boot vs Micronaut vs Quarkus

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*