Trasformazione Cloud

Technology


Trasformazione Cloud

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:

  • Microsoft Azure
  • Amazon Web Services (AWS)
  • Google Cloud Platform (GCP)

Tutti questi diversi fornitori hanno le proprie terminologie per i servizi forniti, ma condividono tutti gli stessi principi delineati in questo articolo.

Distribuzione del cloud e tipi di servizi

Una volta creata un’applicazione, questa può essere distribuita nel cloud utilizzando tre diversi metodi di distribuzione:

  • Cloud pubblico: in questo caso tutte le risorse utilizzate sono gestite e mantenute dalla piattaforma cloud. Questo è attualmente il metodo di distribuzione cloud più conveniente e comune.
  • Cloud privato: è comunemente utilizzato quando si lavora su attività che richiedono un’elevata sicurezza e una rigorosa conformità legale. In questo caso, un’azienda crea infatti un’infrastruttura di cloud locale, dando quindi un controllo minore al fornitore del cloud (questa opzione richiede che l’azienda acquisti in anticipo la propria attrezzatura informatica).
  • Cloud ibrido: in questo caso, parte di un’applicazione è gestita dalla piattaforma cloud mentre altre dall’azienda privata (una combinazione dei metodi di distribuzione del cloud pubblico e privato).

Infine, ci sono tre diversi tipi di servizi disponibili sul cloud:

  • Infrastruttura distribuita come servizio (IaaS): nei tipi di servizi IaaS l’attrezzatura informatica viene noleggiata dalla piattaforma cloud e configurata dall’azienda per completare diversi compiti.
  • Piattaforma distribuita come servizio (PaaS): nei tipi di servizi PaaS l’attrezzatura informatica viene noleggiato preconfigurata e utilizzata per testare e sviluppare applicazioni o per salvare dati aziendali.
  • Software come servizio (SaaS): in SaaS il cloud provider sviluppa e mantiene alcune applicazioni software che possono poi essere distribuite utilizzando un modello di abbonamento. Due esempi di programmi SaaS sono Skype e Office 365.

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.

Concetti di Cloud Computing

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:

  • Unità di calcolo: macchine virtuali, contenitori, ecc.
  • Reti di comunicazione: servizi di sicurezza per far interagire tra loro diversi servizi.
  • Archiviazione: memoria per archiviare file di qualsiasi tipo o database per le applicazioni.
  • Big Data: strumenti di elaborazione e visualizzazione dei dati per analizzare e creare insight dai dati memorizzati.

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.

Macchine Virtuali

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).

Contenitori

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:

  • Ottimizzazione del carico di lavoro tra i contenitori e ridimensionamento del numero di risorse necessarie in base alla domanda.
  • In caso di guasto in un contenitore, è possibile creare una nuova istanza per sostituirlo.
  • Se dopo il lancio di una nuova funzionalità si presenta qualche problema si può facilmente tornare alla versione precedente della nostra applicazione.

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).

LE ARCHITETTURE SOFTWARE DEL GRUPPO UNIPOL

di Luigi Zanardi, Head of Omnichannel Automation & IT Architecture

Digital Transformation​

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 DRAKKARla piattaforma per lo sviluppo agile DevOps dell’intero Gruppo Unipol.

Drakkar

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:

  • Maggior Velocità in fase di startup e on-boarding gruppi di lavoro – Riduzione dei tempi di ingresso e di startup dei progetti, grazie a tecnologie standard “best of breed” di mercato, sessioni di on-boarding e pair-programming. (chi sa sviluppare in Drakkar affianca chi deve apprendere lavorando insieme sullo stesso codice.)
  • Maggiore Qualità – Identificare i problemi nelle fasi iniziali di un progetto, introducendo il controllo statico del codice (bug, code smells, vulnerabilità di sicurezza) e verificando la copertura dei test implementati (test coverage).
  • Maggiore Automazione, ripetibilità e processi self-service – Maggiore agilità grazie a processi self service, ripetibilità e automazione delle configurazioni di infrastruttura (“Configuration-AS-a-Code”). Registro delle richieste ed integrazioni.
  • Evoluzione aggiornamento ed evoluzione della piattaforma – La piattaforma è implementata seguendo questa stessa metodologia ed il risultato è una maggiore velocità di evoluzione della piattaforma e minor tempo nell’adozione di nuove tecnologie. (Drakkar “è scritto in Drakkar”)

Drakkar uno sguardo al futuro

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:

  • Hybrid cloud – In particolare oggi Drakkar “gira” su private cloud di Unipol ma tutti i processi e gli automatismi creati consentono alla piattaforma di poter migrare verso un hybrid cloud con impatti contenuti.
  • Tecnologie supportate – Oggi Drakkar supporta tutte le tecnologie di sviluppo più diffuse in azienda (Java, Angular e Node.js in primis) ma l’adozione di ambienti di runtime containerizzati orchestrati da OpenShift (Kubernetes) è aperta ad accogliere nuove tecnologie come Python per applicazioni di Machine Learning / Artificial Intelligence e altre ancora.
  • Osservabilità e KPI – La piattaforma è stata progetta per essere “osservata” in modo da offrire valutazioni oggettive sui vari aspetti del ciclo di vita del software che consentono di verificarne il corretto funzionamento ed eventualmente prevenirne i guasti.

Un po’ di numeri re​lativi all’adozione di Drakkar nel Gruppo Unipol

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

Data Scientist e MSc in Intelligenza Artificiale laureato presso l'Università di Southampton. Ha un forte interesse per i progressi dell'IA e le applicazioni di apprendimento automatico. Al di fuori del suo lavoro, è uno scrittore per Towards Data Science e Freelancer​.