Software

Micronaut

Un framework a prova di microservizio

Francesca Riddone Maggio, 2021
Micronaut

Micronaut si definisce così:

“A modern, JVM-based, full-stack framework for building modular, easily testable microservice and serverless applications”.

Micronaut è quindi un full-stack framework JVM-based disegnato appositamente per creare microservizi e app serverless in modo facile e veloce.

Si tratta di un framework “moderno”, infatti ha solo qualche anno di vita ed è stato presentato durante il Greach 2018 dallo stesso team di Object Computing (OCI) che ha sviluppato il framework Grails.

Micronaut permette di costruire app estremamente modulari grazie appunto alla presenza di moduli in cui sono contenute molte funzionalità core (ad esempio esiste un modulo per la Security, un modulo per AWS, un modulo per l’utilizzo delle code RabbitMQ, etc).
Un altro aspetto legato alla modularità è senza dubbio il fatto che Micronaut supporta ben tre linguaggi differenti: Java, Groovy e Kotlin. È quindi possibile creare la propria applicazione un mattoncino alla volta, tenendo il più possibile disaccoppiate tra loro le varie scelte implementative.
Micronaut permette inoltre di scrivere test in modo facile e veloce. Questa caratteristica non è certo trascurabile data l’importanza della fase di test in un’architettura a microservizi, in cui è fondamentale gestire bene gli errori dato che più componenti devono cooperare.

 

Ma cosa cambia rispetto agli altri framework per microservizi?

Qualcuno a questo punto potrebbe chiedersi: ma non abbiamo già Spring e Spring Boot per costruire microservizi?
Questo senza dubbio è vero, Spring e Spring Boot sono dei buoni framework che si sono evoluti con il passare del tempo per supportare non solo lo sviluppo di app monolitiche ma anche quello di microservizi. Proprio in questo aspetto risiede il punto di forza di Micronaut: a differenza degli altri framework, è disegnato ad hoc per i microservizi e lo sviluppo serverless.

Micronaut non solo include le funzionalità relative ai microservizi offerte dagli altri framework, ma offre addirittura un miglioramento nella loro gestione e nel loro sviluppo. Inoltre, la presenza di moduli che contengono le funzionalità core permette di salvarsi dall’incubo delle dipendenze tipico dell’utilizzo di altri framework.

 

I punti di forza di Micronaut: performance ed efficienza

Un’importante novità in Micronaut riguarda l’uso della reflection, un meccanismo molto utilizzato da framework come Spring che necessita il caricamento ed il caching di tutti i costruttori, i metodi ed i campi: questo fa sì che la mole del codice del progetto impatti sia sulla quantità di memoria utilizzata a runtime sia sul tempo di startup dell’app. Micronaut non solo riduce l’utilizzo della reflection ma, utilizzando l’Annotation Processor, si occupa a tempo di compilazione di tutto ciò che gli altri framework fanno a runtime come: l’iniezione delle dipendenze, l’aspect-oriented-programming (AOP) e la gestione delle configurazioni. Tale scelta porta un’app Micronaut ad avere un tempo di startup molto basso, intorno al secondo, e ad utilizzare poca memoria a runtime. Inoltre, i JAR/WAR package creati con Micronaut hanno dimensioni molto contenute.

 

Altre feature rilevanti

Tra le feature più rilevanti offerte da Micronaut ci sono:

  • Scrittura di codice veloce e guidata: Micronaut promuove un modello di programmazione annotation-driven, che rende molto più veloce la scrittura del codice. Il successo e i consensi che questo framework sta riscontrando sono sicuramente in parte legati al fatto che è ben strutturato e guida il programmatore nello sviluppo.
  • Reattività e non-blocking capabilities: Micronaut supporta tutti i framework che implementano lo standard Reactive Stream, inclusi RxJava e Reactor. La reattività web-based non-blocking è resa possibile grazie all’utilizzo di Netty, un framework incentrato sulla comunicazione asincrona basata sull’utilizzo di eventi.
  • Cloud native feature: Micronaut offre tutte le funzionalità necessarie per la gestione di un microservizio in cloud come per esempio meccanismi di resilienza (retryables, fallback, circuit breakers), service discovery, client-side load balancing, tracciamento, ecc.
  • Servizi message-driven: Micronaut offre un’integrazione molto semplice e veloce con i principali sistemi di scambio di messaggi come Apache Kafka e RabbitMQ, basata spesso sull’utilizzo di semplici annotazioni e moduli appositi.
  • Facile interazione con altri servizi: Visto quanto è importante comunicare con altri servizi nell’ambito dei microservizi Micronaut ha semplificato notevolmente l’implementazione dell’interazione con servizi esterni lato client. Per fare ciò ha reso il codice da scrivere per consumare un servizio molto simile a quello per offrire un servizio.
  • Misurazione e monitoraggio delle performance: Data l’importanza di avere servizi con buone prestazioni Micronaut offre anche una buona libreria per controllare le performance dei servizi: Micronaut Micrometer.
  • Funzioni serverless: Micronaut fornisce supporto per lo sviluppo, il testing e il deploy di funzioni serverless. Queste funzioni possono essere indirizzate utilizzando un servizio di service discovery configurato (ad esempio Eureka o Kubernetes).
  • Documentazione delle API: Per quanto riguarda la documentazione delle API Micronaut crea automaticamente a tempo di compilazione un file YAML Swagger 2.x-compliant basandosi sulle annotazioni Micronaut presenti nel codice e sui Javadoc.

 

Ultime considerazioni

Il grafico qui sopra mostra il trend positivo delle ricerche su Google effettuate negli ultimi due anni in cui è presente il termine ‘micronaut’: si può vedere come il numero di ricerche sia in costante aumento. Micronaut si presenta infatti come un ottimo framework per costruire microservizi e va sicuramente preso in considerazione per sviluppi futuri.

Articoli correlati

Software

Articoli in evidenza

Approfondimenti

UNISCITI A NOI. INVIA LA TUA CANDIDATURA

Certimeter Group crede nei valori, nella passione e nella professionalità delle persone.