Isingeniso
NgoMashi XNUMX, i-RedHat (ngokushesha i-IBM)
Umgomo uwukwenza i-Java ibe inkundla ehamba phambili yokuthunyelwa kwe-Kubernetes kanye nokuthuthukiswa kwezinhlelo zokusebenza ezingenasiphakeli, ukuhlinzeka abathuthukisi ngendlela ebumbene yentuthuko kuzo zombili izitayela ezisebenzayo nezibalulekile.
Uma ubheka
Isivinini esikhulu kakhulu sokuqaliswa kwesicelo kanye nokusetshenziswa kwememori okuphansi kuyathenjiswa. Nansi idatha evela kuwebhusayithi yonjiniyela:
Isikhathi ukusuka ekuqaleni ukuya kumpendulo yokuqala:
Ukucushwa
I-REST
REST+JPA
I-Quarkus+GraalVM
0.014
0.055
I-Quarkus+OpenJDK
0.75
2.5
Isitaki Somdabu Samafu*
4.3
9.5
Ukusetshenziswa kwememori (Mb):
Ukucushwa
I-REST
REST+JPA
I-Quarkus+GraalVM
13
35
I-Quarkus+OpenJDK
74
130
Isitaki Somdabu Samafu*
140
218
Kuyahlaba umxhwele, akunjalo?
*Angizange ngithole noma yiluphi ulwazi mayelana nalesi sitaki sobuchwepheshe, singacabanga ukuthi lolu uhlobo oluthile lwe-Spring Boot enekhithi yomzimba eyengeziwe..
Sawubona Mhlaba!
Uhlelo lokusebenza olulula olubhalwe ku-Quarkus lungabukeka kanje:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Ikilasi elilodwa ngokoqobo futhi kwanele! Ungaqalisa uhlelo lokusebenza usebenzisa i-Maven kumodi yokuthuthukisa:
mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello
Umehluko kuhlelo lokusebenza olujwayelekile ukuthi alikho ikilasi Lohlelo! I-Quarkus isekela ukulayisha kabusha okushisayo, ukuze ukwazi ukushintsha uhlelo lwakho lokusebenza ngaphandle kokuluqala kabusha, okwenza intuthuko isheshe nakakhulu.
Yini elandelayo? Ungakwazi ukwengeza isevisi kusilawuli usebenzisa isichasiselo
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Isilawuli:
@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!
Qaphela ukuthi i-Quarkus isebenzisa izichasiselo ezijwayelekile ezivela kuzinhlaka ezijwayelekile - i-CDI ne-JAX-RS. Asikho isidingo sokufunda noma yini entsha uma uke wasebenza ne-CDI ne-JAX-RS ngaphambili, kunjalo.
Ukusebenza nge-database
I-Hibernate nezichasiselo ze-JPA ezijwayelekile zezinhlangano zisetshenziswa. Njengabalawuli be-REST, udinga ukubhala ikhodi encane. Kwanele ukukhombisa ukuncika kufayela lomhlangano, engeza izichasiselo @Entity
futhi ulungise umthombo wedatha ku-application.properties.
Konke. Awekho ama-sessionFactory, persistence.xml noma amanye amafayela wesevisi. Sibhala ikhodi edingekayo kuphela. Nokho, uma kudingeka, ungakha ifayela le-persistence.xml futhi ulungiselele isendlalelo se-ORM kahle kakhulu.
I-Quarkus isekela ukugcinwa kwesikhashana kwezinhlangano, amaqoqo obudlelwano obubodwa kuya kwabaningi, kanye nemibuzo. Ekuboneni kokuqala kubukeka kukuhle, kepha kunjalo wendawo ukulondoloza isikhashana, endaweni eyodwa ye-Kubernetes. Labo. Izingobo zomlando zamanodi ahlukene azivumelaniswa enye kwenye. Ngethemba ukuthi lokhu okwesikhashana.
Ukwenziwa kwekhodi engavumelaniyo
Njengoba kushiwo ngenhla, i-Quarkus iphinde isekele isitayela sokuhlela esisebenzayo. Ikhodi yesicelo esedlule ingabhalwa ngendlela ehlukile.
@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 + "!";
});
}
}
Ikhodi ye-Asynchronous nayo ingadluliselwa kusevisi, umphumela uzofana.
Ukuhlola
Ukuhlolwa kwezicelo ze-Quarkus kungabhalwa ngo-JUnit4 noma JUnit5. Ngezansi isibonelo sokuhlolwa kwendawo yokugcina, kubhalwe kusetshenziswa i-RestAssured, kodwa olunye uhlaka lungasetshenziswa:
@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 + "!"));
}
}
Isichasiselo se-@QuarkusTest siyala ukuthi usebenzise uhlelo ngaphambi kokwenza izivivinyo. Okusele ikhodi ejwayelekile kubo bonke onjiniyela.
Uhlelo lokusebenza oluqondene nenkundla
Njengoba i-Quarkus ihlanganiswe ngokuqinile ne-GraalVM, kungenzeka ngempela ukukhiqiza ikhodi eqondene nengxenyekazi. Ukuze wenze lokhu, udinga ukufaka i-GraalVM futhi ucacise i-GRAALVM_HOME imvelo eguquguqukayo. Ngokuqhubekayo
mvn package -Pnative
Kuyathakazelisa ukuthi uhlelo lokusebenza olukhiqiziwe lungahlolwa. Futhi lokhu kubalulekile ngoba ukwenziwa kwekhodi yomdabu kungase kuhluke ekusetshenzisweni ku-JVM. Isichasiselo se-@SubstrateTest sisebenzisa ikhodi yohlelo lokusebenza ethile. Ukusebenzisa kabusha ikhodi yokuhlola ekhona kungenziwa kusetshenziswa ifa; ngenxa yalokho, ikhodi yokuhlola uhlelo lokusebenza oluncike endaweni izobukeka kanje:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Isithombe esikhiqiziwe singapakishwa ku-Docker futhi sisebenze ku-Kubernetes noma i-OpenShift, echazwe ngokuningiliziwe ku
Ithuluzi
Uhlaka lwe-Quarkus lungasetshenziswa ne-Maven ne-Gradle. I-Maven isekelwa ngokugcwele, ngokungafani ne-Gradle. Ngeshwa, okwamanje i-Gradle ayikusekeli ukukhiqiza iphrojekthi engenalutho; kukhona imininingwane enemininingwane kuwebhusayithi
Izandiso
I-Quarkus iwuhlaka olunwebekayo. Okwamanje kune-oda
isiphetho
Ngokubona kwami, i-Quarkus ihambisana impela nemikhuba yangaleso sikhathi. Ukwakhiwa kwekhodi yasemuva kuba lula futhi kulula, futhi lolu hlaka lwenza kube lula futhi lusheshise ukuthuthukiswa kwesevisi ngokwengeza ukwesekwa komdabu kwe-Docker ne-Kubernetes. Ukuhlanganisa okukhulu ukwesekwa okwakhelwe ngaphakathi kwe-GraalVM kanye nokukhiqizwa kwezithombe ezincike endaweni, okuvumela amasevisi ukuthi aqale ngokushesha futhi athathe isikhala esincane senkumbulo. Futhi lokhu kubaluleke kakhulu esikhathini sethu sokushisekela okukhulu kwama-microservices kanye ne-serverless architecture.
Isayithi elisemthethweni -
Source: www.habr.com