Quarkus ke Java ea supersonic subatomic. Kakaretso e khuts'oane ea moralo

Quarkus ke Java ea supersonic subatomic. Kakaretso e khuts'oane ea moralo

Selelekela

Ka la XNUMX Hlakubele, RedHat (haufinyane IBM) hlahisoa moralo o mocha - quarkus. Ho latela bahlahisi, moralo ona o thehiloe ho GraalVM le OpenJDK HotSpot mme o etselitsoe Kubernetes. Quarkus stack e kenyelletsa: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus le tse ling.

Sepheo ke ho etsa Java sethala se etelletseng pele bakeng sa phepelo ea Kubernetes le nts'etsopele ea ts'ebeliso e se nang seva, ho fa ba ntlafatsang mokhoa o kopaneng oa nts'etsopele ka mekhoa e sebetsang le ea bohlokoa.

Haeba u sheba sena tlhophiso ea meralo, ebe Quarkus e kae kae pakeng tsa "Aggregators/Code Generators" le "High-level fullstack frameworks". Sena se se se feta aggregator, empa ha se fihlelle stack e felletseng, hobane ... e etselitsoeng ntlafatso ea morao-rao.

Lebelo le phahameng haholo la ho qala ts'ebeliso le ts'ebeliso e tlase ea memori e ts'episitsoe. Lintlha tse tsoang sebakeng sa marang-rang sa moqapi ke tsena:

Nako ho tloha qalong ho isa ho karabelo ea pele:

Moralo
LULA
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Traditional Cloud Native Stack*
4.3
9.5

Tšebeliso ea memori (Mb):

Moralo
LULA
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Traditional Cloud Native Stack*
140
218

E khahla, na ha ho joalo?

*Ha kea fumana tlhahisoleseling efe kapa efe ka stack ena ea theknoloji, re ka nahana hore ona ke mofuta o mong oa Spring Boot o nang le lisebelisoa tse ling tsa 'mele..

Lefatše Lumela!

Sesebelisoa se bonolo ka ho fetisisa se ngotsoeng ho Quarkus se ka shebahala tjena:

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

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

Ke sehlopha se le seng 'me ho lekane! U ka tsamaisa sesebelisoa u sebelisa Maven ka mokhoa oa nts'etsopele:

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

Phapang ho tsoa ho kopo e tloaelehileng ke hore ha ho na sehlopha sa Kopo! Quarkus e ts'ehetsa ho kenya hape ho chesang, kahoo o ka fetola sesebelisoa sa hau ntle le ho e qala hape, o etsa hore nts'etsopele e be kapele le ho feta.

Ho latela eng? O ka eketsa tshebeletso ho molaodi o sebedisa tlhaloso Ente. Khoutu ea litšebeletso:

@ApplicationScoped
public class GreetingService {

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

Molaoli:

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

Hlokomela hore Quarkus e sebelisa litlhaloso tse tloaelehileng ho tsoa ho meralo e tloaelehileng - CDI le JAX-RS. Ha ho na tlhoko ea ho ithuta eng kapa eng e ncha haeba u kile ua sebetsa le CDI le JAX-RS pele, ehlile.

Ho sebetsa le database

Ho sebelisoa litlhaloso tsa Hibernate le JPA tse tloaelehileng bakeng sa mekhatlo. Joalo ka balaoli ba REST, o hloka ho ngola bonyane khoutu. Ho lekane ho bontša ho itšetleha ka faele ea kopano, eketsa litlhaloso @Entity le ho lokisa datasource ho tshebediso.properties.

Tsohle. Ha ho sessionFactory, persistence.xml kapa lifaele tse ling tsa tšebeletso. Re ngola khoutu feela e hlokahalang. Leha ho le joalo, ha ho hlokahala, o ka etsa faele ea persistence.xml le ho lokisa lera la ORM hantle haholoanyane.

Quarkus e ts'ehetsa caching ea mekhatlo, likoleke bakeng sa likamano tse ngata ho isa ho tse ngata, le lipotso. Ha u sheba ka lekhetlo la pele e shebahala e le ntle, empa ho joalo sebakeng caching, bakeng sa node e le 'ngoe ea Kubernetes. Tseo. Li-cache tsa li-node tse fapaneng ha li lumellane le tse ling. Ke tšepa hore sena ke sa nakoana.

Phethahatso ea khoutu ea Asynchronous

Joalokaha ho boletsoe ka holimo, Quarkus e boetse e tšehetsa mokhoa o sebetsang oa lenaneo. Khoutu ea kopo e fetileng e ka ngoloa ka mokhoa o fapaneng.

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

Khoutu ea Asynchronous e ka fetisetsoa ts'ebeletso, sephetho se tla tšoana.

Teko

Liteko tsa lits'ebetso tsa Quarkus li ka ngoloa ho JUnit4 kapa JUnit5. Ka tlase ke tlhahlobo ea mohlala bakeng sa pheletso, e ngotsoe ho sebelisoa RestAssured, empa moralo o mong o ka sebelisoa:

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

Tlhaloso ea @QuarkusTest e u laela ho sebelisa sesebelisoa pele u etsa liteko. Tse ling kaofela ke khoutu e tsebahalang ho bohle ba ntlafatsang.

Sesebelisoa se ikhethileng sethaleng

Kaha Quarkus e kopantsoe ka thata le GraalVM, hoa khoneha ho hlahisa khoutu e khethehileng ea sethaleng. Ho etsa sena, o hloka ho kenya GraalVM mme o hlakise sebopeho sa tikoloho sa GRAALVM_HOME. Ho feta moo ngodisa profil bakeng sa kopano 'me u e hlalose ha u theha kopo:

mvn package -Pnative

Ho khahlisang, kopo e hlahisitsoeng e ka lekoa. 'Me sena se bohlokoa hobane ts'ebetso ea khoutu ea lehae e ka fapana le ho etsoa ho JVM. Tlhaloso ea @SubstrateTest e na le khoutu ea ts'ebeliso e ikhethileng sethaleng. Ho sebelisa hape khoutu ea tlhahlobo e teng ho ka etsoa ho sebelisoa lefa; ka lebaka leo, khoutu ea ho leka ts'ebeliso e itšetlehileng ka sethala e tla shebahala tjena:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Setšoantšo se hlahisitsoeng se ka kenngoa ho Docker 'me sa tsamaisoa ho Kubernetes kapa OpenShift, se hlalositsoeng ka botlalo ho litaelo.

Lebokose la lithulusi

Moralo oa Quarkus o ka sebelisoa le Maven le Gradle. Maven e tšehetsoa ka botlalo, ho fapana le Gradle. Ka bomalimabe, hajoale Gradle ha e tšehetse ho hlahisa morero o se nang letho; ho na le lintlha tse qaqileng webosaeteng sengoloa.

Extensions

Quarkus ke moralo o atolositsoeng. Hona joale ho na le taelo 40 katoloso, tse eketsang ts'ebetso e fapaneng - ho tsoa ho tšehetso Setshelo sa DI sa selemo и Kamele ea Apache pele o rema lifate le ho phatlalatsa metrics bakeng sa lits'ebeletso tse sebetsang. 'Me ho se ho ntse ho e-na le katoloso ea ho tšehetsa likopo tsa ho ngola Kotlin, ho phaella ho Java.

fihlela qeto e

Ka maikutlo a ka, Quarkus e lumellana hantle le mekhoa ea nako eo. Nts'etsopele ea khoutu ea morao-rao e ntse e ba bonolo, 'me moralo ona o nolofatsa le ho potlakisa nts'etsopele ea lits'ebeletso ka ho eketsa tšehetso ea lehae bakeng sa Docker le Kubernetes. Keketso e kholo ke ts'ehetso e hahelletsoeng bakeng sa GraalVM le tlhahiso ea litšoantšo tse itšetlehileng ka sethala, tse lumellang lits'ebeletso ho qala kapele le ho nka sebaka se senyenyane sa mohopolo. 'Me sena se bohlokoa haholo mehleng ea rona ea takatso e kholo ea li-microservices le meaho e se nang seva.

Sebaka sa semmuso - quarkus.io. Mehlala ea merero ea ho qala kapele e se e fumaneha ka GitHub.

Source: www.habr.com

Eketsa ka tlhaloso