
Úvod
Dňa 7. marca spoločnosť RedHat (on čoskoro — IBM) nový framework — . Podľa slov vývojárov je tento framework založený na GraalVM a OpenJDK HotSpot a je určený pre Kubernetes. Stack Quarkus obsahuje: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus a ďalšie.
Cieľom vytvorenia je urobiť z Java poprednú platformu pre nasadenie v Kubernetes a vývoj serverless aplikácií, poskytujúc vývojárom jednotný prístup k vývoju ako v reaktívnom, tak aj v imperatívnom štýle.
Ak sa pozrieme na kategorizáciu frameworkov, Quarkus je niekde medzi „Aggregátormi/Kódom generátormi“ a „Vysokou úrovňou fullstack frameworkami“. Je to už viac ako agregátor, ale ani sa to nedotýka full-stack, pretože je zamerané na vývoj backendu.
Sľubuje sa veľmi vysoká rýchlosť spustenia aplikácie a nízka spotreba pamäte. Tu sú údaje zo stránky vývojárov:
Čas od spustenia po prvú odpoveď (s):
Konfigurácia
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Tradičný cloud native stack*
4.3
9.5
Spotreba pamäte (Mb):
Konfigurácia
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Tradičný cloud native stack*
140
218
Pôsobivé, však?
*Informácie o tomto stacku technológií som nenašiel, možno predpokladať, že ide o nejaký Spring Boot s doplnkovou výbavou.
Hello World!
Najjednoduchšia aplikácia napísaná na Quarkus bude vyzerať takto:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}Je to v podstate jedna trieda a to stačí! Aplikáciu môžete spustiť pomocou Maven v režime vývoja:
mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
helloRozdiel od bežnej aplikácie — žiadna trieda Application! Quarkus podporuje hot reload, takže môžete zmeniť aplikáciu bez reštartovania, čím sa vývoj stáva ešte rýchlejším.
Čo ďalej? Môžete pridať službu do kontroléra pomocou anotácie . Kód služby:
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}Kontrolér:
@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!Všimnite si, že v Quarkus sú použité štandardné anotácie z známych frameworkov — CDI a JAX-RS. Nič nové sa nemusíte učiť, ak ste predtým pracovali s CDI a JAX-RS.
Práca s databázou
Používa sa Hibernate a štandardné JPA anotácie pre entity. Rovnako ako v prípade REST kontrolérov je potrebné napísať minimálne množstvo kódu. Stačí uviesť závislosti v súboru na zostavenie a pridať anotácie. @Entity a nakonfigurovať datasource v application.properties.
Všetko. Žiadne sessionFactory, persistence.xml a iné servisné súbory. Píšeme iba ten kód, ktorý je potrebný. Avšak, ak je to potrebné, môžeme vytvoriť súbor persistence.xml a podrobnejšie nakonfigurovať ORM vrstvu.
Quarkus podporuje cachovanie entít, kolekcií pre vzťahy jeden-k-mnohým, ako aj dopytov. Na prvý pohľad to vyzerá skvele, ale to lokálne cachovanie, pre jeden uzol Kubernetes. T.j. cache rôznych uzlov nie sú medzi sebou synchronizované. Dúfam, že je to dočasné.
Asynchrónne vykonávanie kódu
Ako bolo uvedené vyššie, Quarkus podporuje aj reaktívny štýl programovania. Kód predchádzajúcej aplikácie možno zapísať iným spôsobom.
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/{name}")
public CompletionStage greeting(@PathParam("name") String name) {
return CompletableFuture.supplyAsync(() -> {
return "Hello " + name + "!";
});
}
}Asynchrónny kód je možné presunúť aj do služby, výsledok bude rovnaký.
Testovanie
Testy pre Quarkus aplikácie možno písať v JUnit4 alebo JUnit5. Nižšie je uvedený príklad testu pre endpoint, bol napísaný pomocou RestAssured, ale možno použiť aj iný rámec:
@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 + "!"));
}
}Anotácia @QuarkusTest predpisuje spustiť aplikáciu predtým, ako sa spustia testy. Inak ide o kód známy všetkým vývojárom.
Platformovo závislá aplikácia
Keďže je Quarkus úzko integrovaný s GraalVM, určite je možné generovať platformovo závislý kód. Na to je potrebné nainštalovať GraalVM a nastaviť premennú prostredia GRAALVM_HOME. Potom a uviesť ho pri zostavení aplikácie:
mvn package -PnativeZaujímavé je, že vygenerovanú aplikáciu je možné otestovať. A to je dôležité, pretože vykonávanie „natívneho“ kódu sa môže líšiť od vykonávania na JVM. Annotation @SubstrateTest spúšťa platformovo závislý kód aplikácie. Znovupoužitie existujúceho testovacieho kódu je možné pomocou dedenia, výsledný kód pre testovanie platformovo závislej aplikácie bude vyzerať takto:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}Vygenerovaný obraz je možné zabaliť do Dockeru a spúšťať v Kubernetes alebo OpenShift, podrobnosti sú opísané v .
Nástroj
Rámec Quarkus je možné používať s Maven a Gradle. Maven sa plne podporuje, na rozdiel od Gradle. Našťastie, v súčasnosti Gradle nepodporuje generovanie prázdneho projektu, na stránke sú podrobné .
Rozšírenia
Quarkus je rozšíriteľný rámec. V súčasnosti existuje približne , ktoré pridávajú rôznu funkcionalitu – od podpory a až po logovanie a publikovanie metrík pre bežiace služby. A už existuje rozšírenie na podporu písania aplikácií v jazyku Kotlin, okrem Javy.
Záver
Podľa môjho názoru je Quarkus určite v súlade s trendmi doby. Vývoj backendového kódu sa stáva čoraz jednoduchším a tento rámec ešte viac zjednodušuje a urýchľuje vývoj služieb, pričom pridáva „natívnu“ podporu Dockeru a Kubernetes. Obrovským plusom je zabudovaná podpora GraalVM a generovania platformovo závislých obrazov, čo umožňuje vytvárať služby, ktoré rýchlo štartujú a zaberajú málo miesta v pamäti. A to je v čase masového záujmu o mikroslužby a serverles architektúru veľmi dôležité.
Oficiálna webová stránka – . Príklady projektov na rýchly štart sú už k dispozícii na .
Zdroj: habr.com
