L'era digitale di oggi è alimentata da utenti che richiedono sempre più valore dai servizi tecnologici. In particolare lo smartphone e il cloud si sono combinati per inaugurare un'era in cui il software gestisce il mondo, che si tratti di ordinare cibo, di pagare un qualcosa oppure ottenere soluzioni per l'intrattenimento.
La progettazione e l'implementazione del software si sono evolute per rispondere a queste esigenze dell'utente, poiché le tradizionali architetture monolitiche si sono dimostrate difficili da gestire quando si tratta di supportare una rapida scalabilità.
Container e microservizi sono esempi di approcci moderni che stanno rapidamente diventando il modello di riferimento soprattutto per le app mobili e Web.
Un container è un raggruppamento di un'applicazione e di tutte le sue dipendenze come un pacchetto, che consente di distribuirlo facilmente e in modo coerente indipendentemente dall'ambiente. Queste dipendenze includono tutte le componenti del software (librerie, codice, file binari, dipendenze, file di configurazione, ecc) necessari per eseguire l'app. Per approfondire nel dettaglio i container clicca quì.
I microservizi sono un tipo di architettura software in cui la funzionalità dell'applicazione è suddivisa in frammenti più piccoli per renderla più resiliente e scalabile. Chiamiamo questi frammenti “servizi”. Ogni servizio si concentra solo su una singola funzionalità dell'applicazione ed è isolato dagli altri, rendendo ciascuno di essi indipendente. Ciò significa che i team di sviluppo possono lavorare separatamente su servizi diversi ed evitare una complessa orchestrazione tra di loro. Alcune caratteristiche dei microservizi sono:
- Ambito ristretto
- Fortemente incapsulati
- Debolmente accoppiati
- Distribuibile in modo indipendente
- Scalabili in modo indipendente
- Altamente manutenibili e testabili
Ogni servizio avrebbe il proprio database e comunicherebbe con gli altri servizi tramite un gateway API. Lo sviluppo e la gestione di ciascun servizio vengono eseguiti separatamente, il che significa che un servizio può essere ridimensionato o modificato per adattarsi a diverse esigenze e situazioni senza necessariamente interrompere l'intera applicazione.
L'approccio all'adozione dei microservizi è stato orientato al refactoring delle applicazioni monolitiche esistenti, piuttosto che alla creazione di nuove applicazioni da zero. Sebbene i microservizi forniscano opzioni di agilità e scalabilità, richiedono anche un'infrastruttura di supporto pertinente, soprattutto se si considera la complessità che deriva dalla gestione di centinaia di microservizi tra team diversi.
Per questo motivo, approcci come DevOps e CI/CD sono più adatti a garantire che i servizi siano gestiti in modo efficiente ed efficace dalla progettazione, allo sviluppo e all'implementazione.
La distribuzione di un'intera applicazione in una singola VM introduce un singolo punto di rischio di errore, indipendentemente dal fatto che sia stata utilizzata o meno un'architettura di microservizi. Tuttavia, la diffusione dell'applicazione tramite microservizi su più container consente di sfruttare appieno il valore di entrambi, fornendo resilienza e agilità attraverso la scalabilità e miglioramenti mirati a servizi specifici senza influire negativamente sull'intera applicazione.
Viene inoltre introdotta la flessibilità in quanto gli sviluppatori possono scrivere applicazioni nel linguaggio scelto poiché il container consentirà loro di distribuirsi in qualsiasi ambiente. L'efficienza sicuramente deriva dai container che utilizzano meno risorse rispetto alle macchine virtuali.
Un ulteriore vantaggio si presenta sotto forma di sicurezza attraverso l'isolamento di una superficie di attacco più ampia che limita l'impatto nel caso in cui un singolo microservizio o container sia soggetto a una violazione della sicurezza come un attacco di hacking.
Gli svantaggi derivanti dall'uso di container e microservizi sono legati al sovraccarico di gestione, soprattutto quando si tratta di distribuzioni su larga scala. Ciò significa che la distribuzione, il monitoraggio e la gestione di container e microservizi in tali ambienti sarebbero piuttosto impegnativi e richiederebbero strumenti specializzati in grado di supportare l'orchestrazione e garantire la coerenza nella distribuzione.