Quarkus – einfach erklärt

19.11.2021

Seit Anfang 2019 wirbt RedHat für sein Java-Framework Quarkus mit dem Slogan:

Quarkus – Supersonic, Subatomic Java!

Aber was ist Quarkus überhaupt?
Subatomar und überschallschnell?
Quark(u)s sind doch diese Teilchen oder?

In diesem Beitrag möchte ich gerne Quarkus vorstellen und erklären, was es mit diesen Fragen und Bezeichnungen auf sich hat.

Was ist Quarkus?

Quarkus ist ein Full-Stack, Kubernetes-natives Java-Framework [1] das von RedHat entwickelt und als Open-Source Projekt veröffentlicht wurde.
Bei der Entwicklung von Quarkus wurde besonderer Fokus darauf gelegt, dass mit Quarkus entwickelte Java-Anwendungen für Kubernetes-basierte Containerplattformen optimiert werden.
Zu diesen Plattformen zählen zum Beispiel Branchengrößen wie Microsoft Azure, RedHat OpenShift und Amazon AWS, aber auch viele weitere, weniger bekannte Plattformen. [2]

Die Optimierungen für Containerplattformen sind auch das, was Quarkus in seinem Slogan bewirbt:

  • schnelle Startzeiten (Supersonic)
  • geringer Speicherplatzverbrauch (Subatomic)

 

Quarkus erreicht diese zwei Ziele indem es versucht, so viel wie möglich vom Anwendungscode schon während des Buildvorgangs der Applikation zu verarbeiten. So werden z.B. nur die Klassen zur Laufzeit geladen, die auch wirklich benötigt werden.

Das allein wirkt sich schon sehr positiv auf die Ausführung in einer Java Virtual Machine (JVM) aus.
Wie in Abbildung 1 oben links zu sehen ist, halbiert sich für einen simplen REST-Service der Speicherverbrauch einer Quarkus Anwendung im Vergleich zu einer traditionellen Anwendung.
Im gleichen Zug sinkt die Startzeit inklusive der Zeit bis zur ersten Antwort der Anwendung auf etwa ein Viertel.

Quarkus Stratzeiten und Spreicherplatzverbrauch
Abbildung 1: Quarkus Startzeiten und Speicherplatzverbrauch; Bildquelle: https://quarkus.io [3]

Nutzt man dann noch die Möglichkeit von Quarkus ein natives Image – eine direkt ausführbare Datei, die keine JVM benötigt – erzeugen zu lassen, so wird der Unterschied zu klassischen Java-Anwendungen besonders deutlich.
In der Mitte von Abbildung 1 ist zu sehen, dass der Speicherverbrauch nun bei etwa einem Zehntel liegt und die Start-, und Antwortzeit um ungefähr das 250-fache schrumpft.

Für Container-Applikationen sind diese beiden Faktoren besonders wichtig.
Je geringer die Startzeit ist, desto schneller kann die Anzahl der Container erhöht werden, um beispielsweise Auslastungsspitzen abfangen zu können.
Je geringer der Speicherverbrauch ist, desto mehr Container lassen sich gleichzeitig betreiben.
Beide Aspekte zusammen ermöglichen eine bessere Auslastung der Ressourcen und die Verfügbarkeit der Applikation lässt sich dadurch steigern.

Was bietet Quarkus noch?

Zusätzlich zu den bereits genannten Performanceverbesserungen bietet Quarkus auch noch einige nützliche Features, die speziell das Entwicklerherz erfreuen:

  • Live Coding: Quarkus ermöglicht das sogenannte Live-Coding: Änderungen im Code werden vom Framework erkannt, kompiliert und direkt angezeigt. Dadurch fallen zeitaufwändige Deployments nach Codeänderungen weg und man hat mehr Zeit, sich auf die eigentliche Entwicklung zu konzentrieren.
  • Konfiguration: Außerdem gibt es in Quarkus einen einheitlichen Mechanismus für die Konfiguration der Anwendung.
    Hierzu trägt man seine Konfigurationswerte in eine zentrale Datei ein und kann diese Werte dann per Annotationen im gesamten Anwendungscode benutzen. So lassen sich die Werte für verschiedene Entwicklungssysteme, wie zum Beispiel das Test- oder das Produktivsystem, einfach einpflegen und an zentraler Stelle verwalten. Das hilft dabei, sich schnell in der Konfiguration zurechtzufinden und reduziert den benötigten Konfigurationscode.
  • Starkes Ökosystem: Der Einstieg und die Entwicklung mit Quarkus gestaltet sich als Entwickler allgemein einfach, da Quarkus sich in ein starkes Ökosystem aus branchenbewährten Java Standards und Bibliotheken wie beispielsweise RESTEasy (JAX-RS), Hibernate (JPA) oder Eclipse Microprofile integriert. [4]
  • Extensions: Viele der Bibliotheken bietet Quarkus in einer eigenen Variante als sogenannte Extensions (Erweiterungen) an, deren Code speziell auf die Zusammenarbeit mit Quarkus abgestimmt wurde.
    Dazu zählen beispielsweise Apache Kafka, SmallRye OpenAPI und viele mehr. [5] Migriert man ein Projekt nach Quarkus, dann lässt sich mit dem Austausch dieser Bibliotheken durch ihre Extensions-Varianten zusätzlich an Performance und Stabilität gewinnen. Die meisten Bibliotheken lassen sich aber auch so problemlos weiterhin nutzen.

Wann lohnt sich der Einsatz von Quarkus?

Wenn möglich, sollte man neue Projekte von Beginn an mit Quarkus entwickeln, da man sich so spätere Migrationsaufwände sparen kann.
Soll ein bestehendes Projekt migriert werden, so eignet sich Quarkus am besten für kleinere Projekte und Microservices, da sich hier ein hoher Performance- und Stabilitätsgewinn mit vergleichsweise geringem Aufwand erreichen lässt.

 

Was sollte man bei einer Migration zu beachten?

Je größer das Projekt ist, desto aufwendiger und komplexer wird natürlich auch die Migration. Vorsicht gilt vor allem bei der Migration von Java Enterprise Edition (EE) Anwendungen, da Quarkus einige EE Features, wie beispielsweise Enterprise Java Beans (EJB) und Java Naming and Directory Interface (JNDI) nicht unterstützt. Hierfür muss dann Aufwand betrieben werden, um die Implementierung anzupassen. Auch Bibliotheken, die in Eigenentwicklung entstanden und im Projekt eingebunden sind, können zusätzlichen Aufwand bei der Migration bedeuten. Allgemein sollte der Migrationsaufwand für bestehende Anwendungen nicht unterschätzt werden.

 

Fazit

Quarkus erfreut sich nicht umsonst wachsender Beliebtheit bei Unternehmen, die Java-Anwendungen in Kubernetes, Cloud- oder Serverless-Umgebungen anbieten.
Mit den verbesserten Startzeiten und dem geringeren Speicherverbrauch eignen sich Quarkus-Anwendungen besonders gut für diese Anwendungsfelder.
Live-Coding, sowie bekannte Standards und Bibliotheken erleichtern die Umstellung für die Entwickler.
Für neue Projekte oder kleinere Bestandsprojekte im Microservice-Umfeld, eignet sich Quarkus am besten.
Bei der Migration größerer Anwendungen – besonders bei Java EE Anwendungen – können erhebliche Migrationsaufwände entstehen.
Das Ökosystem um Quarkus herum wächst kontinuierlich und mit RedHat als Sponsor im Hintergrund und einer wachsenden Community, hat das Framework gute Chancen zu einem integralen Bestandteil der Java Plattform zu werden.
Und zu guter Letzt: Sind Quark(u)s nun diese Teilchen oder nicht? Der Name ist tatsächlich eine Anspielung auf die Quarks aus der Physik und sind im Logo des Frameworks verewigt:

Quarkus Logo
Quarkus Logo

Quarks formen sich, wenn sich zwei Dreiecke überlappen. Im Logo überlappen sich das blaue und das magentafarbene Dreieck. Eine detaillierte Beschreibung und weitere Informationen für Interessierte rund um das Quarkus Logo findet man hier.[6]

 

Quellen (Stand 20.10.2021)

[1] https://www.redhat.com/en/topics/cloud-native-apps/what-is-quarkus
[2] https://kubernetes.io/partners/#conformance
[3] https://quarkus.io
[4] https://developers.redhat.com/blog/2019/03/07/quarkus-next-generation-kubernetes-native-java-framework#best_of_breed_libraries_and_standards
[5] https://code.quarkus.io
[6] https://quarkus.io/blog/quarkus-has-a-new-logo/

Zurück zur Übersicht

Kommentar verfassen

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

*Pflichtfelder

*