Tha Quarkus na Java subatomic supersonic. Sealladh farsaing air an fhrèam

Tha Quarkus na Java subatomic supersonic. Sealladh farsaing air an fhrèam

Ro-ràdh

Air XNUMX Màrt, RedHat (a dh'aithghearr IBM) air a thaisbeanadh frèam ùr - Cuarcus. A rèir an luchd-leasachaidh, tha am frèam seo stèidhichte air GraalVM agus OpenJDK HotSpot agus tha e air a dhealbhadh airson Kubernetes. Tha an stac Quarkus a’ toirt a-steach: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus agus feadhainn eile.

Is e an t-amas Java a dhèanamh na phrìomh àrd-ùrlar airson cleachdadh Kubernetes agus leasachadh thagraidhean gun fhrithealaiche, a’ toirt dòigh-obrach aonaichte do luchd-leasachaidh a thaobh leasachadh ann an stoidhlichean reactive agus riatanach.

Ma sheallas tu air seo seòrsachadh frèaman, an uairsin tha Quarkus an àiteigin eadar “Aggregators / Code Generators” agus “Framaichean làn-ìre àrd-ìre”. Tha seo mar-thà nas motha na cruinniche, ach chan eil e eadhon a’ ruighinn làn chruach, oir... air a dhealbhadh airson leasachadh cùl-taic.

Thathas a’ gealltainn astar fìor àrd de chuir air bhog tagradh agus caitheamh cuimhne ìosal. Seo an dàta bho làrach-lìn an leasaiche:

Àm bho thoiseach gu ciad fhreagairt(ean):

Rèiteachadh
CÒRR
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Stac Dùthchasach Cloud Traidiseanta*
4.3
9.5

Caitheamh cuimhne (Mb):

Rèiteachadh
CÒRR
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Stac Dùthchasach Cloud Traidiseanta*
140
218

Drùidhteach, nach eil?

*Cha do lorg mi fiosrachadh sam bith mun chruach teicneòlais seo, faodaidh sinn gabhail ris gur e seòrsa de Spring Boot a tha seo le pasgan bodhaig a bharrachd.

Hàlo a Shaoghail!

Bhiodh an tagradh as sìmplidh a chaidh a sgrìobhadh ann an Quarkus a’ coimhead mar seo:

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

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

Tha e gu litireil aon chlas agus tha sin gu leòr! Faodaidh tu an aplacaid a ruith le bhith a’ cleachdadh Maven ann am modh leasachaidh:

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

Is e an eadar-dhealachadh bho thagradh cunbhalach nach eil clas Iarrtais ann! Bidh Quarkus a ’toirt taic do ath-luchdachadh teth, gus an urrainn dhut an tagradh agad atharrachadh gun a bhith ag ath-thòiseachadh, a’ dèanamh leasachadh eadhon nas luaithe.

Dè an ath rud? Faodaidh tu seirbheis a chur ri rianadair a’ cleachdadh nota Inject. Còd seirbheis:

@ApplicationScoped
public class GreetingService {

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

Rianadair:

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

Thoir an aire gu bheil Quarkus a’ cleachdadh notaichean àbhaisteach bho fhrèaman eòlach - CDI agus JAX-RS. Chan fheumar dad ùr ionnsachadh ma tha thu air a bhith ag obair le CDI agus JAX-RS roimhe seo, gu dearbh.

Ag obair leis an stòr-dàta

Bithear a’ cleachdadh notaichean cadal a’ gheamhraidh agus àbhaisteach JPA airson buidhnean. Coltach ri luchd-riaghlaidh REST, feumaidh tu còd as lugha a sgrìobhadh. Tha e gu leòr airson na h-eisimeileachd anns an fhaidhle cruinneachaidh a chomharrachadh, cuir notaichean ris @Entity agus rèiteachadh stòr-dàta ann an application.properties.

Uile. No sessionFactory, persistence.xml no faidhlichean seirbheis eile. Bidh sinn a 'sgrìobhadh a-mhàin an còd a tha a dhìth. Ach, ma tha sin riatanach, faodaidh tu faidhle persistence.xml a chruthachadh agus an ìre ORM a rèiteachadh nas mionaidiche.

Bidh Quarkus a’ toirt taic do thasgadh bhuidhnean, cruinneachaidhean airson dàimhean aon-gu-iomadach, agus ceistean. Aig a 'chiad sealladh tha e a' coimhead glè mhath, ach tha e ionadail tasgadh, airson aon nód Kubernetes. An fheadhainn sin. Chan eil na caches de nodan eadar-dhealaichte air an sioncronadh le chèile. Tha mi an dòchas gur e seo sealach.

Cur an gnìomh còd asyncronach

Mar a chaidh ainmeachadh gu h-àrd, tha Quarkus cuideachd a’ toirt taic don stoidhle prògramadh reactive. Faodar còd an tagraidh roimhe a sgrìobhadh ann an cruth eadar-dhealaichte.

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

Faodar còd asyncronach a ghluasad chun t-seirbheis cuideachd, bidh an toradh mar an ceudna.

Deuchainn

Faodar deuchainnean airson tagraidhean Quarkus a sgrìobhadh ann an JUnit4 no JUnit5. Gu h-ìosal tha eisimpleir de dheuchainn airson puing crìochnachaidh, tha e sgrìobhte a’ cleachdadh RestAssured, ach faodar frèam eile a chleachdadh:

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

Tha an nota @QuarkusTest ag iarraidh ort an aplacaid a ruith mus ruith thu deuchainnean. Tha an còrr na chòd a tha eòlach air a h-uile leasaiche.

Iarrtas sònraichte airson àrd-ùrlar

Leis gu bheil Quarkus ceangailte gu teann ri GraalVM, gu dearbh tha e comasach còd àrd-ùrlar sònraichte a ghineadh. Gus seo a dhèanamh, feumaidh tu GraalVM a stàladh agus caochladair àrainneachd GRALVM_HOME a shònrachadh. Nas fhaide clàraich pròifil airson co-chruinneachadh agus sònraich e nuair a bhios tu a’ togail an tagraidh:

mvn package -Pnative

Gu inntinneach, faodar an tagradh a chaidh a chruthachadh a dhearbhadh. Agus tha seo cudromach oir faodaidh cur an gnìomh còd dùthchasach a bhith eadar-dhealaichte bho choileanadh air an JVM. Tha an nota @SubstrateTest a’ ruith còd tagraidh a tha sònraichte don àrd-ùrlar. Faodar ath-chleachdadh a’ chòd deuchainn a th’ ann mar-thà a’ cleachdadh dìleab; mar thoradh air an sin, seallaidh an còd airson tagradh a tha an urra ri àrd-ùrlar mar seo:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Faodar an ìomhaigh a chaidh a chruthachadh a phacaigeadh ann an Docker agus a ruith ann an Kubernetes no OpenShift, air a mhìneachadh gu mionaideach ann an stiùireadh.

Pasgan-obrach

Faodar frèam Quarkus a chleachdadh le Maven agus Gradle. Tha làn thaic aig Maven, eu-coltach ri Gradle. Gu mì-fhortanach, aig an àm seo chan eil Gradle a’ toirt taic do bhith a’ cruthachadh pròiseact falamh; tha fiosrachadh mionaideach air an làrach-lìn leabhar-teacs.

Leudachadh

Tha Quarkus na fhrèam leudachail. An-dràsta tha òrdugh ann 40 leudachadh, a tha a 'cur ri diofar fheartan - bho thaic An t-earrach DI container и Apache Camel mus cuir thu a-steach agus a’ foillseachadh mheatairean airson ruith sheirbheisean. Agus tha leudachadh ann mu thràth gus taic a thoirt do thagraidhean sgrìobhaidh ann an Kotlin, a bharrachd air Java.

co-dhùnadh

Nam bheachd-sa, tha Quarkus gu math a rèir gluasadan na h-ùine. Tha leasachadh còd backend a’ fàs nas fhasa agus nas fhasa, agus tha am frèam seo a’ sìmpleachadh agus a’ luathachadh leasachadh seirbheis le bhith a’ cur taic dhùthchasach ri Docker agus Kubernetes. Is e buannachd mhòr a tha ann an taic stèidhichte airson GraalVM agus gineadh ìomhaighean a tha an urra ri àrd-ùrlar, a leigeas le seirbheisean tòiseachadh gu math luath agus beagan àite cuimhne a ghabhail. Agus tha seo glè chudromach nar n-ùine de dhealas mòr airson meanbh-sheirbheisean agus ailtireachd gun fhrithealaiche.

Làrach oifigeil - cuarc.io. Tha eisimpleirean de phròiseactan airson tòiseachadh luath rim faighinn mu thràth air GitHub.

Source: www.habr.com

Cuir beachd ann