Die Programmiersprache Java fühlt sich heute so an, wie als vor Jahren die alten Festplatten auf SSD’s umgestellt wurden. Neue Java Frameworks wie Quarkus und Spring Native können den Programmierenden aufzeigen, dass Java nun auch in der Cloud seine Stärken einsetzen kann – dies mit wenig Ressourcenverbrauch und vor allem blitzschnell.
Java
Das «altbewährte» Java wird im professionellen Enterprise Umfeld auch heute noch weit verbreitet eingesetzt. Viele andere Programmiersprachen werden aber immer beliebter, wie Python, GoLang, R, JavaScript und wie sie alle heissen.
Gemeinhin gilt Java zurecht als etwas schwerfällig und Ressourcenintensiv. Das Aufstarten einer Anwendung mitsamt Applikationsserver kann gut und gerne 15 Sekunden dauern. Wie verhält sich dies mit den modernen Cloud Ansätzen? Da sind schnelle Aufstartzeiten und dementsprechende Skalierungsmöglichkeiten fast schon Pflicht.
Zum Glück bieten sich inzwischen zwei Lösungen an, die Java auch in der Cloud zur Rakete werden lassen können: Quarkus und Spring Native.
Quarkus
Schon recht ausgereift ist Quarkus, ein von Redhat entwickeltes Cloud Native Java Framework – wobei dies in der prkatischen Anwendung meist auf einer Orchestrierungsplatform wie Kubernetes läuft.
Quarkus benötigt sehr wenig Ressourcen, da alles Unnötige entfernt wird. Die Startup Zeiten sind grandios und befinden sich im Millisekunden Bereich. Auf Kubernetes ausgeführt, können zusätzliche Instanzen bei Bedarf blitzschnell aufgestartet werden.
Der Hauptkritikpunkt bei Quarkus ist, dass nochmals ein zusätzliches Java Framework eingesetzt wird und die Community auch noch recht klein ist.
Gemäss einem Bericht von INNOQ verwendet Quarkus viele Elemente aus Java/Jakarta-EE und damit werden sich vor allem die auf Java-EE spezialisierten Personen beim Umstieg leichttun.
Spring Native
Viele Java programmierende Personen setzen jedoch seit langem auf das Spring Boot Java Framework. Hierzu gibt es eine riesige Community, dies vor allem wegen der Einfachheit und des grossen Funktionsumfangs.
Erfreulicherweise arbeitet das Unternehmen VMware am Spring Native Open Source Projekt und im März 2021 wurde bereits die Beta Version herausgegeben!
Damit wird das Potential eines voll ausgereiften Frameworks mit grosser Community nun auch Cloud-fähig. In der Beta Version mag sicher noch die eine oder andere Funktionalität fehlen, es wird aber nur eine Frage der Zeit sein, bis ein Grossteil der Spring Features auch für die Cloud bereit sein wird.
Ein Geschwindigkeitsvergleich von Spring Boot zu Spring Native:
Knative
Wird nun Java über Kubernetes ausgerollt, so muss sich die programmierende Person (leider) auch sehr stark mit den Infrastrukturkomponenten befassen.
Hier kommt das neue Knative Open Source Projekt von Google ins Spiel. Kurz gesagt, Knative läuft auf Kubernetes und ermöglicht serverlose Anwendungen auf einfache Art und Weise. Dabei wird die Komplexität von Kubernetes durch eine Abstraktionsschicht versteckt. Personen die Software entwickeln, können sich nun vollständig auf das Schreiben des Programmcodes konzentrieren.
Gemäss Ariel Shupers Beschreibung kann mit Knative eine Anwendungen vor Ort, in der Cloud oder in einem Rechenzentrum eines Drittanbieters laufen und ist Cloud-agnostisch, das heisst, die Anwendung kann in jeder Cloud betrieben werden. Dadurch wird die Bindung an einen Cloud-Anbieter vermieden, denn viele sehen das als den grössten Nachteil aktueller serverloser (FaaS) Umgebungen wie AWS Lambda, Azure Functions oder Google Cloud Functions.
Die Kombination aus Spring Native und Knative kann in der Cloud zum unschlagbaren Gespann werden. Wir dürfen gespannt sein, wie der Programmiersprachen Trend in drei Jahren aussehen wird.
Weiterführende Links
- Quarkus: Get started with Kubernetes-native Java. A full-stack Java framework designed for containers and cloud environments. See why it’s a worthy alternative to Spring.
- Spring Native Hands-On. Native-Images für Spring-Boot-Anwendungen erzeugen
- Native Java Spring-Anwendungen laufen ohne die JVM. Die Beta von Spring Native kompiliert Spring-Applikationen in Java über GraalVM als eigenständige Executables.
- Container und Serverless: Knative schickt sich an, als plattformagnostisches Tool für Serverless-Anwendungen zu fungieren.
- Cloud-Agnostic vs. Cloud-Native