Quarkus Java subatomiko supersonikoa da. Esparruaren ikuspegi laburra

Quarkus Java subatomiko supersonikoa da. Esparruaren ikuspegi laburra

Sarrera

Martxoaren XNUMXan, RedHat (laster IBM) aurkeztu marko berria - Quarkuak. Garatzaileen arabera, esparru hau GraalVM eta OpenJDK HotSpot-en oinarritzen da eta Kubernetesentzat diseinatuta dago. Quarkus pilak honako hauek ditu: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus eta beste batzuk.

Helburua Java Kubernetes inplementatzeko eta zerbitzaririk gabeko aplikazioen garapenerako plataforma nagusi bihurtzea da, garatzaileei garapenerako ikuspegi bateratua eskainiz, estilo erreaktibo zein inperatiboetan.

Begiratuz gero hau esparruen sailkapena, orduan Quarkus "Agregatzaileak/Kode Sortzaileak" eta "Maila handiko fullstack esparruen" artean dago. Hau agregatzaile bat baino gehiago da dagoeneko, baina ez da pila osoa ere iristen, zeren... backend garapenerako egokituta.

Aplikazioak abiarazteko abiadura oso handia eta memoria-kontsumo txikia agintzen dira. Hona hemen garatzailearen webguneko datuak:

Hasieratik lehenengo erantzuna (k):

konfigurazioa
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Hodeiaren jatorrizko pila tradizionala*
4.3
9.5

Memoria-kontsumoa (Mb):

konfigurazioa
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Hodeiaren jatorrizko pila tradizionala*
140
218

Ikusgarria, ezta?

*Ez nuen teknologia pila honi buruzko informaziorik aurkitu, pentsa dezakegu hau Spring Boot moduko bat dela gorputz-kit osagarri batekin.

Kaixo Mundua!

Quarkus-en idatzitako aplikaziorik errazena honelakoa litzateke:

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

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

Klase bakarra da literalki eta nahikoa da! Aplikazioa Maven erabiliz exekutatu dezakezu garapen moduan:

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

Aplikazio arrunt baten aldea da Aplikazio klaserik ez dagoela! Quarkus-ek birkarga beroa onartzen du, beraz, zure aplikazioa alda dezakezu berrabiarazi gabe, garapena are azkarrago eginez.

Zer da hurrengoa? Kontrolagailu bati zerbitzu bat gehi diezaiokezu ohar bat erabiliz Injektatu. Zerbitzuaren kodea:

@ApplicationScoped
public class GreetingService {

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

Kontrolatzailea:

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

Kontuan izan Quarkusek ohiko esparruetako oharpen estandarrak erabiltzen dituela - CDI eta JAX-RS. Ez dago ezer berririk ikasi beharrik aurretik CDI eta JAX-RSekin lan egin baduzu, noski.

Datu-basearekin lan egitea

Hibernate eta entitateentzako JPA oharpen estandarrak erabiltzen dira. REST kontrolagailuekin bezala, gutxieneko kode bat idatzi behar duzu. Nahikoa da muntaketa fitxategian mendekotasunak adieraztea, oharrak gehitzea @Entity eta konfiguratu datu-iturburua aplikazioan.properties.

Denak. Ez dago sessionFactory, persistence.xml edo bestelako zerbitzu fitxategirik. Behar den kodea bakarrik idazten dugu. Hala ere, beharrezkoa bada, persistence.xml fitxategi bat sor dezakezu eta ORM geruza finago konfigura dezakezu.

Quarkus-ek entitateen cachean gordetzea onartzen du, bat-bateko harremanetarako bildumak eta kontsultak. Lehen begiratuan bikaina dirudi, baina hala da local cachean gordetzea, Kubernetes nodo baterako. Horiek. Nodo ezberdinen cacheak ez daude elkarren artean sinkronizatuta. Espero dut hau behin-behinekoa izatea.

Kode asinkronoaren exekuzioa

Goian aipatu bezala, Quarkusek programazio estilo erreaktiboa ere onartzen du. Aurreko aplikazioaren kodea beste forma batean idatz daiteke.

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

Kode asinkronoa ere transferitu daiteke zerbitzura, emaitza berdina izango da.

Testing

Quarkus aplikazioetarako probak JUnit4 edo JUnit5-en idatz daitezke. Jarraian, amaierako puntu baten proba adibide bat dago, RestAssured erabiliz idatzita dago, baina beste marko bat erabil daiteke:

@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 oharrak aplikazioa exekutatzeko agintzen dizu probak egin aurretik. Gainerakoa garatzaile guztientzat ezaguna da kodea.

Plataformarako berariazko aplikazioa

Quarkus GraalVM-rekin oso integratuta dagoenez, noski posible da plataformako berariazko kodea sortzea. Horretarako, GraalVM instalatu eta GRAALVM_HOME ingurune-aldagaia zehaztu behar duzu. Aurrerago erregistratu profil bat muntatzeko eta zehaztu aplikazioa eraikitzerakoan:

mvn package -Pnative

Interesgarria da, sortutako aplikazioa probatu daiteke. Eta hori garrantzitsua da jatorrizko kodearen exekuzioa JVMn exekutatzeko desberdina izan daitekeelako. @SubstrateTest oharrak plataformako aplikazio-kode espezifikoa exekutatzen du. Lehendik dagoen proba-kodea berrerabili herentzia erabiliz egin daiteke; ondorioz, plataformaren araberako aplikazio bat probatzeko kodea honela izango da:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Sortutako irudia Docker-en paketatu eta Kubernetes edo OpenShift-en exekutatu daiteke, xehetasunez deskribatuta argibideak.

tresnak

Quarkus markoa Maven eta Gradle-rekin erabil daiteke. Maven guztiz onartzen da, Gradle ez bezala. Zoritxarrez, momentuz Gradle-k ez du onartzen proiektu huts bat sortzea; webgunean informazio zehatza dago. testu liburua.

hedapen

Quarkus marko hedagarria da. Gaur egun eskaera bat dago 40 luzapen, hainbat funtzionalitate gehitzen dituztenak - euskarritik Spring DI edukiontzia ΠΈ Apache gamelua zerbitzuak martxan jartzeko neurketak erregistratu eta argitaratu aurretik. Eta dagoeneko badago luzapen bat Kotlin-en idazteko aplikazioak onartzen dituena, Javaz gain.

Ondorioa

Nire ustez, Quarkus garaiko joerekin nahiko bat dator. Backend kodearen garapena gero eta errazagoa da, eta esparru honek zerbitzuen garapena gehiago sinplifikatzen eta bizkortzen du Docker eta Kubernetes-en jatorrizko laguntza gehituz. Abantaila handi bat GraalVM-ren euskarri integratua eta plataformaren araberako irudiak sortzea da, eta horrek zerbitzuak oso azkar abiarazteko aukera ematen du eta memoria leku gutxi hartzen du. Eta hori oso garrantzitsua da mikrozerbitzuetarako eta zerbitzaririk gabeko arkitekturarako pasio masiboaren garaian.

Webgune ofiziala - quarkus.io. Hasiera azkar baterako proiektuen adibideak dagoeneko eskuragarri daude GitHub.

Iturria: www.habr.com

Gehitu iruzkin berria