Článek přečtěte do 6 min.

Začátkem tohoto roku dosáhl podnikový zákazník platformy Azul Platform Prime něčeho, čeho se žádné jiné organizaci dosud nepodařilo: bezproblémové spolupráce mezi více než 10 000 JVM napříč stovkami aplikací. Pokud vás to zajímá, zde je důvod, proč je to velká novinka. 

Společnost již dosahovala konzistentního úspěchu, ale potřebovala si ho udržet a zároveň zachovat úspory z rozsahu, snížit provozní náklady a poskytovat bezproblémovou zákaznickou zkušenost. Vzhledem k rostoucím nákladům na cloud a infrastrukturu stanovili vedoucí pracovníci firmy optimalizaci nákladů na cloud jako nejvyšší prioritu. 

Díky tomu, že tolik JVM mohlo spolupracovat a sdílet optimalizace výkonu napříč stovkami aplikací, se podniku podařilo zlepšit odezvu a stabilitu aplikací ve velkém měřítku a zároveň snížit náklady na infrastrukturu. To znamená lepší zákaznickou zkušenost a vyšší efektivitu podnikání. Klíčovým prvkem infrastruktury je Azul Platform Prime, vylepšená o Optimizer Hub. 

Jednou z nejvýznamnějších výhod aplikací v Javě oproti aplikacím vyvinutým v jiných jazycích je slib „Napiš jednou, spusť kdekoli“. Java je kompilována do bajtkódů, instrukcí pro virtuální stroj , a za běhu je převedena na instrukce a systémová volání specifická pro platformu, na které aplikace běží. To také umožňuje aplikacím založeným na JVM často překonávat nativně kompilované aplikace, protože kompilátor Just-in-Time (JIT) má informace o tom, jak se aplikace skutečně používá, a nedělá zobecněné předpoklady o tom, jak by se mohla používat.

Omezení OpenJDK 

Nevýhodou běhového profilování a JIT kompilace v tradičních JVM, jako jsou základní distribuce OpenJDK, je zpoždění v dosažení maximálního výkonu aplikace. Často používaný kód musí být identifikován, způsob jeho použití musí být profilován a musí být kompilován za běhu aplikace. Doba, kterou to trvá, se nazývá doba zahřívání Java aplikace. 

Aby se problém ještě zhoršil, je nutné při restartu stejné aplikace pokaždé opakovat proces identifikace často používaného kódu, jeho profilování a kompilace. 

Aby se tato omezení vyřešila, vyvinula společnost Azul Optimizer Hub, součást vysoce výkonné platformy Java Azul Platform Prime. Azul Platform Prime má dvě hlavní komponenty: Azul Zing, vylepšenou verzi OpenJDK, a další komponentu Optimizer Hub. 

Optimizer Hub se skládá ze dvou služeb, Cloud Native Compiler a ReadyNow Orchestrator. 

  • Cloud Native Compiler poskytuje centralizovanou JIT kompilaci a ukládání do mezipaměti, což vede k úsporám nákladů a efektivitě. Cloud Native Compiler přesouvá těžkou práci s kompilací z jednotlivých JVM na centralizovanou, škálovatelnou službu, čímž snižuje zatížení CPU v každém JVM a ukládá kompilaci do mezipaměti pro opětovné použití. 
  • ReadyNow je funkce v Platform Prime, která řeší problém zahřívání Javy protokolováním a opětovným použitím profilů JIT kompilátoru a optimalizačních dat mezi spuštěními JVM. ReadyNow Orchestrator poskytuje inteligentní správu profilů optimalizace zahřívání ReadyNow, aby se odstranila úzká místa výkonu při spouštění aplikací založených na JVM, čímž se zlepšuje uživatelská zkušenost a dosahování SLA. 

Základním konceptem ReadyNow je eliminovat opakovanou práci s profilováním kódu během běhu aplikace, jak již bylo popsáno. ReadyNow toho dosahuje tak, že v podstatě poskytuje JVM „dlouhodobou paměť“ spojenou s danou aplikací. Za tímto účelem je aplikace spuštěna v produkčním prostředí, což umožňuje přesný záznam o tom, jak je používána. Po úplném zahřátí aplikace se zaznamená profil ReadyNow. Ten lze shromáždit kdykoli a v případě potřeby lze pro stejnou aplikaci shromáždit více profilů. Profil obsahuje všechny důležité informace týkající se JIT kompilace, konkrétně seznam načtených tříd, seznam inicializovaných tříd, všechna profilovací data shromážděná JIT kompilátorem, všechny provedené deoptimalizace a kopii kompilovaného kódu.

Jak Azul Platform Prime odstraňuje omezení tradičních JVM

Po restartu aplikace může JVM okamžitě načíst a inicializovat třídy v seznamech profilů, nikoli od začátku. Poté zkompiluje potřebný kód (pokud je to nutné) nebo znovu použije kód z profilu. 

Provedení této práce předtím, než aplikace začne vykonávat jakoukoli práci, vede k téměř stoprocentnímu výkonu dosaženému při zaznamenání profilu. To výrazně zkracuje dobu zahřívání. 

To je dobrý začátek, ale Optimizer Hub může věci ještě vylepšit.

ReadyNow dokáže ukládat profily do centrálního cloudového úložiště, jako je například služba ReadyNow Orchestrator v Optimizer Hub. Při spuštění služby založené na kontejneru lze JVM nakonfigurovat tak, aby profil vyžádalo z Optimizer Hub, namísto použití lokálně uloženého profilu. Pokud jsou nutné změny profilu, lze do Optimizer Hub nahrát nový profil, který bude použit při následných spuštěních JVM. Jakmile se každé nové JVM spustí ve svém kontejneru a JIT zkompiluje kód na základě profilu ReadyNow, JVM odešle zpět novou verzi profilu do ReadyNow Orchestrator v Optimizer Hub. To má dvě výhody: 1) ReadyNow Orchestrator v průběhu času „vybírá“ nejlepší profil, aby zajistil, že každé následné spuštění JVM bude mít nejlepší možný profil, a 2) kontejner není nutné znovu sestavovat ani znovu nasazovat, protože profil již není přímo zahrnut v obrazu kontejneru, což šetří čas i náklady.

Vanilla OpenJDK Platforma Azul Prime

Vanilla OpenJDK potřebuje „zahřát“ svůj kód na základě architektury serveru a vzorců používání aplikací. 

Optimizer Hub inteligentně monitoruje vzorce používání aplikací, vytváří profily nejlepších optimalizací a aplikuje je před zahájením provozu. 

Dalším problémem spojeným s JIT kompilací je, že kompilátor musí sdílet prostředky kontejneru s aplikací. Při použití malých kontejnerů, jako je například instance se dvěma virtuálními jádry, se propustnost aplikace během kompilace sníží na polovinu.

Vanilla OpenJDK Platforma Azul Prime
Vanilla OpenJDK zažívá na začátku běhu zastavení, chyby a nedodržení SLA a po celou dobu existence serveru je kód pomalejší a méně efektivní. 
Vanilla OpenJDK zažívá na začátku běhu zastavení, chyby a nedodržení SLA a po celou dobu existence serveru je kód pomalejší a méně efektivní. 
Optimizer Hub se vyznačuje rychlejším dosažením plné rychlosti, menším počtem chyb a nedodržením SLA na začátku běhu a produkuje nejrychlejší a nejefektivnější kód na světě.
Optimizer Hub se vyznačuje rychlejším dosažením plné rychlosti, menším počtem chyb a nedodržením SLA na začátku běhu a produkuje nejrychlejší a nejefektivnější kód na světě.

Druhou službou Optimizer Hub je Cloud Native Compiler. Ten odděluje JIT kompilátor od jednotlivých JVM a přesměruje ho na elasticky škálovatelnou centralizovanou službu. Když JVM potřebuje zkompilovat kód, odešle ho spolu se shromážděnými profilovacími daty do Cloud Native Compiler. Ten kód zkompiluje a vrátí jej do JVM. Eliminací soupeření o zdroje lze jednotlivé kontejnery služeb konfigurovat s menším výpočetním výkonem, což šetří peníze.

Bez cloudového nativního kompilátoru S cloudovým nativním kompilátorem

Vanilla OpenJDK používá více větších instancí, které jsou náchylné k zastavení a problémům s výkonem. 

Optimizer Hub poskytuje rychlejší dosažení plné rychlosti s menším počátečním počtem chyb a vytváří nejrychlejší a nejefektivnější kód na světě.

Kromě toho je Cloud Native Compiler dlouhodobý proces, což mu umožňuje udržovat mezipaměť kompilovaného kódu. Pokud je třeba spustit více instancí stejné aplikace kvůli náhlému nárůstu zátěže, není nutné kompilovat stejný kód pro každou instanci. Po první kompilaci bude kód uložen v Cloud Native Compiler, aby jej bylo možné okamžitě vrátit pro následná volání služeb.

Vanilla OpenJDK Platforma Azul Prime
Vanilla OpenJDK se může zahřát až poté, co JVM začnou zpracovávat provoz.
Vanilla OpenJDK se může zahřát až poté, co JVM začnou zpracovávat provoz.
Optimizer Hub odstraňuje optimalizační práci z lokálního počítače a přesouvá ji na elasticky škálovatelný optimalizátor v cloudu. 
Optimizer Hub odstraňuje optimalizační práci z lokálního počítače a přesouvá ji na elasticky škálovatelný optimalizátor v cloudu. 

Využitím centralizovaných služeb Optimizer Hub nabízí Azul Platform Prime: 

  • Poskytuje nejrychlejší možný kód pro spuštění,  
  • Umožňuje novým JVM plynuleji spustit a rychleji dosáhnout plné rychlosti, což vede k větší elasticitě, menšímu počtu chyb a lepšímu dosažení SLA. 
  • Snižuje zatížení CPU na každém jednotlivém JVM, takže aplikace mohou pro stejnou pracovní zátěž používat méně výpočetních instancí a snižují náklady na cloudové výpočty o 20% a více. 

Díky jediné změně, používání platformy Azul Platform Prime vylepšené o Optimizer Hub, globální podnik zlepšil odezvu a stabilitu aplikací ve velkém měřítku a zároveň snížil náklady na infrastrukturu. Dnes tento podnik poskytuje lepší zákaznickou zkušenost a pracuje s větší efektivitou. Kritickým prvkem infrastruktury je Azul Platform Prime vylepšená o Optimizer Hub. Proč to nezkusit?

Zdroj: Azul