Micronaut - czy pokona Springa?

Micronaut – czy pokona Springa?

Micronaut to framework, który powstał w 2018 roku. Od początku wzbudza duże zainteresowanie wśród programistów. I naturalne jest, że często porównuje się go do Spring Boota. Framework ten stworzyli programiści, którzy wcześniej napisali grooviowy framework Grails. Wzorowali się oni właśnie na Spring Bootcie. Micronaut nie jest jednak klonem Spring Boota, wręcz przeciwnie, wiele rzeczy jest rozwiązanych w nim zupełnie inaczej niż w Springu.

Czas uruchomienia aplikacji w Micronaut

Jedną z podstawowych różnic pomiędzy tymi frameworkami jest to, w jaki sposób Micronaut rozwiązuje kwestię tworzenia beanów. W Springu podczas uruchamiania aplikacji skanowane są klasy (oznaczone odpowiednimi adnotacjami), z których tworzone są następnie beany. Spring korzysta tutaj z refleksji, która z natury jest wolnym mechanizmem.

W Micronaucie zastosowano annotation procesor, który rozwiązuje te kwestie na poziomie kompilacji. Dzięki temu, czas uruchomienia aplikacji w Micronaucie jest zdecydowanie krótszy.

Uwaga: wykonując pewne zabiegi, możemy poprawić domyślne działanie Springa tak, że czas uruchomienia springowej aplikacji będzie dużo lepszy. Potrzeba tutaj skonfigurować odpowiednią bibliotekę (org.springframework:spring-context-indexer), która wygeneruję nam index beanów. Nie testowałem jednak tego rozwiązania i nie wiem o ile zabieg ten przyspiesza uruchamianie aplikacji w Springu.

Micronaut nie korzysta z refleksji, także zużycie pamięci jest trochę mniejsze. Nie musi on cachować informacji o beanach, które normalnie zbierane są przez refleksję.

 

Łatwe uruchamianie na GraalVm

GraalVm to uniwersalna maszyna wirtualna, powstała ona z myślą o jak najbardziej wydajnym uruchamianiu aplikacji. Micronaut od początku wspiera tę technologię, co jest moim zdaniem jego wielką zaletą. Problem jednak w tym, że sama technologia GraalVM nie jest jeszcze za bardzo popularna. Chociaż coraz więcej się o niej mówi, to nie jest jeszcze ona na tyle stabilna by używać jej w środowisku produkcyjnym.

Tutaj Spring nie dorównuje za bardzo Micronautowi, ze względu na swoją architekturę (wykorzystanie refleksji), trudno jest go uruchomić na GraalVM (trwają prace by dostosować Springa do tego rozwiązania – prawdopodobnie zostanie to poprawione w nadchodzącej wersji Springa 5.2).

Natywne Cloud Native (NATIVELY CLOUD NATIVE)

Micronaut został zbudowany z myślą o rozwiązaniach chmurowych. Zawiera takie komponenty jak: service discovery, integracje dla AWS i GCP, integracje dla Kubernates, load balancer po stronie klienta i wiele innych.

Spring, co prawda nie ma wbudowanych funkcjonalności Cloud Native, ale można to w łatwy sposób osiągnąć, korzystając ze Spring Cloud i innych zewnętrznych bibliotek. Fajnie, że Micronaut ma to wbudowane, ale jak dla mnie nie jest to krytyczne.

 

Serverless Functions

Szybki czas uruchamiania jak i dependency injection, które jest wykonywane podczas kompilacji, sprzyja użyciu Micronauta w środowiskach serverless (takich jak np AWS Lambda), które w ostatnich latach są coraz popularniejsze. W tych środowiskach płaci się bezpośrednio za czas wykonania danej funkcji, więc czas uruchomienia i zużycie pamięci jest tutaj krytyczne. Micronaut ma tutaj przewagę nad Springiem.

Chociaż Springa też daje się używać w środowiskach serverless, to wymaga to jednak dużo więcej uwagi i wiedzy na temat, jak pewne rzeczy działają w Springu. Optymalne dostosowanie aplikacji springowej do serverless jest na pewno bardziej czasochłonne niż w przypadku Micronauta.

 

Security w Micronaut

Micronaut podobnie jak Spring posiada moduł security. I chociaż z zewnątrz wszystko wygląda podobnie, to wydaje mi się, że w Micronautcie wszystko jest trochę prostsze. Jest też wbudowana obsługa Json Web Token, gdzie w Springu potrzeba trochę zachodu, żeby to uruchomić. Pisałem o tym w Spring Security i Json Web Token.

Nie miałem jeszcze za wiele czasu, żeby przyjrzeć się temu modułowi, ale wygląda obiecująco i na pewno zrobię to w najbliższym czasie.

 

Inne integracje

Micronaut ma całkiem sporo integracji do różnego rodzaju komponentów takich jaki: Kafka, RabbitMQ, Redis, MongoDb, Neo4J, Elasticsearch itp. Oczywiście, w tej kwestii trudno jest przebić Springa. Spring istniej na rynku już bardzo długo i w zasadzie posiada integracje do wszystkiego, z czym warto się integrować.

 

Podsumowanie

Micronaut to jeszcze stosunkowo młode rozwiązanie, ale wywołuje bardzo duże zainteresowanie. Pisałem o nim trochę w Trendy w świecie Javy 2020. Być może w najbliższych latach będzie doganiał Springa. A być może będzie dominował, zwłaszcza w microserwisach i w środowiskach serverless. Warto się z nim zapoznać chociażby po to, żeby zobaczyć jak pewne rzeczy zostały w nim rozwiązane.

 

Źródła:

https://micronaut.io/

https://micronaut.io/documentation.html

https://micronaut-projects.github.io/micronaut-security/latest/guide/index.html

https://github.com/spring-projects/spring-framework/wiki/GraalVM-native-image-support

https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start—Spring-Boot

 

Mini kurs testy jednostkowe

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *