Quarkus ndeye supersonic subatomic Java. Muchidimbu muchidimbu chechimiro

Quarkus ndeye supersonic subatomic Java. Muchidimbu muchidimbu chechimiro

Nhanganyaya

Musi waKurume 7, RedHat (munguva pfupi ichava IBM) yakaunzwa chimiro chitsva - quarkus. Sekureva kwevagadziri, chimiro ichi chakavakirwa paGraalVM uye OpenJDK HotSpot uye yakagadzirirwa Kubernetes. Iyo Quarkus stack inosanganisira: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus nevamwe.

Chinangwa chekugadzira ndechekuita Java iyo inotungamira chikuva cheKubernetes kuendesa uye serverless application kusimudzira, ichipa vanogadzira nzira yakabatana kune ese ari maviri anoshanda uye akakosha kusimudzira.

Kana iwe ukatarisa izvi kupatsanurwa kwemafuremu, ipapo Quarkus iri pakati pe "Aggregators/Code Generators" uye "High-level fullstack frameworks". Iyo yatove yakawanda kupfuura aggregator, asi haisviki yakazara-stack, nekuti yakatarisana nekusimudzira kumashure.

Chikumbiro chakavimbiswa kuve nechakanyanya kumhanya kwekutanga uye yakaderera ndangariro kushandiswa. Heino data kubva pawebhusaiti yemugadziri:

Nguva kubva pakutanga kusvika yekutanga mhinduro (sec):

Kugadziriswa
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Traditional Cloud Native Stack*
4.3
9.5

Memory kushandiswa (Mb):

Kugadziriswa
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Traditional Cloud Native Stack*
140
218

Zvinoshamisa, handizvo here?

*Ini handina kuwana chero ruzivo nezve iyi tekinoroji stack, saka ndinofungidzira kuti imhando yeChitubu Boot ine mamwe mabhero uye muridzo..

Mhoro Nyika!

Iyo yakapusa application yakanyorwa muQuarkus yaizotaridzika seizvi:

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

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

Iri chairo kirasi imwe uye ndizvozvo! Iwe unogona kumhanya iyo application uchishandisa Maven mune yekuvandudza maitiro:

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

Musiyano kubva kune yakajairwa application ndeyekuti hapana kirasi yekushandisa! Quarkus inotsigira kupisa kurodha, saka iwe unogona kushandura iyo application pasina kuitangazve, nekudaro ichiita budiriro inokurumidza.

Chii chinotevera? Iwe unogona kuwedzera sevhisi kune controller uchishandisa annotation Jekiseni. Kodhi yebasa:

@ApplicationScoped
public class GreetingService {

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

Controller:

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

Ziva kuti Quarkus inoshandisa akajairwa zvirevo kubva kune akajairwa masisitimu - CDI uye JAX-RS. Hapana chitsva chekudzidza, kana wakamboshanda neCDI neJAX-RS kare, hongu.

Kushanda ne database

Hibernate uye yakajairwa JPA zvirevo zvemasangano zvinoshandiswa. Sezvakaitika kune REST controllers, unofanirwa kunyora hushoma hwekodhi. Zvakakwana kutsanangura zvinotsamira mugungano faira, isa zvirevo @Entity uye gadzirisa iyo datasource mune application.properties.

Ndizvo. Hapana sessionFactory, persistence.xml kana mamwe mafaera esevhisi. Isu tinonyora chete kodhi inodiwa. Zvakadaro, kana zvichidikanwa, unogona kugadzira persistence.xml faira uye kugadzirisa ORM layer zvakanyanya.

Quarkus inotsigira caching yemasangano, kuunganidzwa kwehukama-kune-vakawanda, uye mibvunzo. Pakutanga kuona, izvi zvinotaridzika zvakanaka, asi zvakadaro local caching, yeimwe Kubernetes node. Ndiko kuti, ma cache emanode akasiyana haana kuwiriraniswa nemumwe. Ndinovimba kuti izvi ndezvenguva pfupi.

Asynchronous code execution

Sezvambotaurwa pamusoro, Quarkus inotsigirawo reactive programming style. Iko kodhi yekushandiswa kwekare inogona kunyorwa mune imwe fomu.

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

Asynchronous kodhi inogona zvakare kutamiswa kune sevhisi, mhedzisiro ichave yakafanana.

Kuedza

Miedzo yeQuarkus application inogona kunyorwa muJUnit4 kana JUnit5. Pazasi pane muenzaniso wekuyedzwa kwekugumisira, zvakanyorwa uchishandisa RestAssured, asi unogona kushandisa imwe hurongwa:

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

Iyo @QuarkusTest annotation inokuraira kuti umhanye application usati waita bvunzo. Zvikasadaro, iyo kodhi inozivikanwa kune vese vanogadzira.

Platform-inotsamira application

Sezvo Quarkus yakanyatsobatanidzwa neGraalVM, zvinogoneka kugadzira kodhi-yakatarwa kodhi. Kuti uite izvi, unofanirwa kuisa GraalVM uye tsanangura iyo GRAALVM_HOME nharaunda inosiyana. Zvimwe register profile for assembly uye tsanangura iyo paunenge uchigadzira application:

mvn package -Pnative

Sezvineiwo, iyo yakagadzirwa application inogona kuyedzwa. Uye izvi zvakakosha, nekuti kuitwa kweiyo "yenyika" kodhi inogona kusiyana nekuitwa paJVM. Iyo @SubstrateTest annotation inomhanya-inotsamira papuratifomu kodhi yekushandisa. Kushandisa zvakare iyo iripo bvunzo kodhi inogona kuitwa uchishandisa nhaka, semhedzisiro, iyo kodhi yekuyedza-inotsamira papuratifomu application ichaita seizvi:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Mufananidzo wakagadzirwa unogona kuiswa muDocker uye unomhanya muKubernetes kana OpenShift, sezvakatsanangurwa zvakadzama mu. mirayiridzo.

Zvishandiso

Iyo Quarkus framework inogona kushandiswa neMaven uye Gradle. Maven inotsigirwa zvizere, kusiyana neGradle. Nehurombo, Gradle parizvino haitsigire kugadzira purojekiti isina chinhu, kune yakadzama gwara pane saiti zvinyorwa.

Extensions

Quarkus chirongwa chinowedzera. Kune parizvino nezve 40 kuwedzera, iyo inowedzera kushanda kwakasiyana-siyana - kubva pakutsigirwa Spring DI mudziyo и Apache Camel kutema matanda uye kutsikisa metrics ekufambisa masevhisi. Uye panotova nekuwedzera kwekutsigira zvinyorwa zvekunyora muKotlin, kuwedzera kuJava.

mhedziso

Sekuona kwangu, Quarkus inonyatso kuenderana nemaitiro enguva yacho. Backend kodhi kuvandudza kuri kuita nyore uye nyore, uye iyi dhizaini inorerutsa uye nekumhanyisa kusimudzira sevhisi zvakatonyanya, kuwedzera "yekuzvarwa" rutsigiro rweDocker uye Kubernetes. Iyo yakakura yekuwedzera ndeye yakavakirwa-mukati rutsigiro rweGraalVM uye chizvarwa chepuratifomu-inotsamira mifananidzo, iyo inokutendera iwe kuti uite masevhisi anotanga nekukasira uye anotora ndangariro shoma. Uye izvi zvakanyanya kukosha munguva yedu yekufarira kwakawanda kwema microservices uye serverless architecture.

Webhusaiti yepamutemo - quarkus.io. Mienzaniso yemapurojekiti ekukurumidza kutanga atobatidzwa GitHub.

Source: www.habr.com

Tenga inovimbika yekutambira kwemasaiti ane DDoS dziviriro, VPS VDS maseva 🔥 Tenga webhusaiti yakavimbika ine dziviriro yeDDoS, maseva eVPS VDS | ProHoster