Quarkus shine Java subatomic na musamman. Takaitaccen bayanin tsarin

Quarkus shine Java subatomic na musamman. Takaitaccen bayanin tsarin

Gabatarwar

A ranar XNUMX ga Maris, RedHat (nan da nan IBM) gabatar sabon tsarin - kwarkus. Bisa ga masu haɓakawa, wannan tsarin ya dogara ne akan GraalVM da OpenJDK HotSpot kuma an tsara shi don Kubernetes. Tarin Quarkus ya haɗa da: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus da sauransu.

Manufar ita ce sanya Java ta zama babban dandamali don ƙaddamar da Kubernetes da ci gaban aikace-aikacen da ba ta da uwar garken, samar da masu haɓakawa tare da haɗin kai don ci gaba a cikin nau'o'in amsawa da mahimmanci.

Idan ka duba wannan Rarraba tsarin, sannan Quarkus yana wani wuri tsakanin "Aggregators/Code Generators" da "High-Level fullstack frameworks". Wannan ya riga ya wuce abin tarawa, amma bai kai ga cika ba, saboda... wanda aka kera don ci gaban baya.

An yi alƙawarin babban saurin ƙaddamar da aikace-aikacen da ƙarancin amfani da ƙwaƙwalwar ajiya. Ga bayanan daga gidan yanar gizon mai haɓakawa:

Lokaci daga farko zuwa martani na farko (s):

Kanfigareshan
sauran
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Tari na Asalin Gajimare na Gargajiya*
4.3
9.5

Amfanin ƙwaƙwalwar ajiya (Mb):

Kanfigareshan
sauran
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Tari na Asalin Gajimare na Gargajiya*
140
218

Abin burgewa, ko ba haka ba?

*Ban sami wani bayani game da wannan tarin fasaha ba, zamu iya ɗauka cewa wannan wani nau'in Boot ne na bazara tare da ƙarin kayan aikin jiki..

Sannu Duniya!

Mafi sauƙaƙan aikace-aikacen da aka rubuta a cikin Quarkus zai yi kama da haka:

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

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

A zahiri aji daya ne kuma ya isa! Kuna iya gudanar da aikace-aikacen ta amfani da Maven a yanayin haɓakawa:

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

Bambancin daga aikace-aikacen yau da kullun shine cewa babu ajin Application! Quarkus yana goyan bayan sakewa mai zafi, don haka zaku iya canza aikace-aikacenku ba tare da sake kunna shi ba, yana haɓaka haɓakawa har ma da sauri.

Menene na gaba? Kuna iya ƙara sabis zuwa mai sarrafawa ta amfani da annotation Magana. Lambar sabis:

@ApplicationScoped
public class GreetingService {

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

Mai sarrafawa:

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

Lura cewa Quarkus yana amfani da daidaitattun bayanai daga tsarin da aka saba - CDI da JAX-RS. Babu buƙatar koyon sabon abu idan kun yi aiki tare da CDI da JAX-RS a baya, ba shakka.

Aiki tare da database

Hibernate da daidaitattun bayanan JPA don ƙungiyoyi ana amfani da su. Kamar yadda yake tare da masu sarrafa REST, kuna buƙatar rubuta ƙaramar lamba. Ya isa ya nuna masu dogara a cikin fayil ɗin taro, ƙara bayani @Entity da kuma saita tushen bayanai a cikin aikace-aikacen.properties.

Duka. Babu masana'antar zaman, persistence.xml ko wasu fayilolin sabis. Muna rubuta lambar da ake buƙata kawai. Koyaya, idan ya cancanta, zaku iya ƙirƙirar fayil na persistence.xml kuma ku daidaita layin ORM da kyau.

Quarkus yana goyan bayan caching na ƙungiyoyi, tarin don alaƙa ɗaya zuwa da yawa, da tambayoyi. Da farko kallo yana da kyau, amma yana da na gida caching, don kumburin Kubernetes guda ɗaya. Wadancan. Ba a daidaita caches na nodes daban-daban da juna. Ina fatan wannan na ɗan lokaci ne.

Asynchronous code kisa

Kamar yadda aka ambata a sama, Quarkus kuma yana goyan bayan salon shirye-shirye masu amsawa. Ana iya rubuta lambar aikace-aikacen da ta gabata ta wata sigar daban.

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

Hakanan ana iya canza lambar asynchronous zuwa sabis ɗin, sakamakon zai kasance iri ɗaya.

Gwaji

Ana iya rubuta jarrabawar aikace-aikacen Quarkus a cikin JUnit4 ko JUnit5. A ƙasa akwai gwajin misali don ƙarshen ƙarshen, an rubuta shi ta amfani da RestAssured, amma ana iya amfani da wani tsarin:

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

Bayanin @QuarkusTest yana ba ku umarnin gudanar da aikace-aikacen kafin gudanar da gwaje-gwaje. Sauran lambar sananne ce ga duk masu haɓakawa.

takamaiman aikace-aikacen dandamali

Tunda an haɗa Quarkus tare da GraalVM, tabbas yana yiwuwa a samar da takamaiman lambar dandali. Don yin wannan, kuna buƙatar shigar da GraalVM kuma saka madaidaicin yanayin GRAALVM_HOME. Bugu da kari yi rijistar bayanin martaba don taro kuma saka shi lokacin gina aikace-aikacen:

mvn package -Pnative

Abin sha'awa, ana iya gwada aikace-aikacen da aka samar. Kuma wannan yana da mahimmanci saboda aiwatar da lambar asali na iya bambanta da kisa akan JVM. Bayanin @SubstrateTest yana gudanar da takamaiman lambar aikace-aikacen dandamali. Sake amfani da lambar gwajin data kasance ana iya yin ta ta amfani da gado; sakamakon haka, lambar don gwada aikace-aikacen da ke dogaro da dandamali zai yi kama da haka:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Za a iya tattara hoton da aka ƙirƙira a cikin Docker kuma a gudanar da shi a Kubernetes ko OpenShift, wanda aka bayyana dalla-dalla a ciki umarnin.

Kayan aiki

Ana iya amfani da tsarin Quarkus tare da Maven da Gradle. Maven yana da cikakken goyon baya, sabanin Gradle. Abin takaici, a halin yanzu Gradle baya goyan bayan samar da aikin fanko; akwai cikakkun bayanai akan gidan yanar gizon littafin rubutu.

Karin bayani

Quarkus wani tsari ne mai iya wucewa. A halin yanzu akwai oda 40 kari, wanda ke ƙara ayyuka daban-daban - daga tallafi Akwatin DI na bazara и Apache Rakumi kafin shiga da buga awo don gudanar da ayyuka. Kuma an riga an sami kari don tallafawa aikace-aikacen rubutu a Kotlin, ban da Java.

ƙarshe

A ganina, Quarkus ya yi daidai da yanayin lokacin. Ci gaban lambar baya yana zama mai sauƙi da sauƙi, kuma wannan tsarin yana ƙara sauƙaƙawa da haɓaka haɓaka sabis ta ƙara tallafi na asali don Docker da Kubernetes. Babban ƙari shine ginanniyar goyon baya ga GraalVM da kuma samar da hotuna masu dogaro da dandamali, wanda ke ba da damar sabis don farawa da gaske da sauri da ɗaukar sararin ƙwaƙwalwar ajiya. Kuma wannan yana da matukar mahimmanci a lokacin mu na sha'awar ɗimbin yawa don microservices da gine-gine marasa uwar garken.

Shafin hukuma - kwarkus.io. Misalan ayyukan don farawa mai sauri sun riga sun kasance akan su GitHub.

source: www.habr.com

Add a comment