Quarkus kolejny nowy framework javowy

Quarkus – kolejny nowy framework Javowy

Quarkus to po Micronaucie kolejny z nowych frameworków Javowych, któremu warto się przyjrzeć. W poprzednim artykule „Micronaut – czy pokona Springa?” opisywałem zalety Micronauta w porównaniu do Springa. Zobaczmy jak wypadnie Quarkus w porównaniu do tych dwóch frameworków.

Container First

Quarkus został oparty na idei Container First co oznacza, że tworzono go tak, by miał jak najlepsze parametry takie jak: czas uruchamiania i zużycie pamięci oraz by generował jak najmniejszy obraz dockerowy. Jest także przystosowany do kompilacji do obrazu natywnego (Native Image). Dzięki czemu aplikacja zbudowana na tym frameworku może uruchamiać się bardzo szybko.

Framework ten powstał w oparciu o Eclipse Microprofile i standardy, które są w nim zawarte min.: JAX-RS(Java API for RESTful Web Services – standar do tworzenia REST API) i CDI(Contexts and Dependency Injection).

Zbudowany w oparciu o RestEasy (JAX_RS), a jeśli chodzi o CDI, to developerzy Quarkusa stworzyli własną implementację. Implementacja ta wstrzykuje beany podczas kompilacji i nie korzysta z refleksji, tylko z procesora adnotacji. Micronaut ma podobne rozwiązanie.

 

Czas uruchomienia aplikacji z Quarkus

Tak samo jak Micronaut, Quarkus nie korzysta z refleksji, a wstrzykiwanie zależności podczas kompilacji sprawia, że aplikacja uruchamia się bardzo szybko. Czyli około kilka sekund. I jest to porównywalne z wynikami Micronauta. Po skompilowaniu do obrazu natywnego uruchamia się jeszcze szybciej dosłownie w milisekundy.

Oczywiście wszystkie te testy są przeprowadzane na małych aplikacjach demo, więc w zależności od wielkości aplikacji te wyniki mogą być różne.

 

GraalVM i Native Image

Poza Container First kolejna idea, która przyświecała twórcom Quarkusa to uruchamianie go na GraalVm. Quarkus może być także kompilowany do obrazu natywnego. Przy czym twórcy obiecują, że podstawowa aplikacja restowa skompilowana do native image zajmie ok 12MB RAMu, a wraz z funkcjonalnością CRUD ok. 28MB. Podobna aplikacja Springowa może zająć nawet kilkaset mega bajtów.

Oczywiście, trudno jest to porównywać bez szczegółowych testów.

 

Live reload

Jedną z bardzo fajnych funkcji Quarkusa jest automatyczne przeładowywanie zmienianych klas. Jeśli mamy odpaloną aplikację w trybie developerskim, wystarczy, że zapiszemy zmienioną klasę i Quarkus sam ją przeładuje bez konieczności restartu.

Jest to dosyć wygodna funkcjonalność i pozwala trochę przyspieszyć pracę z aplikacją. Zwłaszcza jeżeli chcemy trochę poeksperymentować z kodem.

 

Zunifikowane podejście do tworzenia reaktywnych i niereaktywnych usług

Podobnie jak w Springu i Micronaucie, możemy zdefiniować reaktywną lub niereaktywną usługę korzystając z tych samych adnotacji. Jedyne co musimy zmienić to typ zwracanych danych. Np. zamiast zwracania Stringa będziemy zwracać Publisher<String>. Wszystkie trzy frameworki działają tutaj bardzo podobnie. W Spring Framework 5 można osiągnąć tą samą funkcjonalność korzystają z typów reaktywnych takich jak Mono czy Flux.

W Micronaucie z kolei, możemy skorzystać z Single, ObservablePublisher czy CompletableFuture.

 

Czy Quarkus nadaje się do serverless?

Oczywiście i tutaj możemy zastosować Quarkusa. Można go odpalać i na AWS Lambda i na Azure Functions. Wszystko jest możliwe dzięki szybkiemu uruchamianiu i małemu zużyciu pamięci.

 

Integracje

Framework ten posiada też całkiem sporo integracji, które są wprowadzane poprzez system rozszerzeń. Poza tym każdy może napisać własne rozszerzenie. Jest do tego odpowiedni poradnik, który znajdziesz tutaj. A listę dostępnych rozszerzeń można sprawdzić tutaj.

quarkus extensions

 

Podsumowanie

Quarkus wydaje się być ciekawą alternatywą dla Micronauta i Springa. Chociaż dla developerów programujących na co dzień w Springu może wydać się trochę „inny” i na pewno łatwiej będzie im przesiąść się na Micronauta.

Kolejna rzecz, która trochę mnie odstrasza to Microprofile i przywiązanie do standardów, które rozwijają się (ciągle) bardzo powoli i jak na 2020 rok są nadal bardzo „kwadratowe”. Jeśli jakieś nowe rozwiązania są wprowadzane np. w Springu, to widzę, że z wersji na wersję stają się one bardziej przyjazne developerom. I to właśnie tak bardzo podoba mi się w Springu i Spring Bootcie – z każdą wersją jest lepszy. Też chyba podobnie jest z Micronautem, wydaje się być bardzo przyjazny developerom (chociaż jego nie śledzę aż tak długo). Być może trzeba pobawić się Quarkusem trochę dłużej, żeby bardziej go polubić ?

 

Źródła:

https://quarkus.io

https://quarkus.io/guides/writing-extensions

https://code.quarkus.io

https://microprofile.io

https://resteasy.github.io

 

Mateusz Dąbrowski

Cześć jestem Mateusz, zajmuję się programowaniem już ponad 12 lat z czego ponad 8 programuję w Javie. Zapraszam Cię do lektury mojego bloga. Możesz przeczytać więcej o mnie >>TUTAJ<<