Accendiamo la luce sul futuro
La serie di fantascienza Star Trek è ambientata nell’anno 2264. Gli esseri umani viaggiano nella galassia insieme agli alieni, aiutati da computer, propulsione più veloce d
Tutti ne parlano ma come sta rivoluzionando il consumo di risorse IT a livello aziendale? Come rendere semplice qualcosa di complesso.
Al giorno d’oggi, sempre più aziende stanno passando allo sviluppo e alla distribuzione di applicazioni in ambienti basati sul Cloud. Una delle principali motivazioni per il cloud computing è che elimina buona parte delle problematiche associate alla configurazione e alla gestione dell’attrezzatura (hardware) e dei software utilizzati. Ciò è possibile noleggiando in remoto le risorse dei computer disponibili nei data center gestiti da una piattaforma cloud.
In questo modo, aziende e privati possono utilizzare in remoto le configurazioni hardware e software e i flussi di lavoro forniti da diversi fornitori, senza doversi preoccupare di acquistare le apparecchiature, configurare diversi ambienti IT e mantenerli aggiornati nel tempo. L’utilizzo di questo tipo di approccio consente quindi agli utenti di concentrarsi solo sullo sviluppo e sulla distribuzione dei propri servizi (es. sito web, banche dati, applicazioni, analisi dei dati) senza dover pensare ad eventuali complicazioni di tipo infrastrutturale. In definitiva, ciò può portare a uno sviluppo più rapido in modo da garantire al cliente il miglior servizio possibile, in linea con i principi DevOps (Development-Operations).
L’idea principale alla base dei servizi cloud è simile a qualsiasi altro tipo di sistema basato su abbonamento a pagamento mensile che è stato sviluppato in passato. Ad esempio, in questi giorni, ognuno di noi si avvale di utenze come elettricità/acqua/gas senza doversi preoccupare di come funzionano o ci vengono distribuite. Ciò che ci interessa è che i nostri fornitori possano darci un servizio affidabile e che dobbiamo pagare solo per quanto utilizziamo o meno per tutti questi servizi.
Alcuni dei principali fornitori di servizi cloud in uso sono:
Tutti questi diversi fornitori hanno le proprie terminologie per i servizi forniti, ma condividono tutti gli stessi principi delineati in questo articolo.
Una volta creata un’applicazione, questa può essere distribuita nel cloud utilizzando tre diversi metodi di distribuzione:
Infine, ci sono tre diversi tipi di servizi disponibili sul cloud:
Facendo uso di una di queste infrastrutture può quindi essere possibile spostare facilmente qualsiasi tipo di attività basata su software nel cloud. Secondo uno studio dell’Osservatorio Cloud Transformation del Politecnico di Milano l’adozione del cloud in Italia è aumentata nel 2020 del 21% rispetto al 2019 raggiungendo un valore di mercato di più di 3 miliardi di euro. Alcuni esempi di aziende che ad oggi usufruiscono di questi servizi in Italia sono Enel, Euronics, TIM, ecc.
Ogni diverso fornitore di servizi cloud è in grado di offrire un’ampia varietà di servizi e applicazioni, questi possono essere classificati in quattro tipi principali:
Al fine di ridurre i costi di noleggio delle risorse e sfruttare al meglio l’attrezzatura disponibile, i servizi cloud si affidano in gran parte a tecniche di virtualizzazione come macchine virtuali e contenitori.
Le macchine virtuali (Virtual Machines) sono un tipo di software creato per emulare il comportamento di un computer (Figura 1). È possibile creare diverse istanze di macchine virtuali da eseguire contemporaneamente su un singolo computer, ciascuna dotata di un sistema operativo, una memoria e di un metodo di archiviazione preferito. Una volta creata una macchina virtuale, questa può poi essere usata da remoto utilizzando un client desktop e utilizzata come un qualsiasi computer fisico (es. per installare programmi, eseguire applicazioni, ecc.). In questo modo, l’utilizzo di un computer (macchina fisica) può essere massimizzato utilizzando un singolo computer come una raccolta di diversi computer.
Un altro grande vantaggio dell’utilizzo delle macchine virtuali nel cloud è che il nostro sistema può diventare facilmente scalabile. Pertanto, se sono necessarie più risorse del previsto per completare un progetto, capacità di memoria e di archiviazione aggiuntiva possono essere facilmente aggiunte dal fornitore di servizi cloud (riducendo così ogni possibile tempo di inattività nella distribuzione).
Inoltre, se vogliamo assicurarci che il nostro servizio sia sempre in esecuzione, può anche essere possibile creare una macchina virtuale di backup che può essere eseguita automaticamente nel caso in cui si verifichino problemi con quella originale. Ciò può essere particolarmente utile quando si aggiungono nuove funzionalità a servizi come siti web o applicazioni e vogliamo prima rendere disponibile la versione più recente del servizio solo a un sottoinsieme dei consumatori in modo da ottenere un riscontro sul sé il cambiamento può portare un impatto positivo o meno sul servizio (A/B Test).
Uno svantaggio dell’utilizzo delle macchine virtuali è che ogni macchina virtuale ha il proprio sistema operativo. Ad esempio, se abbiamo un’applicazione complessa che necessita di un sistema operativo Windows per alcune operazioni e Linux per altre, avremmo bisogno di gestire due macchine virtuali separate e far comunicare le due tra loro. Questo può perciò, conseguire in un uso di risorse non ottimizzato. Inoltre, quando si sviluppa un’applicazione in un gruppo, potrebbero sorgere conflitti di dipendenze tra diverse librerie di programmazione (rendendo così difficile far funzionare un’applicazione se distribuita su un altro dispositivo).
Per evitare questo tipo di problemi, sono stati ideati i contenitori (containers). I contenitori impacchettano le app con le loro dipendenze e le distribuiscono a un contenitore host (che funge da servizio, emulando il sistema operativo). In questo modo, si può evitare lo spreco di memoria dovuto dalla presenza di più sistemi operativi, inoltre più contenitori possono essere eseguiti su una singola macchina rispetto a quanto sarebbe stato possibile fare su una singola macchina utilizzando le macchine virtuali. Utilizzare questo sistema può rendere più facile la distribuzione di applicazioni tra diversi sistemi operativi senza dover pensare alla gestione delle dipendenze sottostanti.
In sintesi, le macchine virtuali rendono possibile virtualizzare un computer fisico, mentre i contenitori sono in grado di virtualizzare i sistemi operativi. Uno dei servizi più comuni che possono essere utilizzati per creare contenitori è Docker (Figura 2).
Uno dei modi più efficienti per creare sistemi complessi è dividerli in diverse applicazioni di contenitori, ognuna con un ruolo distinguibile. Ad esempio, se stiamo lavorando su un sito web, potrebbe essere una buona idea dividere il sito web in tre contenitori principali: front-end, back-end e banca dati. Ogni volta che vogliamo introdurre nuove funzionalità, possiamo quindi aggiornare il nostro contenitore di interesse senza dover toccare gli altri. Man mano che aggiungiamo più componenti alla nostra applicazione e la sua complessità aumenta, potrebbero essere necessari sempre più contenitori. Per mantenere e organizzare in modo efficiente i contenitori, sono stati creati servizi come Kubernetes.
Kubernetes è una piattaforma portatile per rendere facilmente scalabili le applicazioni basate su contenitori in ambienti cloud. Alcuni esempi di servizi che Kubernetes può fornire sono:
L’utilizzo di Kubernetes per gestire applicazioni può quindi consentire l’esecuzione di pratiche DevOps come l’integrazione continua (Continuous Integration) e la consegna continua (Continuous Delivery). L’obiettivo principale dell’integrazione continua è assicurarsi che le modifiche al codice si integrino perfettamente con l’attuale struttura del codice, mentre la consegna continua si concentra sul rendere la base di codice sempre pronta per la distribuzione (in grado di passare automaticamente qualsiasi meccanismo di compilazione e test in atto).
di Luigi Zanardi, Head of Omnichannel Automation & IT Architecture
Le tecnologie digitali sono ormai parte integrante della nostra quotidianità e hanno cambiato anche radicalmente il modo di approcciare tanti aspetti della nostra vita. Se usate bene, ci aiutano a fare prima e a fare meglio tante cose.
La direzione CIO (Chief Information Officer) del Gruppo Unipol Unipol in linea con queste dinamiche ha creato e sta creando servizi digitali che devono rispondere a fruitori sempre più consapevoli ed esigenti.
Per poter rispondere efficacemente a questa crescente esigenza di servizi digitali è stato necessario dotarsi di tecnologie e metodologie all’avanguardia. CIO ha progettato e realizzato DRAKKAR: la piattaforma per lo sviluppo agile DevOps dell’intero Gruppo Unipol.
Drakkar (il nome delle navi da guerra vichinghe dotate di scudi) consente di realizzare e distribuire velocemente componenti e applicazioni modularizzate seguendo pratiche DevOps di CI/CD (Continuous Integration & Continuous Deploy). Questa piattaforma non solo integra gli strumenti necessari per agevolare i team di lavoro nelle loro attività di sviluppo ma definisce anche processi e metodologie per aiutarli a realizzare applicazioni di maggior qualità.
Gli obiettivi raggiunti dalla piattaforma DevOps Drakkar sono:
La piattaforma è stata disegnata con un occhio attento alle possibili evoluzioni future sia in termini infrastrutturali che in termini di tecnologie supportate.
Le esigenze e le tecnologie evolvono rapidamente ed è pertanto necessario essere pronti a calcare o ancor meglio ad anticipare i trend futuri ed essere leader in un mercato sempre più competitivo.
Alcuni esempi di evoluzioni di piattaforma sono:
Drakkar è una piattaforma giovane nata a gennaio 2019 ma è già adottata oltre 90 team (con 750 specialisti informatici, tra cui analisti, PM/PMO, sviluppatori, tester ecc.) che hanno sviluppato su Drakkar oltre 750 componenti applicative. Ad oggi in Drakkar sono state sviluppate quasi 4 milioni di righe di codice. Ed è solo l’inizio.
Hanno collaborato: Franco Rigamonti Head of IT Architecture; Gianfelice Catini Head of IT Platform; Marco Grossi Head of Server Farm; Giuseppe Vasta Head of Linux Production