Di Tiziano Campili – Cloud & System Architect at InfoCert
Per competere nel panorama tecnologico odierno è indispensabile non solo realizzare soluzioni efficienti e che rispondano ad alti livelli qualitativi, ma è altresì importante che esse siano costruite secondo criteri architetturali vincenti. Ciò comporta il dover affrontare una serie di sfide che devono essere risolte in maniera idonea e per fare questo è necessario appoggiarsi ad una infrastruttura stabile e robusta.
Negli ultimi anni il Cloud ha guadagnato sempre maggiore trazione rispetto alle infrastrutture tradizionali basate su data-center, introducendo benefici sul fronte economico, sulla disponibilità della infrastruttura e sulla sua scalabilità.
Il cambio di paradigma introduce però delle modifiche nella realizzazione di una soluzione, sia dal punto di vista tecnologico che dal punto di vista dei processi, che devono essere colte appieno per poter trasformare le nuove sfide in opportunità.
Le architetture tradizionali
Nelle soluzioni tradizionali l’architettura del sistema deve tener conto del rispetto di tutta una serie di requisiti. Per ogni requisito è possibile calcolare una metrica che lo rappresenti e di conseguenza valutare l’effettiva capacità del sistema di assolvere al suo scopo.
A titolo di esempio si possono citare: la rispondenza ai requisiti funzionali, la realizzazione nei tempi e nei costi previsti, la corretta gestione dei livelli di servizio, la possibilità di monitorare il sistema e via molti altri.
Di contro, alcune metriche sono prettamente tipiche delle soluzioni software e non hanno un riscontro facilmente quantificabile della loro adeguatezza. Si pensi alla manutenibilità del codice, oppure alla semplicità di gestione della soluzione nel day-by-day. Questo si traduce in valutazioni le quali hanno una importanza rilevante nel ciclo di vita della soluzione, ma si basano su criteri per loro natura soggettivi.
Infine, la struttura aziendale influenza fortemente le architetture applicative. Le imprese hanno adottato nel corso degli anni i modelli organizzativi più disparati, nei quali però si possono distinguere alcuni tratti comuni. Essi hanno come conseguenza quella di introdurre alcune complicazioni all’aumentare della complessità e dei volumi del business:
- Separazione delle competenze: vengono definiti gruppi di lavoro con responsabilità specifiche, ad esempio analisi, sviluppo, operation. Con l’avvento delle metodologie DevOps, questa divisione assume contorni molto più sfumati, anche se nella pratica diversi aspetti trasversali continuano ad essere gestiti da funzioni centralizzate.
- Mancata trasparenza nei costi: anche se l’infrastruttura viene gestita internamente, ad occuparsene è di solito una funzione aziendale apposita. Questo si traduce nell’aggregazione dei costi dei servizi e rende molto difficile estrapolare i dettagli dei singoli componenti.
- Gestione dei servizi secondari: per mantenere un elevato livello di servizio è necessario gestire tutta una serie di componenti, che in realtà non fanno parte del core business dell’azienda. Si aggiunge quindi un ulteriore carico di lavoro da dover in qualche modo amministrare.
L’impatto dell’architettura nelle soluzioni software
I problemi visti finora introducono notevoli complicazioni nella realizzazione di soluzioni di qualità. Immaginiamo di dover realizzare una determinata soluzione in tempi molto ristretti: se seguendo l’architettura ideale diventa necessario il coinvolgimento di diverse funzioni aziendali, ognuna delle quali ha le proprie priorità, quello che succede in realtà è che si opterà per realizzare una versione sub-ottimale della soluzione, introducendo modifiche atte a ridurre il coinvolgimento di attori esterni.
Se a primo impatto questo possa sembrare un vantaggio (rilascio nei tempi, contenimento dei costi di realizzazione), abusare di questo approccio porta ad avere nel corso del tempo sistemi sempre più complessi e difficili da mantenere: si aggiungono strati su strati di complessità fino ad arrivare ad avere a disposizione un sistema che funziona benissimo, ma che nessuno riesce più a comprendere e gestire in maniera adeguata.
Questa complessità si trasmette, anche se in maniera non così palese, al management. E lo fa tramite una metrica utilizzata nello sviluppo software spesso non compresa appieno: la velocity. Essa si definisce come unità di lavoro che si possono completare in un determinato intervallo di tempo; è evidente che maggiore è la velocity, più rapidamente la soluzione può evolvere e restare competitiva sul mercato.
In che modo l’architettura della soluzione influenza gli aspetti visti finora e può andare ad impattare positivamente sulla velocity? I punti di contatto sono essenzialmente due, il costo di esercizio e il costo delle evolutive: il costo di esercizio è rappresentato dalla quantità di lavoro che deve essere allocata per la risoluzione dei difetti riscontrati nella soluzione, mentre il costo delle evolutive è composto dall’onerosità in introdurre cambiamenti all’interno del sistema.
Realizzare un’architettura di qualità consente di ridurre i costi sopra citati, comportando un aumento della velocity: se è necessario dedicare meno tempo alla risoluzione dei difetti, rimane più spazio per l’introduzione delle migliorie; se introdurre migliorie è meno complesso grazie alla maggiore semplicità del sistema, allora possono essere introdotte più velocemente nella soluzione finale.
Le opportunità del Cloud
Il Cloud introduce opportunità uniche nella realizzazione di soluzioni software. Grazie alle sue caratteristiche peculiari consente di abbattere o limitare fortemente l’impatto dei problemi visti finora, favorendo la concretizzazione di architetture che nei contesti tradizionali sarebbero comunque fattibili, ma ad un costo ed una complessità molto più elevati.
Uno dei vantaggi principali del Cloud è la disponibilità di servizi gestiti. Tramite essi è possibile demandare al Cloud Provider tutta la parte di esercizio dei servizi di supporto: installazione, monitoraggio, aggiornamenti, tutto viene gestito dal Cloud Provider. In questo modo si liberano risorse che possono essere dirottate verso la parte core del business, con evidenti vantaggi di utilità.
Un altro aspetto spesso sottovalutato è la trasparenza dei costi operativi. L’utilizzo di una tariffazione a consumo, unita ad una corretta segmentazione dei centri di costo e alla visibilità delle informazioni, consente di calcolare con molta più facilità e con minore margine di errore il costo unitario dei servizi erogati. Diventa inoltre più semplice individuare gli sprechi della piattaforma, e pianificare di conseguenza attività di correzione e contenimento.
Un’altra opportunità degna di nota è la riduzione del time-to-market delle nuove soluzioni: la combinazione dei vantaggi visti finora consente di ridurre il costo e il tempo necessario nel realizzarle, permettendo inoltre cicli di feedback ed innovazione più rapidi ed efficaci.
Ogni medaglia ha però il suo rovescio: sostituire o affiancare alla infrastruttura proprietaria un Cloud Provider non comporta automaticamente dei miglioramenti nella produttività di una azienda. Per poter sfruttare al meglio le opportunità offerte dal Cloud bisogna attuare, oltre al cambiamento tecnologico, anche un cambiamento culturale dovuto alla presenza di nuovi paradigmi. Inoltre, bisogna essere preparati tecnicamente riguardo gli strumenti offerti dalla piattaforma per poterli utilizzare in maniera corretta e consapevole.
Se non si tengono in considerazione questi aspetti, la prima conseguenza è quella di non riuscire a cogliere le opportunità che abbiamo visto; a questo si aggiunge il rischio concreto di introdurre maggiore complessità in un ecosistema che si vorrebbe invece semplificare.
Autore: