Perché si è reso necessario passare dalle applicazioni monolitiche ai microservizi (MSA) e applicazioni cloud-native.
Poco performanti in ambienti dinamici:
Le applicazioni tradizionali, come quelle basate su Java
hanno tempi di avvio lunghi e dipendo da modelli come JIT e Garbage Collector, non adatti a sistemi dinamici.
JIT → just-in-time compiler Durante l’esecuzione del programma, prende il byte file e lo traduce in linguaggio nativo.
Garbage Collector Gestione automatica dell’allocazione e de-allocazione della memoria.
Scalabilità limitata:
up/down
): semplici ma con limiti di capacità e downtime.out/in
) complessa, con necessità di modifiche al software.Le operazioni di scale-in / scale-out, compromettono il warm-up delle applicazioni
Problemi di resilienza e gestione:
Le applicazioni monolitiche hanno single point of failure (SPoF) e non possono adattarsi.
Java utilizza un modello di parallelizzazione basato su tread
e lock
, difficilmente scalabile perché con un numero di processi superiore a 5-6, i thread che competono sui lock, superano la soglia critica, dopo la quale le applicazioni non riescono a scalare linearmente.
<aside> 💡
Ahead-Of-Time compiler: compilazione nel codice nativo prima dell’esecuzione
</aside>
<aside> 💡
Ecosistema Java → è stato progettato per funzionare su sistemi monolitici.
</aside>
Majestic Monolith”: trasformare le applicazioni monolitiche esistenti in qualcosa di più elastica, attraverso la containerizzazione e piattaforme moderne.
Fast-moving Application Server (AS): Applicazioni server, progettate per funzionare in ambienti altamente scalabili, come i container (kubernetes) o piattaforme cloud-native.
I server sono ottimizzati rispetto alle Application Server