Quarkus

Quarkus
Utvecklare röd hatt
Initial release 20 mars 2019 ; för 3 år sedan ( 2019-03-20 )
Stabil frisättning
2.16.4 / 6 mars 2023 ; 0 dagar sedan ( 2023-03-06 )
Förvar Quarkus Repository
Skrivet i Java
Plattform Java
Typ Ansökningsram
Licens Apache-licens 2.0
Hemsida quarkus .io

Quarkus är ett Java -ramverk skräddarsytt för distribution på Kubernetes . Viktiga teknologikomponenter som omger det är OpenJDK HotSpot och GraalVM . Målet med Quarkus är att göra Java till en ledande plattform i Kubernetes och serverlösa miljöer samtidigt som utvecklare erbjuds en enhetlig reaktiv och imperativ programmeringsmodell för att optimalt kunna hantera ett bredare utbud av distribuerade applikationsarkitekturer.

Versionshistorik

Version Datum Anteckningar
0,12 20 mars 2019 Initial release
1.0 nov 2019
1.3 mars 2020
1.7 juni 2020
1.11 augusti 2020
1.13 mars 2021
2.0 juni 2021
2.2 augusti 2021
2.4 oktober 2021
2.5.2 dec 2021
2.7.5 maj 2022
2.13.5 dec 2022 Final – Underhållsrelease
2.16.1 februari 2023
Notera GraalVM är en Java Virtual Machine för att kompilera och köra applikationer skrivna på olika språk till en inbyggd maskinbinär. Det finns tre distributioner av GraalVM: GraalVM Community Edition (CE), GraalVM Enterprise Edition (EE) och Mandrel. GraalVM CE och EE har varierande support- och licenskrav . Mandrel är en nedströmsdistribution av GraalVM CE, som stöder samma möjligheter att bygga inbyggda körbara filer men baserat på OpenJDK med öppen källkod. Mandrel syftar till att göra GraalVM lätt att konsumera av Quarkus-applikationer genom att endast inkludera GraalVM CE-komponenter som Quarkus behöver. Red Hat erbjuder kommersiellt stöd för att använda Mandrel för att bygga inbyggda Quarkus-applikationer sedan Quarkus 1.7 släpptes i oktober 2020.

Quarkus erbjuder också nästan omedelbar uppskalning och högdensitetsanvändning i containerorkestreringsplattformar som Kubernetes. Många fler applikationsinstanser kan köras med samma hårdvaruresurser. Efter sin första debut genomgick Quarkus flera förbättringar under de närmaste månaderna, som kulminerade i en 1.0-utgåva inom open source-gemenskapen i oktober 2019. Som ett nytt ramverk behöver Quarkus inte försöka bygga om nya mönster och principer i en befintlig kodbas . Istället kan det fokusera på innovation.

Designpelare

Container först

Från början var Quarkus designad kring container-first och Kubernetes-native-filosofin, optimerad för låg minnesanvändning och snabba starttider.

Så mycket bearbetning som möjligt görs vid byggtiden, inklusive att använda en sluten världsantagande för att bygga och köra applikationer. Denna optimering innebär att, i de flesta fall, all kod som inte har en exekveringssökväg vid körning inte läses in i JVM.

I Quarkus anropas klasser som endast används vid applikationsstart vid byggtid och läses inte in i runtime JVM. Quarkus undviker också reflektion så mycket som möjligt och gynnar istället statisk klassbindning. Dessa designprinciper minskar storleken, och i slutändan minnesfotavtrycket, för applikationen som körs på JVM samtidigt som Quarkus kan vara inbyggd .

Quarkus design stod för infödd kompilering från början. Den optimerades för att använda den inbyggda bildkapaciteten hos GraalVM för att kompilera JVM-bytekod till en inbyggd maskinbinär. GraalVM tar aggressivt bort all oåtkomlig kod som finns i applikationens källkod såväl som alla dess beroenden. I kombination med Linux-behållare och Kubernetes körs en Quarkus-applikation som en inbyggd körbar Linux-fil, vilket eliminerar JVM. En Quarkus inbyggd körbar startar mycket snabbare och använder mycket mindre minne än en traditionell JVM. Här är ett exempel på hur snabbt Quarkus kan leverera betydande körtidseffektivitet baserat på Red Hat-testning:

$ ./my-native-java-rest-app Quarkus startade på 0,008s
  • Snabb uppstart (tiotals millisekunder) tillåter automatisk skalning upp och ned av mikrotjänster på containrar och Kubernetes samt FaaS exekvering på plats
  • Lågt minnesutnyttjande hjälper till att optimera behållardensiteten i mikroservicearkitekturinstallationer som kräver flera behållare
  • Mindre applikations- och behållarbildsavtryck

Livekodning

Ett av de största produktivitetsproblemen som de flesta Java-utvecklare möter är det traditionella arbetsflödet för Java-utveckling. För de flesta webbutvecklare kommer detta i allmänhet att vara:

Skriv kod Kompilera Implementera Uppdatera webbläsare Upprepa

Detta kan vara en stor belastning på produktiviteten, eftersom kompilerings- och omdistribueringscykeln ofta kan ta upp till en minut eller mer. Quarkus siktar på att lösa detta problem med sin Live Coding- funktion. När du kör i utvecklingsläge är arbetsflödet helt enkelt:

Skriv kod Uppdatera webbläsare Upprepa

Detta kommer att fungera direkt, utan någon speciell installation krävs. Detta fungerar för Java-filer, programkonfigurationer och statiska resurser.

Notera När du kör mvn-kompilering kommer quarkus:dev att startas i utvecklingsläge. När den tar emot en HTTP-begäran kommer den att behålla begäran och kontrollera om några programkällfiler har ändrats. Om de har det kommer de på ett transparent sätt att kompilera de ändrade filerna, omdistribuera applikationen med de ändrade filerna, och sedan fortsätter HTTP-begäran till den omdistribuerade applikationen. Quarkus omdistribueringar är mycket snabbare än en traditionell appserver, så för alla utom de största applikationerna bör detta ta långt under en sekund.

Interaktivt användargränssnitt för utvecklare (DEV UI)

Quarkus tillhandahåller ett interaktivt utvecklargränssnitt för att visa upp alla tillagda beroenden när en utvecklare kommer åt http://localhost:8080/q/dev- slutpunkten efter att Quarkus-dev-läget startat via mvn quarkus:dev kommandoraden. Utvecklarna kan också uppdatera konfigurationer då ändringarna synkroniserar application.properties automatiskt.

Noll konfiguration med dev-tjänster

Att installera en databas i en utvecklares lokala miljö är inte en trivial uppgift om databasen ska vara samma som produktionsversionen. Naturligtvis kan Linux-användare (utvecklare) enkelt köra databasen med hjälp av ett containerkommandoradsverktyg (t.ex. Docker ) och en containermotor (t.ex. Docker ). De tenderar fortfarande att inte köra produktionsklara databaser (t.ex. PostgreSQL och MariaDB ) på grund av hög förbrukning av resurser (t.ex. CPU, minne och diskutrymme). Istället föredrar de att använda in-memory datastores som H2-databasen.

Quarkus tillhandahåller Dev Services byggda på testcontainrar för att lösa detta problem. Till exempel kan en utvecklare göra testapplikationer om de fungerar i produktionsdatabasen, PostgreSQL snarare än H2 i minnet i filen application.properties:

quarkus.datasource.devservices.image-name=postgres:senaste

DevServices är i allmänhet aktiverat som standard, såvida det inte finns en befintlig konfiguration. När DevServices är aktiverat kommer Quarkus att försöka automatiskt konfigurera och starta en databas när den körs i utvecklings- eller testläge.

Kontinuerlig testning

Testning är inte ett alternativ för att utveckla robusta applikationer inom mjukvaruutveckling från monolit till mikrotjänster. Utvecklare tänker förmodligen på externa verktyg för kontinuerlig integration (CI) som ett QA-team med största sannolikhet har ansvar för att verifiera testfall. Tänk om utvecklarna inte behöver integrera CI-verktygen utan utföra testfallen i en runtime-miljö där affärsapplikationer utvecklas och körs. Quarkus tillhandahåller en kontinuerlig testfunktion genom kommandoradsgränssnittet såväl som DEV UI. Den här funktionen tar bort utvecklarens ansträngningar att integrera ett externt CI-verktyg och säkerställer funktionaliteten samtidigt som affärslogiken kontinuerligt utvecklas.

Byggd på standarder

Quarkus vilar på ett stort ekosystem av teknologier, standarder, bibliotek och API:er. Utvecklare behöver inte spendera mycket tid på att lära sig en helt ny uppsättning API:er och tekniker för att dra fördel av fördelarna med Quarkus till JVM eller inbyggda bilder. Bland de specifikationer och teknologier som ligger bakom Quarkus är Contexts & Dependency Injection ( CDI ), JAX-RS , Java Persistence API (JPA), Java Transaction API (JTA), Apache Camel och Hibernate , bara för att nämna några. [ citat behövs ]

Quarkus är också en Ahead-of-Time-kompileringsplattform (AOT) som optimerar kod för JVM samt kompilerar till inbyggd kod för förbättrad prestanda. Alla underliggande teknologier är AOT-aktiverade, och Quarkus införlivar kontinuerligt nya AOT-aktiverade teknologier, standarder och bibliotek.

Alla teknologier och funktioner som behövs för att bygga mikrotjänster är tillgängliga och optimerade för Quarkus. Dessa tekniker drar fördel av alla kompilerings- och körtidsoptimeringar som redan har diskuterats. Tekniker som Keycloak för autentisering och auktorisering, eller Infinispan för distribuerad caching, är optimerade för användning inom Quarkus, oavsett om de körs i HotSpot JVM eller som en inbyggd bild. Tredjepartsutvecklare av ramverk och bibliotek kan dra fördel av denna AOT-plattform för att optimera dem för Quarkus. [ citat behövs ]

Bibliografi