Quarkus ni Java ya hali ya juu zaidi. Muhtasari mfupi wa mfumo

Quarkus ni Java ya hali ya juu zaidi. Muhtasari mfupi wa mfumo

Utangulizi

Mnamo Machi XNUMX, RedHat (hivi karibuni IBM) imewasilishwa mfumo mpya - quarcus. Kulingana na wasanidi programu, mfumo huu unatokana na GraalVM na OpenJDK HotSpot na umeundwa kwa ajili ya Kubernetes. Mkusanyiko wa Quarkus ni pamoja na: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus na wengine.

Lengo ni kufanya Java kuwa jukwaa linaloongoza kwa uwekaji wa Kubernetes na ukuzaji wa programu bila seva, kuwapa wasanidi programu mbinu ya umoja ya maendeleo katika mitindo tendaji na ya lazima.

Ukiangalia hii uainishaji wa mifumo, kisha Quarkus iko mahali fulani kati ya "Aggregators/Jenereta za Misimbo" na "Mifumo ya kiwango cha juu cha safu nzima". Hii tayari ni zaidi ya kijumlishi, lakini haifikii rundo kamili, kwa sababu... iliyoundwa kwa ajili ya maendeleo ya nyuma.

Kasi ya juu sana ya uzinduzi wa maombi na matumizi ya chini ya kumbukumbu yanaahidiwa. Hapa kuna data kutoka kwa wavuti ya msanidi programu:

Muda kutoka mwanzo hadi majibu ya kwanza:

Usanidi
WALIOBAKI
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Rafu ya Asili ya Wingu*
4.3
9.5

Matumizi ya kumbukumbu (Mb):

Usanidi
WALIOBAKI
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Rafu ya Asili ya Wingu*
140
218

Inavutia, sivyo?

*Sikupata taarifa yoyote kuhusu mrundikano huu wa teknolojia, tunaweza kudhani kuwa hii ni aina fulani ya Spring Boot iliyo na vifaa vya ziada vya mwili..

Salamu, Dunia!

Programu rahisi zaidi iliyoandikwa katika Quarkus ingeonekana kama hii:

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

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

Ni darasa moja na inatosha! Unaweza kuendesha programu kwa kutumia Maven katika hali ya ukuzaji:

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

Tofauti kutoka kwa programu ya kawaida ni kwamba hakuna darasa la Maombi! Quarkus inasaidia upakiaji upya wa moto, kwa hivyo unaweza kubadilisha programu yako bila kuiwasha tena, na kufanya maendeleo kuwa haraka zaidi.

Nini kinafuata? Unaweza kuongeza huduma kwa kidhibiti kwa kutumia kidokezo Sukuma. Msimbo wa huduma:

@ApplicationScoped
public class GreetingService {

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

Kidhibiti:

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

Kumbuka kwamba Quarkus hutumia maelezo ya kawaida kutoka kwa mifumo inayojulikana - CDI na JAX-RS. Hakuna haja ya kujifunza chochote kipya ikiwa umefanya kazi na CDI na JAX-RS hapo awali, bila shaka.

Kufanya kazi na hifadhidata

Hibernate na ufafanuzi wa kawaida wa JPA kwa vyombo hutumiwa. Kama ilivyo kwa vidhibiti vya REST, unahitaji kuandika kiwango cha chini cha msimbo. Inatosha kuonyesha utegemezi katika faili ya kusanyiko, ongeza maelezo @Entity na usanidi chanzo cha data katika application.properties.

Wote. Hakuna sessionFactory, persistence.xml au faili nyingine za huduma. Tunaandika msimbo unaohitajika tu. Hata hivyo, ikiwa ni lazima, unaweza kuunda faili ya persistence.xml na kusanidi safu ya ORM vizuri zaidi.

Quarkus inasaidia uakibishaji wa huluki, mikusanyiko ya uhusiano wa moja hadi nyingi, na hoja. Kwa mtazamo wa kwanza inaonekana nzuri, lakini ni mitaa caching, kwa nodi moja ya Kubernetes. Wale. Cache za nodi tofauti hazijasawazishwa na kila mmoja. Natumai hii ni ya muda.

Utekelezaji wa nambari isiyolingana

Kama ilivyoelezwa hapo juu, Quarkus pia inasaidia mtindo tendaji wa programu. Nambari ya programu iliyotangulia inaweza kuandikwa kwa fomu tofauti.

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

Nambari ya Asynchronous pia inaweza kuhamishiwa kwenye huduma, matokeo yatakuwa sawa.

Upimaji

Majaribio ya maombi ya Quarkus yanaweza kuandikwa katika JUnit4 au JUnit5. Ifuatayo ni mfano wa jaribio la mwisho, imeandikwa kwa kutumia RestAssured, lakini mfumo mwingine unaweza kutumika:

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

Ufafanuzi wa @QuarkusTest hukuelekeza kuendesha programu kabla ya kufanya majaribio. Mengine ni msimbo unaojulikana kwa watengenezaji wote.

Utumizi mahususi wa jukwaa

Kwa kuwa Quarkus imeunganishwa vizuri na GraalVM, bila shaka inawezekana kutoa msimbo mahususi wa jukwaa. Ili kufanya hivyo, unahitaji kusakinisha GraalVM na kutaja utofauti wa mazingira wa GRAALVM_HOME. Zaidi sajili wasifu kwa mkusanyiko na ueleze wakati wa kuunda programu:

mvn package -Pnative

Inafurahisha, programu inayozalishwa inaweza kujaribiwa. Na hii ni muhimu kwa sababu utekelezaji wa nambari ya asili inaweza kutofautiana na utekelezaji kwenye JVM. Ufafanuzi wa @SubstrateTest huendesha msimbo wa programu mahususi wa jukwaa. Kutumia tena nambari ya jaribio iliyopo inaweza kufanywa kwa kutumia urithi; kwa hivyo, nambari ya kujaribu programu inayotegemea jukwaa itaonekana kama hii:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Picha inayotokana inaweza kuwekwa kwenye Docker na kuendeshwa katika Kubernetes au OpenShift, iliyoelezwa kwa undani ndani maelekezo.

Chombo

Mfumo wa Quarkus unaweza kutumika na Maven na Gradle. Maven inaungwa mkono kikamilifu, tofauti na Gradle. Kwa bahati mbaya, kwa sasa Gradle haiungi mkono kutoa mradi tupu; kuna habari ya kina kwenye wavuti kitabu cha maandishi.

Viongezeo

Quarkus ni mfumo unaopanuliwa. Hivi sasa kuna agizo 40 viendelezi, ambayo huongeza utendaji mbalimbali - kutoka kwa usaidizi Chombo cha DI cha spring ΠΈ Ngamia wa Apache kabla ya kuingia na kuchapisha vipimo vya huduma zinazoendeshwa. Na tayari kuna ugani wa kusaidia kuandika maombi katika Kotlin, pamoja na Java.

Hitimisho

Kwa maoni yangu, Quarkus inalingana kabisa na mwenendo wa wakati huo. Uundaji wa msimbo wa nyuma unakuwa rahisi na rahisi, na mfumo huu hurahisisha zaidi na kuharakisha utayarishaji wa huduma kwa kuongeza usaidizi asilia kwa Docker na Kubernetes. Faida kubwa ni usaidizi uliojengewa ndani wa GraalVM na utengenezaji wa picha zinazotegemea jukwaa, ambayo inaruhusu huduma kuanza haraka sana na kuchukua nafasi ndogo ya kumbukumbu. Na hii ni muhimu sana katika wakati wetu wa shauku kubwa kwa huduma ndogo na usanifu usio na seva.

Tovuti rasmi - quarkus.io. Mifano ya miradi ya kuanza haraka tayari inapatikana GitHub.

Chanzo: mapenzi.com

Kuongeza maoni