Infrastrutture basate sul cloud, unitamente alle componenti sotto descritte, utilizzate per lo sviluppo di applicazioni moderne, sono elementi che supportano l’implementazione di modelli di business software-driven.
Introduciamo quindi brevemente i concetti di: container, microservizi, servizi mesh, DevOps ed orchestratori.
Container
Parliamo di una tecnologia software che si occupa di “virtualizzare” l’esecuzione di processi (non di una intera macchina come nel caso di virtual machine) creando un involucro che contiene codice, librerie, runtime, impostazioni … tutto quello che serve al funzionamento dell’applicazione per creare un ambiente leggero più facilmente modificabile, che permette di gestire al meglio il carico delle risorse e di eliminare eventuali ridondanze.
La caratteristica dei container è perciò la capacità di isolare le componenti delle applicazioni che possono essere di conseguenza modificate e aggiornate separatamente, senza dover intervenire sull’intera soluzione software.
Inoltre, in questo modo, i team di lavoro all’interno delle organizzazioni possono maggiormente focalizzarsi sulle proprie attività in quanto la distinzione tra lo sviluppo delle applicazioni e l’ambiente sul quale sono eseguite permette da un lato agli sviluppatori di concentrarsi sulla realizzazione del software e dall’altro di lasciare la gestione e il deploy al reparto IT dedicato.
Innovatore nello sviluppo dei meccanismi container è Docker, della quale ci piace riportarne il claim: “We simplify the lives of developers who are making world-changing apps”.
Microservizi
Sono uno stile architetturale oggi molto diffuso per la creazione di applicazioni moderne che consiste in un set distribuito di piccoli servizi autonomi e indipendenti che interagiscono attraverso un'infrastruttura condivisa e, nell’insieme, formano l’applicazione.
L’approccio di sviluppo tramite microservizi implica che ogni funzionalità del software che si sta realizzando può essere modificata rapidamente senza influire sul resto dei file, contrariamente all’approccio tradizionale monolitico che vede l’esecuzione dell’applicazione in un unico “blocco”.
Questo permette di essere più reattivi e “leggeri” nel rispondere alle esigenze del mercato ma comporta anche un cambiamento culturale per i team di sviluppo software che si interfacciano con le strutture di operations/prodotto all’interno dell’azienda: a supporto di questo cambiamento intervengono le metodologie DevOps e Agile (che vediamo più avanti) che facilitano ulteriormente le interazioni tra team.
Servizi mesh
Lavorare con i microservizi, specialmente se parliamo di applicazioni molto grandi, può compromettere le esigenze di comunicazione tra gli stessi; l’architettura con servizi mesh affida a questi il compito di gestire la comunicazione sottraendolo agli sviluppatori o ai microservizi stessi.
Viene quindi definito (tramite istanze proxy che permettono di condividere flussi di comunicazione tra i vari microservizi), un livello di infrastruttura con funzionalità dedicate alla comunicazione e configurabile autonomamente.
DevOps (Development / Operations)
La contrazione delle due parole inglesi che compongono il nome di questa metodologia già ne identifica il significato: la collaborazione, all’interno delle aziende, tra i team dedicati allo sviluppo software e quelli rivolti alle operations del reparto IT.
Si tratta di un approccio e di una serie di pratiche e strumenti che mirano ad aumentare la condivisione e la collaborazione nella attività di rilascio software, al fine di accelerare il time-to-market e soddisfare più rapidamente le esigenze di business, andando a toccare anche cambiamenti culturali e organizzativi.
La coesione delle risorse lungo la catena di sviluppo delle applicazioni, procedure e test automatici, concetti quali Continuous Delivery e Continuous Integration (tecniche di sviluppo Agile) aiutano a migliorare la qualità del software, ad essere più veloci e affidabili, a incrementare la sicurezza di quanto realizzato (una estensione di DevOps è DevSecOps, che coinvolge anche i team esperti di sicurezza).
“La nostra massima priorità è soddisfare il cliente rilasciando software di valore, fin da subito e in maniera continua”
Orchestratori
Un ultimo accenno agli orchestratori: strumenti che automatizzano sistemi e applicazioni per favorire la gestione più semplice delle attività, come ad esempio Kubernetes (sistema open-source di orchestrazione e gestione di container inizialmente sviluppato da Google e ora mantenuto da Cloud Native Computing Foundation).
Oggi le organizzazioni hanno dunque a disposizione tecnologie e metodi per realizzare piattaforme di sviluppo software moderne, flessibili e agili, in modo da soddisfare le mutevoli necessità che il mercato impone.
"Metti al centro il tuo business grazie all’innovazione!"