Quarkus er yfirhljóð undiratóm Java. Stutt yfirlit yfir rammann

Quarkus er yfirhljóð undiratóm Java. Stutt yfirlit yfir rammann

Inngangur

Þann XNUMX. mars, RedHat (bráðum IBM) fram ný umgjörð - Kvarkus. Samkvæmt þróunaraðilum er þessi rammi byggður á GraalVM og OpenJDK HotSpot og er hannaður fyrir Kubernetes. Quarkus staflan inniheldur: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus og fleiri.

Markmiðið er að gera Java að leiðandi vettvangi fyrir Kubernetes dreifingu og netþjónalausa forritaþróun, sem veitir forriturum sameinaða nálgun við þróun bæði í viðbragðs- og brýn stíl.

Horfa á þetta flokkun ramma, þá er Quarkus einhvers staðar á milli „Aggregators/Code Generators“ og „High-level fullstack ramma“. Þetta er nú þegar meira en samansafn, en það nær ekki einu sinni fullum stafla, vegna þess að... sniðin fyrir bakendaþróun.

Það er lofað mjög miklum hraða við ræsingu forrita og lítilli minnisnotkun. Hér eru gögnin frá vefsíðu þróunaraðila:

Tími frá upphafi til fyrsta svars:

Stillingar
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Hefðbundinn skýjastafla*
4.3
9.5

Minnisnotkun (Mb):

Stillingar
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Hefðbundinn skýjastafla*
140
218

Áhrifamikið, er það ekki?

*Ég fann engar upplýsingar um þennan tæknistafla, við getum gert ráð fyrir að þetta sé einhvers konar Spring Boot með viðbótar líkamsbúnaði.

Halló heimur!

Einfaldasta forritið sem skrifað er í Quarkus myndi líta svona út:

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

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

Það er bókstaflega einn flokkur og það er nóg! Þú getur keyrt forritið með Maven í þróunarham:

mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello

Munurinn frá venjulegri umsókn er að það er enginn umsóknarflokkur! Quarkus styður heita endurhleðslu, svo þú getur breytt forritinu þínu án þess að endurræsa það, sem gerir þróunina enn hraðari.

Hvað er næst? Þú getur bætt þjónustu við stjórnanda með því að nota athugasemd Sprautaðu. Þjónustukóði:

@ApplicationScoped
public class GreetingService {

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

Stjórnandi:

@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!

Athugaðu að Quarkus notar staðlaðar athugasemdir frá kunnuglegum ramma - CDI og JAX-RS. Það er engin þörf á að læra neitt nýtt ef þú hefur unnið með CDI og JAX-RS áður, auðvitað.

Vinna með gagnagrunninn

Notast er við dvala og staðlaða JPA skýringar fyrir aðila. Eins og með REST stýringar þarftu að skrifa lágmarks kóða. Það er nóg að gefa til kynna ósjálfstæðin í samsetningarskránni, bæta við athugasemdum @Entity og stilltu gagnagjafa í application.properties.

Allt. Engar sessionFactory, persistence.xml eða aðrar þjónustuskrár. Við skrifum aðeins kóðann sem þarf. Hins vegar, ef nauðsyn krefur, geturðu búið til persistence.xml skrá og stillt ORM lagið fínnar.

Quarkus styður skyndiminni eininga, söfn fyrir einn á marga sambönd og fyrirspurnir. Við fyrstu sýn lítur það vel út, en það er það staðbundin skyndiminni, fyrir einn Kubernetes hnút. Þeir. Skyndiminni mismunandi hnúta eru ekki samstillt hver við annan. Ég vona að þetta sé tímabundið.

Ósamstilltur kóða framkvæmd

Eins og getið er hér að ofan styður Quarkus einnig viðbragðsforritunarstílinn. Hægt er að skrifa kóðann fyrir fyrri umsókn á öðru formi.

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

Einnig er hægt að flytja ósamstilltan kóða yfir á þjónustuna, niðurstaðan verður sú sama.

Prófun

Próf fyrir Quarkus forrit er hægt að skrifa í JUnit4 eða JUnit5. Hér að neðan er dæmi um próf fyrir endapunkt, það er skrifað með RestAssured, en hægt er að nota annan ramma:

@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 skýringin gefur þér fyrirmæli um að keyra forritið áður en þú keyrir próf. Restin er kóða sem allir forritarar þekkja.

Pallsértækt forrit

Þar sem Quarkus er þétt samþætt við GraalVM er auðvitað hægt að búa til vettvangssértækan kóða. Til að gera þetta þarftu að setja upp GraalVM og tilgreina GRAALVM_HOME umhverfisbreytuna. Frekari skrá snið fyrir samsetningu og tilgreindu það þegar þú byggir forritið:

mvn package -Pnative

Athyglisvert er að hægt er að prófa forritið sem er búið til. Og þetta er mikilvægt vegna þess að framkvæmd innfædds kóða getur verið frábrugðin framkvæmd á JVM. @SubstrateTest skýringin keyrir vettvangssértækan forritakóða. Hægt er að endurnýta núverandi prófunarkóða með því að nota arfleifð; þar af leiðandi mun kóðinn til að prófa vettvangsháð forrit líta svona út:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Myndinni er hægt að pakka í Docker og keyra hana í Kubernetes eða OpenShift, lýst í smáatriðum í leiðbeiningar.

Verkfæri

Quarkus ramma er hægt að nota með Maven og Gradle. Maven er að fullu studd, ólíkt Gradle. Því miður, í augnablikinu styður Gradle ekki að búa til tómt verkefni; það eru nákvæmar upplýsingar á vefsíðunni kennslubók.

Viðbyggingar

Quarkus er teygjanlegur rammi. Eins og er er pöntun 40 framlengingar, sem bæta við ýmsum virkni - frá stuðningi Spring DI gámur и Apache úlfalda áður en þú skráir þig og birtir mælikvarða fyrir keyrandi þjónustu. Og það er nú þegar viðbót til að styðja við að skrifa forrit í Kotlin, auk Java.

Ályktun

Að mínu mati er Quarkus alveg í takt við stefnur þess tíma. Þróun bakendakóða er að verða auðveldari og auðveldari og þessi rammi einfaldar og flýtir enn frekar fyrir þjónustuþróun með því að bæta við innbyggðum stuðningi fyrir Docker og Kubernetes. Stór plús er innbyggður stuðningur við GraalVM og myndun vettvangsháðra mynda, sem gerir þjónustu kleift að byrja mjög hratt og taka lítið minnisrými. Og þetta er mjög mikilvægt á tímum fjöldaástríðu okkar fyrir örþjónustu og netþjónalausum arkitektúr.

Opinber síða - quarkus.io. Dæmi um verkefni til skjótrar byrjunar eru nú þegar fáanleg á GitHub.

Heimild: www.habr.com

Bæta við athugasemd