Unternehmen verlagern zunehmend Workloads in die Cloud. Doch bei allen Vorteilen entpuppt sich die neue Umgebung oft als Kostenfalle. Die meisten Unternehmen zahlen für Ressourcen, die sie gar nicht nutzen. Das hat verschiedene Gründe. CIOs müssen sicherstellen, dass Applikationen in der Cloud performant funktionieren und eine gute Nutzererfahrung bieten. Daher buchen sie lieber zu viel als zu wenig Kapazitäten und fahren diese auch in den Nebenzeiten nicht herunter. Außerdem halten sie einen Puffer vor, um unerwartete Spitzenlasten abzufedern. So wird das Pay-per-Use-Modell, das eigentlich Kosten sparen sollte, zum Kostentreiber. Laut einer aktuellen Azul-Studie sagen 69 Prozent der weltweit befragten Unternehmen, dass sie überprovisionieren. Mehr als ein Drittel (41 Prozent) nutzen sogar weniger als 60 Prozent ihrer gebuchten Ressourcen.
Was hat Java damit zu tun? Eine ganze Menge! Denn Java ist und bleibt aufgrund der Plattformunabhängigkeit eine der beliebtesten Programmiersprachen – gerade auch in der Cloud. Fast alle Unternehmen (98 Prozent) setzen Java in ihrer Software oder Infrastruktur ein und 83 Prozent sagen, dass mindestens 40 Prozent ihrer Applikationen Java-basiert sind. 90 Prozent nutzen Java in der Public-, Privat- oder Hybrid-Cloud. Die Java-basierte Umgebung zu optimieren ist daher ein wichtiger Hebel, um Ressourcen zu sparen und die Cloud-Kosten zu senken. Hier kommen fünf Tipps, wie das am besten gelingt.
Einsatz von High-Performance-Runtime
Je langsamer der Java-Code, desto mehr Ressourcen benötigt eine Applikation, damit sie schnell läuft. Indem Unternehmen die Performance der Anwendungen verbessern, können sie die Zahl der erforderlichen Cloud Nodes reduzieren. Eine Möglichkeit besteht darin, bestehende Applikationen zu modernisieren und neu zu designen. Dazu sollte man die meist großen monolithischen Architekturen in kleinere, Cloud-native Dienste umwandeln. Doch das ist aufwändig, langwierig und würde bei allen Applikationen Jahre dauern. Einfacher und schneller lässt sich die Effizienz steigern, indem eine High-Performance-Java-Runtime wie Azul-Platform-Prime zum Einsatz kommt. So sorgen Unternehmen für einen höheren Durchsatz, ohne dass sie den Code Ihrer Applikationen anfassen müssen.
Warm-up beschleunigen
Charakteristisch für Java-Anwendungen ist, dass sie eine Weile brauchen, bis sie ihre volle Leistung erreichen. Dieses sogenannte Warm-up hängt mit der JIT-Kompilierung (Just in Time) zusammen: Die Technologie identifiziert häufig genutzte Byte-Code-Blöcke und wandelt sie in Maschinenbefehle um, während die Anwendung ausgeführt wird. Das kostet etwas Zeit. Bei Applikationen, die tage-, wochen- oder monatelang dauerhaft laufen, fällt die Aufwärmphase nicht weiter ins Gewicht. Zum Problem wird sie aber bei Microservices, die schnell hoch- und runtergefahren werden. Gerade geschäftskritische Anwendungen müssen sofort nach dem Start einer neuen Serverinstanz sofort auf Anfragen reagieren. Um das zu gewährleisten, halten CIOs häufig einen Pool an vollständig aufgewärmten Instanzen bereit, die sie bei Bedarf zuschalten können. Diese provisionierten Ressourcen treiben die Cloud-Kosten in die Höhe. Lösen lässt sich das Warm-up-Problem mit einem schnelleren, Cloud-nativen JIT-Compiler und einem Tool, das Profile aller häufig verwendeten Codes erstellt. Darin werden sämtliche Informationen gespeichert, die für die Kompilierung wichtig sind. Wenn die Applikation dann das nächste Mal startet, ruft die JVM (Java Virtual Machine) die Profile auf und kann den Code sofort umwandeln. Dadurch verkürzt sich die Aufwärmphase erheblich.
Compilation as a Service nutzen
Ein weiterer Trick besteht darin, die Kompilierung in einen zentralisierten Cloud-Service zu verlagern. Auch das steigert die Performance und hat den Vorteil, dass die Microservices mit kleineren Cloud-Instanzen auskommen, weil sie nicht mehr selbst kompilieren müssen. Darüber hinaus kann der Code zwischengespeichert werden, sodass er beim nächsten Mal aus dem Cache geladen wird und schneller bereitsteht.
JVM für leistungsfähige Cloud-Instanzen optimieren
Auch mit der Wahl der passenden Cloud-Instanz können Unternehmen die Performance der Java-Anwendungen steigern. Da Java mit beliebiger Hardware und Software funktioniert, ist Java nicht an einen bestimmten Prozessortyp gebunden. Viele Cloud-Provider bieten zum Beispiel Cloud-Computing-Instanzen mit besonders leistungsfähigen Prozessoren, die auf maschinelles Lernen und KI spezialisiert sind. Die JVM für diese Instanzen lässt sich optimieren und im JIT-Compiler entsprechende Mikroarchitekturbefehle nutzen. Beispielsweise beschleunigt die Vektorverarbeitung rechenintensive Anwendungen.
Stop-the-World Garbage-Collection vermeiden
Ein bekanntes Performance-Problem bei Java-Anwendungen liegt in der Garbage-Collection. Mit diesem automatisierten Speicherverwaltungsprozess identifiziert die JVM nicht mehr benötigte Objekte im Heap-Speicher und entfernt sie, um Speicherplatz freizugeben und die Anwendung zu stabilisieren. Dabei kann es jedoch zu sogenannten Stop-the-World-Pausen kommen: Die Applikation muss kurz angehalten werden, damit der Garbage-Collector den Speicher aufräumen kann. Solche Pausen lassen sich vermeiden, indem man einen speziellen C4-Garbage-Collection-Algorithmus (Continuously Concurrent Compacting Collector) einsetzt, der parallel zur Anwendung läuft und den Speicher kontinuierlich optimiert.
Fazit
Unterm Strich ist die Rechnung einfach: Effizientere Java-Anwendungen brauchen weniger Ressourcen und sparen dadurch Cloud-Kosten. Die genannten Tipps sind nur einige Beispiele dafür, wo Unternehmen ansetzen können. „Viele Unternehmen haben ihre bestehenden Java-Applikationen per Lift-and-Shift in die Cloud migriert und stellen jetzt fest, dass sie dort hohe Kosten verursachen“, sagt Simon Ritter, Deputy CTO bei Azul. „Manche überlegen deswegen sogar, Anwendungen wieder zurückzuholen. Doch es gibt viele Möglichkeiten den Ressourcenbedarf zu reduzieren, indem man die Java-Umgebung optimiert und auf eine High-Performance-Plattform setzt. Wenn man bedenkt, wie groß der Anteil Java-basierter Software und Infrastruktur in der Cloud ist, ergibt sich ein enormes Einsparpotenzial.“
#Azul Systems