Quarkus on ĂŒlehelikiirusega subatomiline Java. LĂŒhiĂŒlevaade raamistikust

Quarkus on ĂŒlehelikiirusega subatomiline Java. LĂŒhiĂŒlevaade raamistikust

Sissejuhatus

XNUMX. mÀrtsil RedHat (varsti IBM) esitatakse uus raamistik - Kvarkus. Arendajate sÔnul pÔhineb see raamistik GraalVM-il ja OpenJDK HotSpotil ning on mÔeldud Kubernetesi jaoks. Quarkuse pinu sisaldab: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus ja teised.

EesmĂ€rk on muuta Java Kubernetese juurutamise ja serverivaba rakenduste arendamise juhtivaks platvormiks, pakkudes arendajatele ĂŒhtset lĂ€henemist arendusele nii reaktiivsetes kui ka imperatiivsetes stiilides.

Vaatan see raamistike klassifikatsiooni, siis on Quarkus kusagil “Agregaatorite/koodigeneraatorite” ja “KĂ”rgetasemeliste tĂ€ispinu raamistike” vahepeal. See on juba rohkem kui agregaator, kuid see ei jĂ”ua isegi tĂ€ispinnini, sest... kohandatud taustaprogrammi arendamiseks.

Lubatakse vÀga suurt rakenduste kÀivitamise kiirust ja vÀikest mÀlukulu. Siin on andmed arendaja veebisaidilt:

Aeg algusest esimese vastuseni:

Konfiguratsioon
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Traditsiooniline Cloud Native Stack*
4.3
9.5

MĂ€lu tarbimine (Mb):

Konfiguratsioon
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Traditsiooniline Cloud Native Stack*
140
218

Muljetavaldav, kas pole?

*Ma ei leidnud selle tehnoloogiapaki kohta teavet, vÔib eeldada, et see on mingi Spring Boot koos tÀiendava kehakomplektiga.

Tere, Maailm!

Lihtsaim Quarkuses kirjutatud rakendus nÀeks vÀlja selline:

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String hello() {
       return "hello";
   }
}

See on sĂ”na otseses mĂ”ttes ĂŒks klass ja sellest piisab! Rakendust saate Maveni abil arendusreĆŸiimis kĂ€ivitada:

mvn compile quarkus:dev


$ curl http://localhost:8080/hello
hello

Erinevus tavarakendusest seisneb selles, et puudub Rakendusklass! Quarkus toetab kuuma taaslaadimist, nii et saate oma rakendust muuta ilma seda taaskÀivitamata, muutes arenduse veelgi kiiremaks.

Mis jĂ€rgmiseks? Saate lisada kontrollerile teenuse mĂ€rkuse abil SĂŒstige. Teenuse kood:

@ApplicationScoped
public class GreetingService {

   public String greeting(String name) {
       return "Hello " + name + "!";
   }
}

Kontroller:

@Path("/hello")
public class GreetingResource {

   @Inject
   GreetingService service;

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public String greeting(@PathParam("name") String name) {
       return service.greeting(name);
   }
}

$ curl http://localhost:8080/hello/developer
Hello developer!

Pange tÀhele, et Quarkus kasutab standardseid mÀrkusi tuttavatest raamistikest - CDI ja JAX-RS. Muidugi pole vaja midagi uut Ôppida, kui olete varem töötanud CDI ja JAX-RS-iga.

Töö andmebaasiga

Olemite jaoks kasutatakse talveunereĆŸiimi ja standardseid JPA mĂ€rkusi. Nagu REST-kontrollerite puhul, peate kirjutama minimaalselt koodi. Piisab, kui mĂ€rkida koostefailis sĂ”ltuvused, lisada mĂ€rkused @Entity ja konfigureerige andmeallikas rakenduses application.properties.

KÔik. Ei mingeid sessionFactory, persistence.xml ega muid teenusefaile. Kirjutame ainult vajaliku koodi. Vajadusel saab aga luua faili persistence.xml ja ORM-i kihti tÀpsemalt seadistada.

Quarkus toetab olemite vahemĂ€llu salvestamist, ĂŒks-mitmele suhete kogusid ja pĂ€ringuid. Esmapilgul tundub see suurepĂ€rane, kuid nii see on kohalik vahemĂ€llu salvestamine ĂŒhe Kubernetese sĂ”lme jaoks. Need. Erinevate sĂ”lmede vahemĂ€lud ei ole omavahel sĂŒnkroonitud. Loodan, et see on ajutine.

AsĂŒnkroonse koodi tĂ€itmine

Nagu eespool mainitud, toetab Quarkus ka reaktiivset programmeerimisstiili. Eelmise taotluse koodi saab kirjutada erineval kujul.

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public CompletionStage<String> greeting(@PathParam("name") String name) {
       return CompletableFuture.supplyAsync(() -> {
           return "Hello " + name + "!";
       });
   }
}

AsĂŒnkroonset koodi saab ka teenusesse ĂŒle kanda, tulemus on sama.

Katsetamine

Quarkuse rakenduste teste saab kirjutada JUnit4-s vÔi JUnit5-s. Allpool on nÀidiskatse lÔpp-punkti jaoks, see on kirjutatud RestAssurediga, kuid kasutada saab ka teist raamistikku:

@QuarkusTest
public class GreetingResourceTest {

   @Test
   public void testGreetingEndpoint() {
       String uuid = UUID.randomUUID().toString();
       given()
         .pathParam("name", uuid)
         .when().get("/hello/{name}")
         .then()
           .statusCode(200)
           .body(is("Hello " + uuid + "!"));
   }
}

@QuarkusTest mĂ€rkus juhendab rakendust enne testide kĂ€ivitamist kĂ€ivitama. ÜlejÀÀnu on kĂ”igile arendajatele tuttav kood.

Platvormispetsiifiline rakendus

Kuna Quarkus on GraalVM-iga tihedalt integreeritud, on loomulikult vÔimalik genereerida platvormipÔhist koodi. Selleks tuleb installida GraalVM ja mÀÀrata GRAALVM_HOME keskkonnamuutuja. Edasi registreerige profiil kokkupanekuks ja tÀpsustage see rakenduse loomisel:

mvn package -Pnative

Huvitaval kombel saab loodud rakendust testida. Ja see on oluline, kuna algkoodi tÀitmine vÔib JVM-is kÀitamisest erineda. @SubstrateTest annotatsioon kÀitab platvormipÔhist rakenduse koodi. Olemasoleva testkoodi taaskasutamist saab teha pÀrimise teel; selle tulemusel nÀeb platvormist sÔltuva rakenduse testimise kood vÀlja jÀrgmine:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Loodud pildi saab pakkida Dockerisse ja kĂ€ivitada Kubernetesis vĂ”i OpenShiftis, mida on ĂŒksikasjalikult kirjeldatud juhiseid.

Toolkit

Quarkuse raamistikku saab kasutada koos Maveni ja Gradle'iga. Erinevalt Gradle'ist on Maven tĂ€ielikult toetatud. Paraku hetkel Gradle tĂŒhja projekti genereerimist ei toeta, kodulehel on tĂ€psem info olemas Ă”pik.

Laiendused

Quarkus on laiendatav raamistik. Hetkel on tellimus olemas 40 laiendust, mis lisavad erinevaid funktsioone – alates toest Vedru DI konteiner Đž Apache kaamel enne teenuste kĂ€itamise mÔÔdikute logimist ja avaldamist. Ja lisaks Javale on juba olemas laiendus, mis toetab Kotlinis rakenduste kirjutamist.

JĂ€reldus

Quarkus on minu meelest ĂŒsna omaaegsete trendidega kooskĂ”las. Taustaprogrammi koodiarendus muutub ĂŒha lihtsamaks ning see raamistik lihtsustab ja kiirendab veelgi teenusearendust, lisades Dockeri ja Kubernetese natiivse toe. Suureks plussiks on GraalVM-i sisseehitatud tugi ja platvormist sĂ”ltuvate piltide genereerimine, mis vĂ”imaldab teenustel vĂ€ga kiiresti kĂ€ivituda ja vĂ”tta vĂ€he mĂ€luruumi. Ja see on vĂ€ga oluline meie ajal, mil me tunneme massilist kirge mikroteenuste ja serverita arhitektuuri vastu.

Ametlik sait - quarkus.io. NĂ€ited projektidest kiireks alustamiseks on juba saadaval aadressil GitHub.

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster