Experimenteller Vergleich von Cloud-Native Applikations-Frameworks
Von Spring Boot zur Cloud: Portierung und Vergleich moderner Cloud-Native Frameworks

Ausgangslage
Die health-engine ist ein Framework der the-i-engineers AG basierend auf verschiedenen Spring Boot Services. Sie bietet zentrale Funktionen zur Erfassung, Verarbeitung und Bereitstellung medizinischer Daten. Um die Skalierbarkeit und Wartbarkeit des Systems zu verbessern, soll das Produkt in die Cloud migriert werden. Dazu sollen verschiedene moderne Cloud-Native Technologien untersucht und bewertet werden, um die optimale Lösung für die zukünftigen Anforderungen der health-engine zu finden. Langfristig soll die bestehende Architektur auf verschiedenen Ebenen für die Cloud befähigt werden.
Zielsetzung
Als ein Schritt hin zu dem langfristigen Ziel sollen in diesem Projekt verschiedene Cloud-Native Applikations-Frameworks (Quarkus, Helidon, Micronaut, Spring Boot Native) konkret und experimentell verglichen werden. Dazu stellt the-i-engineers AG einen abgegrenzten Teil der health-engine in der aktuellen Form bereit. Diese prototypische Applikation soll schrittweise in die verschiedenen Frameworks portiert und die Erfahrungen anhand einer Reihe von Kriterien gegenübergestellt werden. Auf dieser Basis kann the-iengineers anschliessend eine Grundsatzentscheidung für weitere Schritte treffen.
Memory Usage
Ergebnisse des 12-stündigen Benchmarks zur Speicherauslastung (Memory Usage). Die Grafik verdeutlicht, wie effizient die Frameworks mit Speicherressourcen unter kontinuierlicher Last umgehen.
CPU Usage
Darstellung der CPU-Auslastung (CPU Usage) während des gleichen 12-stündigen Benchmarks. Die Ergebnisse zeigen Unterschiede in der Verarbeitungsgeschwindigkeit und Effizienz der Frameworks unter identischer Last.
Verarbeitungszeit
Vergleicht, wie lange die verschiedenen Frameworks für die Verarbeitung der gleichen Last gebraucht haben.
Ergebnisse
Die untersuchten Frameworks wurden sowohl im JVM- als auch im Native-Modus automatisiert getestet. Die Performance-Daten und Ressourcenmetriken wurden durch den Einsatz eines Monitoring-Stacks mit Prometheus und Grafana erfasst und analysiert.
- Vergleichbare Ergebnisse für CPU- und Memory-Nutzung.
- Gute Skalierbarkeit sowohl in der JVM als auch im nativen Modus.
- Erfolgreiche Ausführung aller Testfälle auf Windows- und Linux-Systemen.
- Unterschiedliche Ansätze zur Metrikfreigabe und -sammlung bei den Frameworks.
- Herausforderungen bei der Optimierung der nativen Images (z. B. GraalVM-Setup).
- Zusammenfassend ist jedes Framework sowohl on-premise als auch in der Cloud einsetzbar.
Die Tests zeigen, dass alle Frameworks die grundlegenden Anforderungen für Cloud-native Anwendungen erfüllen. Der Übergang von einer Spring-Boot-basierten Architektur zu Quarkus, Micronaut oder anderen modernen Frameworks kann je nach spezifischen Anforderungen des Projekts erfolgen. Dabei bietet jedes Framework unterschiedliche Stärken und Schwächen, die in einer detaillierten Analyse bewertet wurden.
Technische Schlüsselbegriffe
- Spring BootEin populäres Framework für die Entwicklung von Java-basierten Microservices.
- QuarkusEin modernes Java-Framework, optimiert für Kubernetes und GraalVM.
- MicronautEin leichtgewichtiges Java-Framework für schnelle Microservice-Entwicklung.
- GraalVMEine universelle virtuelle Maschine für die Ausführung und Kompilierung von Java-Anwendungen.
- OCI ContainerContainer-Standard für die Ausführung von Anwendungen in isolierten Umgebungen.
- PrometheusEin Open-Source-Monitoring-System für Metriken und Alarme.
- GrafanaEin Tool zur Visualisierung und Analyse von Metriken und Logs.
- cAdvisorEin Monitoring-Tool für Ressourcenverbrauch von Containern.
- SwitchEngineEine Cloud-Infrastrukturplattform, die in diesem Projekt für Tests verwendet wurde.
- Java Virtual Machine (JVM)Die JVM ist eine virtuelle Maschine, die Java-Programme ausführt, indem sie den Java-Bytecode interpretiert und in die für die Plattform spezifische Maschinensprache übersetzt. Die JVM ist somit entscheidend für die plattformübergreifende Ausführbarkeit von Java-Anwendungen.
- Native Imageeine vorab kompilierte Version einer Java-Anwendung, die direkt in Maschinensprache übersetzt wird. Das bedeutet, dass die Anwendung ohne die Notwendigkeit einer Java Virtual Machine (JVM) ausgeführt werden kann, was zu schnelleren Startzeiten und geringeren Ressourcenanforderungen führen kann.
- DevOpsEine Kultur und Methodik zur Integration von Entwicklung und Betrieb.
Kund:in

i-engineers AG
Cyrill Zadra
Badenerstrasse 141
8004 Zürich
Link
Team
Damjan Mlinar
Viktor da Paixão Weilenmann
Betreuer
Sebastian Graf
Wolfgang Weck