Quarkus — supersonic subatomaarne Java. Raamistiku lĂŒhike ĂŒlevaade

Quarkus — supersonic subatomaarne Java. Raamistiku lĂŒhike ĂŒlevaade

Sissejuhatus

Seitsmendal mĂ€rtsil kuulutas RedHat (varsti — IBM) vĂ€lja esituse uue raamistikku — Quarkus. Arendajate sĂ”nul pĂ”hineb see raamistik GraalVM-il ja OpenJDK HotSpotil ning on mĂ”eldud Kubernetes'ile. Quarkuse tehnoloogiakuhja kuuluvad: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus ja teised.

Selle loomise eesmĂ€rk on muuta Java juhtivaks platvormiks Kubernetes'esse juurutamiseks ja serverless rakenduste arendamiseks, pakkudes arendajatele ĂŒhtset lĂ€henemist nii reaktiivses kui ka imperatiivsest stiilis arendamiseks.

Kui vaadata seda raamistike klassifikatsiooni, siis Quarkus asub kuskil 'Ahnurite/Koodi genereerijate' ja 'KÔrgetasemeliste tÀisteenindusraamistike' vahel. See on rohkem kui ahnur, kuid ei ulatu tÀisteeninduseni, kuna on suunatud backend arendusele.

Lubatakse vÀga kÔrget rakenduse kÀivituskiirus ja madal mÀlu tarbimine. Siin on arendaja kodulehelt saadud andmed:

Aeg algusest esimesse vastusesse (s):

Konfiguratsioon
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Traditsiooniline pilve native tech stack*
4.3
9.5

MĂ€lu tarbimine (Mb):

Konfiguratsioon
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Traditsiooniline pilve native tech stack*
140
218

ImetlusvÀÀrne, kas pole?

*Selle tehnoloogiate kuhja kohta infot ei leidnud, vÔib eeldada, et tegemist on mÔne Spring Booti koos lisadega.

Hello World!

Lihtsaim rakendus, mis on kirjutatud Quarkuses, nÀeb vÀlja nii:

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

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

See on tegelikult ĂŒks klass ja sellest piisab! Saate kĂ€ivitada rakenduse Maveniga arendusreĆŸiimis:

mvn compile quarkus:dev


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

Erinevus tavapÀrasest rakendusest on see, et ei ole klassi Application! Quarkus toetab kuumlaadimist, mistÔttu saate rakendust muuta, ilma et peaksite seda uuesti kÀivitama, mis kiirendab arendust veelgi.

Mis edasi? Saate lisada teenuse kontrollijale annotatsiooni abil Inject. Teenuse kood:

@ApplicationScoped
public class GreetingService {

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

Kontrollija:

@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 Quarkuses kasutatakse tuttavaid raamistike standardanotatsioone — CDI ja JAX-RS. Uut midagi Ă”ppida ei ole vaja, kui olete varem töötanud CDI ja JAX-RS-ga, muidugi.

Töö andmebaasiga

Hibernate'i ja standardsete JPA annotatsioonide kasutamine entiteetide jaoks. Nagu REST kontrollerite puhul, on vajalik kirjutada minimaalne kood. Piisab, kui mÀrkida sÔltuvused ehitust failis ja lisada annotatsioonid. @Entity ja konfigureerida andmeallikas application.properties failis.

KÔik. Ei mingeid sessionFactory'd, persistence.xml ega muid teenuse faile. Kirjutame ainult vajaliku koodi. Siiski, vajadusel on vÔimalik luua persistence.xml fail ja ORM-i kihti detailsemalt konfigureerida.

Quarkus toetab entiteetide, kogude ja ĂŒhe-mitmele suhete vahepealset vahemĂ€lu, samuti pĂ€ringuid. Esmapilgul tundub see suurepĂ€rane, kuid see on kohalik vahemĂ€lu, mis on mĂ”eldud ĂŒhe Kubernetes'i sĂ”lme jaoks. See tĂ€hendab, et erinevate sĂ”lmede vahemĂ€lud ei ole omavahel sĂŒnkroniseeritud. Loodan, et see on ajutine.

AsĂŒnkroonne koodi tĂ€itmine

Nagu eespool mainitud, toetab Quarkus ka reaktiivset programmeerimise stiili. Eelneva rakenduse kood on vÔimalik kirjutada teises vormis.

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

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

AsĂŒnkroonsed koodid saab samuti teenusesse viia, tulemuseks on sama.

Testimine

Quarkus-rakenduste teste saab kirjutada JUnit4 vÔi JUnit5. Allpool on toodud nÀide API testi kohta, mis on kirjutatud RestAssured'i abil, kuid vÔib kasutada ka teisi raamistikke:

@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("Tere " + uuid + "!"));
   }
}

Annotatsioon @QuarkusTest kĂ€seb kĂ€ivitada rakendus enne testide kĂ€ivitamist. ÜlejÀÀnud on tuttav kĂ”igile arendajatele kood.

Platvormist sÔltuv rakendus

Kuna Quarkus on tihedalt integreeritud GraalVM-iga, saab loomulikult genereerida platvormist sÔltuvat koodi. Selleks tuleb paigaldada GraalVM ja mÀÀrata keskkonnamuutuja GRAALVM_HOME. JÀrgmisena tuleb mÀÀrata profiil ehitamiseks ja mÀÀrata see rakenduse ehitamisel:

mvn package -Pnative

Huvitav on see, et genereeritud rakendust saab testida. See on oluline, kuna "natiivse" koodi tÀitmine vÔib erineda JVM-il töötamisest. Annotatsioon @SubstrateTest kÀivitab rakenduse platvormist sÔltuva koodi. Olemasolevat testikoodi saab kasutada pÀrimise kaudu, seega nÀeb platvormist sÔltuva rakenduse testimiskood vÀlja selline:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Genereeritud pildi saab pakkida Dockerisse ja kĂ€ivitada Kuberneteses vĂ”i OpenShiftis, mille kohta on ĂŒksikasjalik kirjeldus juhendis.

Tööriistade komplekt

Raami Quarkus saab kasutada Maveniga ja Gradlega. Mavenit toetatakse tĂ€ielikult, erinevalt Gradlest. Kahjuks ei toeta Gradle praegu tĂŒhja projekti genereerimist, kodulehel on pĂ”hjalik Ă”petust.

Laiendid

Quarkus on laiendatav raamistik. Praegu on olemas umbes 40 laiendust, mis lisavad erinevat funktsionaalsust — alates Spring DI konteinerist ja Apache Camel kuni logimise ja töötavate teenuste meetrikate avaldamiseni. Juba on olemas laiendus, mis toetab rakenduste kirjutamist Kotlinis, lisaks Java-le.

KokkuvÔte

Minu arvates on Quarkus tĂ€iesti ajakohane. Tagapere koodi arendamine muutub jĂ€rjest lihtsamaks ja see raamistik lihtsustab ning kiirendab teenuste arendamist veelgi, lisades „natiivset“ tuge Dockerile ja Kubernetesile. Suur eelis on integreeritud tugi GraalVM-ile ja platvormispetsiifiliste piltide genereerimisele, mis vĂ”imaldab teenuste kiiresti kĂ€ivituda ja hĂ”ivavad vĂ€he mĂ€lu. See on vĂ€ga oluline meie aja massilise mikroteenuste ja serveriteta arhitektuuri huvi juures.

Ametlik veebileht — quarkus.io. Kiire alguse projekti nĂ€ited on juba olemas GitHub.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster