Negli ultimi anni si parla sempre più spesso di applicazioni cloud native. Il motivo? Il boom stesso del cloud ha permesso agli sviluppatori di beneficiare delle innovazioni della nuvola non solo per
realizzare più velocemente le app, alimentate dalla potenza computazionale del cloud, ma anche per
aggiornarle con maggiore semplicità, senza fermare i servizi a cui si riferiscono. Vale però la pena fare un passo indietro per capire come nascono e si affermano le applicazioni cloud native.
Un po’ di storia
Un'applicazione cloud native è un programma progettato per
integrarsi al meglio in una piattaforma di cloud computing. Queste app vengono eseguite e ospitate nel cloud e sono progettate per sfruttare le caratteristiche intrinseche di un modello di distribuzione del software sulla nuvola. Un'app nativa del cloud è sviluppata seguendo la linea progettuale dei
microservizi, ovvero allocare in modo efficiente le risorse per ciascun servizio utilizzato dall'applicazione, di fatto permettendo che un
singolo modulo dell’app sia indipendente dagli altri, per continuare a funzionare anche in caso di criticità di una componente. Come detto, gli sviluppatori, soprattutto quelli inseriti nel trend dei
DevOps, utilizzano applicazioni native del cloud per la loro capacità di promuovere
l'agilità aziendale perché sono progettate, costruite e distribuite in modo diverso dalle tradizionali applicazioni monolitiche. Secondo la
Cloud Native Computing Foundation, oggi abbiamo oltre 6,5 milioni di sviluppatori di app cloud native. Nel 2019 erano 4,7 milioni.
Come funzionano
Con
sviluppo cloud native si intende proprio questo: un
approccio alla realizzazione e all'aggiornamento rapido delle app, che al contempo
migliora la qualità e
riduce i rischi. È un modo per creare ed eseguire
app reattive, scalabili e
tolleranti agli errori, ovunque si trovino: nei
cloud pubblici, privati o ibridi. Poiché non tutti i servizi si trovano sullo stesso server, gli sviluppatori di applicazioni native del cloud devono
creare una rete tra le macchine, utilizzando architetture basate su software. I servizi risiedono su server diversi e vengono eseguiti in posizioni differenti. Questa architettura consente alle applicazioni di scalare e di essere progettate con ridondanza per continuare a funzionare anche dopo un guasto o un blocco dei servizi su cui si basa.
I microservizi che fanno parte dell'architettura dell'app nativa del cloud sono inseriti in
container che si connettono e comunicano tramite
API. Ogni microservizio introduce una capacità aziendale, esegue i propri processi e comunica tramite un'interfaccia di programmazione delle applicazioni (API) o un sistema di messaggistica. Ma non sempre è necessario iniziare dai microservizi per accelerare la distribuzione delle applicazioni cloud native. Molte organizzazioni possono ad esempio
ottimizzare le app esistenti con un'architettura basata sui servizi, approfittando dei flussi di lavoro DevOps come
l'integrazione e il deployment continui (CI/CD), di operazioni di deployment totalmente automatizzate e di ambienti di sviluppo standardizzati.
Elementi essenziali
I fondamenti delle architetture cloud native si basano su alcuni pilastri. Quasi tutte le architetture cloud si fondano sui
microservizi, ma il vantaggio principale che offrono è la
componibilità, vale a dire la possibilità di suddividere un'applicazione in una raccolta di servizi più piccoli e leggeri, facilmente componibili e connessi tra loro tramite interfacce di programmazione di un'applicazione (
API). Ad esempio, un'applicazione di e-commerce potrebbe essere composta da un servizio specifico per il carrello degli acquisti, un altro per il pagamento e un altro che comunica con il backend sulla gestione dell'inventario. La componibilità consente inoltre ai team di scambiare e riscrivere i componenti per soddisfare i nuovi requisiti aziendali senza interrompere un'altra parte dell'applicazione.
I
container sono componenti eseguibili leggeri che contengono tutti gli elementi necessari, inclusi il codice sorgente e le dipendenze delle app, per eseguire il codice in qualsiasi ambiente. I container offrono la
portabilità dei carichi di lavoro che consente di creare il codice una sola volta e di eseguirlo ovunque, semplificando notevolmente lo sviluppo e il
deployment. Consentono inoltre di ridurre i possibili attriti tra linguaggi, librerie e framework perché è possibile eseguirne la distribuzione in modo indipendente. Questa
portabilità e
flessibilità rendono i container ideali per la creazione di architetture di microservizi.
Lo sviluppo di applicazioni cloud native richiede il passaggio a una metodologia di
distribuzione agile come DevOps, in cui i team di sviluppatori e delle operazioni IT collaborano all'automazione dei processi di distribuzione del software e dell'infrastruttura. Il metodo DevOps consente ai team di sviluppo e operativi di comunicare in modo più stretto e di unirsi per uno scopo condiviso, creando una cultura e un ambiente in cui le applicazioni possono essere create, testate e rilasciate più rapidamente.
Integrazione e distribuzione continue (
CI/CD - Continous Integration / Continous Delivery): l'automazione può riparare, scalare ed eseguire il deployment dei sistemi molto più velocemente rispetto alle persone. Le pipeline CI/CD aiutano ad
automatizzare la creazione, i test e il deployment delle modifiche alle applicazioni senza dover pianificare il tempo di inattività o attendere un periodo di manutenzione. La
distribuzione continua assicura che le release del software siano più affidabili e meno rischiose, consentendo ai team di fornire nuovi servizi e funzionalità in modo più rapido e frequente.
Vantaggi delle applicazioni native del cloud
Potendo essere ridimensionate in base alle esigenze, le app native del cloud
eliminano la necessità di acquistare nuovo hardware e
di
bilanciare il carico di lavoro, in caso di picchi di utilizzo. Ma non si tratta solo di tecnologia: alla base del loro approccio c’è molta
strategia, visto che tali app sono strettamente legate ad una metodologia di sviluppo come DevOps e consentono di rendere disponibile il software con una modalità CI/CD (Continous Integration / Continous Delivery) tipica del
SaaS. Tale modello permette all’utente finale di
concentrarsi esclusivamente sul proprio lavoro, senza preoccuparsi di dover continuamente aggiornare le applicazioni utilizzate o scaricare i continui aggiornamenti di sicurezza che interessano le applicazioni legacy.
A livello di sviluppo, quando suddivise in servizi più piccoli, le app native del cloud facilitano per un team di sviluppo di
concentrarsi su un microservizio specifico, senza doversi preoccupare di come interagirà con altri microservizi. Ogni microservizio esegue infatti una funzione e può essere facilmente avviato all’interno di un singolo container, che integra tutto il necessario per la sua esecuzione (librerie, codice, file binari, config file, dipendenze, ecc.). L’elevata
portabilità dei container favorisce la
flessibilità, indispensabile quando si tratta di gestire team differenti, che operano con tecnologie e linguaggi di programmazione spesso diversi, all’interno dello stesso progetto DevOps.
Best practice per lo sviluppo di applicazioni native del cloud
Le best practice per la progettazione di applicazioni cloud native si basano sul
principio DevOps dell'eccellenza operativa. L'architettura nativa del cloud non ha regole univoche quindi le organizzazioni possono affrontarne lo sviluppo in modo diverso in base al problema aziendale che stanno risolvendo e al software che stanno utilizzando.
Tutti i progetti di applicazioni cloud native dovrebbero considerare come verrà creata l'app, come vengono misurate le prestazioni e come i team promuovono il
continuous improvement attraverso il ciclo di vita dell'app stessa. Ma ci sono dei punti critici che si ripetono. Ad esempio, l'
automazione, che consente il provisioning coerente degli ambienti delle applicazioni cloud tra più fornitori di servizi. Con l'automazione, l'infrastruttura come codice (
IaC) viene utilizzata per tenere traccia delle modifiche in un repository di codice sorgente. Ai team è richiesto solo di
monitorare l'ambiente di sviluppo e il modo in cui verrà utilizzata l'applicazione. Definendo processi ripetibili, regole e framework, l'automazione può riguardare qualsiasi task o componente, dalle reti al provisioning delle risorse, fino alla distribuzione delle applicazioni e alle attività di configurazione.
È importante prendere in esame qualsiasi operazione o elemento che possa essere automatizzato ma si può
agire gradualmente, cominciando da singoli aspetti (computing, archiviazione, comunicazioni di rete o provisioning) e proseguendo poi su questa base. Nel tempo, un'automazione integrata e su larga scala produrrà come risultati maggiore efficienza, velocità nel DevOps e nell’innovazione.
La tua organizzazione sta andando nella direzione dell’application modernization?
Scopri l’offerta Aruba Enterprise per il cloud native