DevOps su AWS: ottimizza le risorse computazionali per raggiungere i tuoi obiettivi aziendali con Flowing

Il concetto di DevOps, nato dalla fusione delle parole development (sviluppo) e operations (operazioni) può essere definito come la rappresentazione di un approccio condiviso o collaborativo alle attività svolte dai team di ricerca e sviluppo e operazioni IT di un’azienda.

Nel suo significato più ampio, quella del DevOps è una filosofia che promuove una migliore comunicazione e collaborazione tra questi team all’interno di un’azienda.

Nel suo significato più specifico, quando si parla di DevOps si descrive l’adozione di un processo iterativo nello sviluppo di software, automazione dei processi e implementazione e manutenzione di un’infrastruttura programmabile.

Per quanto il DevOps in sé non sia una tecnologia vera e propria, un ambiente lavorativo DevOps generalmente adotta tre comuni metodologie:

  • Continua integrazione e continua implementazione di nuovi strumenti, ponendo l’attenzione sull’automazione delle attività
  • Utilizzo di sistemi e strumenti che supportano l’adozione del DevOps, includendo monitoraggio in tempo reale e gestione della configurazione dell’infrastruttura
  • Adozione di servizi di cloud computing per avere a disposizione la potenza di calcolo necessaria a svolgere numerose operazioni

Un’applicazione della metodologia DevOps all’operatività aziendale consente un approccio agile alla creazione e alla gestione dei servizi che un brand può offrire ai suoi clienti, posizionandosi in maniera più competitiva sul mercato.

Nell’articolo di oggi parleremo di:

Come funziona il DevOps

Come abbiamo accennato in apertura di questo articolo, il DevOps in sé non è una tecnologia né tantomeno uno strumento.

Bensì, si tratta di una metodologia pensata per migliorare l’operatività aziendale, soprattutto per quanto riguarda il ciclo di sviluppo di uno o più software, dalla fase concettuale alla pubblicazione, passando per lo sviluppo e la distribuzione.

Idealmente, adottare un metodo di lavoro DevOps si traduce in un team IT dedicato alla creazione di un software che corrisponda esattamente ai requisiti degli utenti, il quale venga poi rilasciato senza sprechi di tempo e che funzioni al primo tentativo.

Ovviamente, non si tratta di una formula perfetta perché possono sempre sorgere degli inconvenienti durante l’esecuzione di un progetto, ma l’idea alla base è quella di incrementare la comunicazione tra tutte le parti coinvolte nella realizzazione di un software, dai team di sviluppatori assegnati alla creazione materiale del software ai dirigenti dell’azienda sempre aggiornati sui progressi.

Per quanto non sia difficile creare un software velocemente, realizzarne uno che effettivamente funzioni come preventivato è tutta un’altra storia.

Per assicurarsi che il codice del software sia scritto correttamente e che tutti i team assegnati al progetto abbiano a disposizione una copia del codice che sia costante nella sua performance, con il DevOps si predilige un approccio basato sulla containerizzazione.

Questo perché è estremamente importante assicurarsi che ogni modifica al software venga implementata singolarmente e indipendentemente dalle altre così da poterne individuare facilmente e velocemente eventuali problemi.

Quali problemi si risolvono con il DevOps?

Ogni realtà aziendale deve far fronte quotidianamente ad una serie di sfide e problematiche, ma alcuni di questi elementi comuni a ciascuna di esse riguardano ad esempio:

  • Le lunghe attese per ciascun rilascio del software
  • Software che non rispecchiano le aspettative preventivate
  • Team IT che, seppur involontariamente, sono responsabili per una mancata crescita dell’azienda

Automatizzando numerosi processi durante la fase di ricerca e sviluppo di un software, invece, un progetto DevOps è in grado non soltanto di procedere più speditamente, ma anche di identificare più rapidamente eventuali margini di miglioramento ulteriori, come ad esempio snellire il codice sorgente per migliorarne le prestazioni.

Il DevOps è in grado di risolvere anche tutti quei problemi derivati dalla (mancanza di) comunicazione tra i vari team assegnati ad un progetto.

Questo perché, affidandosi a sistemi di container come ad esempio Amazon EKS, un servizio Amazon Web Services pensato per la containerizzazione dei dati, tutti i “partecipanti” al progetto avranno sempre un accesso facile e diretto a tutte le parti che compongono la struttura di un software, potendo apportarne eventuali modifiche e vederne i risultati, il tutto in tempo reale e automaticamente condiviso con gli altri team.

Adottando un approccio DevOps allo sviluppo di software e soluzioni informatiche, vengono meno “dibattiti” interni in caso di problematiche, affermando ad esempio “Il codice funziona sui nostri computer, di conseguenza il problema è da ritrovarsi altrove ed è colpa vostra”.

A giovarne, come si può intuire, non è soltanto lo snellimento dell’aspetto pratico della creazione di un software, ma anche e soprattutto la comunicazione interna e la cooperazione tra i team di sviluppatori e i team operativi.

Quali sono i vantaggi dell’approccio DevOps

La filosofia alla base dell’approccio DevOps per lo sviluppo di prodotti informatici si sposa perfettamente con l’idea di sviluppo flessibile di Amazon Web Services (AWS).

Con oltre 200 servizi tra cui scegliere, l’obiettivo di AWS è quello di offrire ai propri clienti e ai propri partner soluzioni pensate per raggiungere gli stessi obiettivi del DevOps.

Questa sorta di parallelismo, è ritrovabile tanto nei vantaggi dell’approccio DevOps in sé quanto in alcuni degli strumenti che Amazon Web Services mette a disposizione all’interno della sua piattaforma, riassumibili in sei punti:

1. Velocità di esecuzione

Come accennato in precedenza, per velocità operativa si intende lo snellimento del workflow necessario per lo sviluppo e la distribuzione di un prodotto (tipicamente digitale come un software), migliorando la comunicazione tra i vari team assegnati ad un progetto.

2. Distribuzione rapida

Una volta rilasciata la prima versione di un prodotto, con l’approccio DevOps è possibile incrementare la frequenza con la quale vengono pubblicate nuove revisioni successive, atte a correggere eventuali errori presenti nelle versioni precedenti e/o aggiungere nuove funzionalità.

3. Affidabilità operativa

Il fine ultimo è sempre quello di offrire agli utenti finali un prodotto in grado di soddisfare tutte le loro richieste e /o esigenze, e con un monitoraggio in tempo reale delle attività è possibile rispondere rapidamente ad eventuali problematiche senza sacrificarne l’operabilità.

4. Scalabilità flessibile

L’utilizzo dell’infrastruttura può essere automatizzata per gestire anche i carichi di lavoro più complessi in maniera efficiente senza sacrificarne l’operatività.

5. Collaborazione migliorata

Come detto poc’anzi, la comunicazione è importante e allo stesso tempo con il modello DevOps tutti i componenti di uno o più team assegnati ad un progetto sapranno sempre a conoscenza di quello che è lo stato di sviluppo del progetto stesso.

6. Sicurezza

Rendere più veloce il processo di ricerca e sviluppo non significa sacrificare la sicurezza del prodotto al quale si sta lavorando. Con l’approccio DevOps e l’adozione di sistemi containerizzati come Amazon EKS è possibile espandere le funzionalità di un prodotto in maniera graduale, riducendo i rischi che un codice potenzialmente malevolo eluda i protocolli di sicurezza.

Quali sono gli strumenti AWS a disposizione per il DevOps

Tra gli oltre 200 servizi offerti da Amazon Web Services, ne esistono alcuni pensati appositamente per integrarsi con il metodo di lavoro DevOps, per automatizzare alcune attività, semplificarne la gestione e offrire un alto livello di controllo su tutta la piattaforma, andiamoli a scoprire:

  • Amazon CodePipeline può considerarsi uno strumento essenziale per ogni approccio DevOps perché consente di gestire tutti gli aggiornamenti dell’applicazione alla quale si sta lavorando, così come l’infrastruttura a supporto della stessa, in maniera rapida e affidabile.
  • Amazon CodeBuild si occupa invece dell’aspetto gestionale del codice sorgente in sé, essendo in grado di compilare, effettuare prove per testarne i risultati e preparare il software per la fase di distribuzione, il tutto scalando automaticamente le risorse necessarie per svolgere efficacemente queste attività.
  • Amazon CodeDeploy è pensato per la fase di distribuzione vera e propria del software all’interno di istanze Amazon EC2 presenti sul cloud AWS.
  • Amazon CodeStar è infine il servizio creato per occuparsi di tutte le attività pratiche legate allo sviluppo materiale del software, partendo dalla scrittura del codice sorgente grazie ad un’interfaccia utente unificata e arrivando allo sviluppo, l’aggiornamento e la distribuzione dell’applicazione.

Tutti questi servizi sono pensati per collaborare tra loro. Ovviamente non è obbligatorio adottarli tutti, ma tendenzialmente possiamo affermare che le potenzialità del DevOps potranno essere sfruttate appieno se si prenderà in considerazione l’idea di integrare tutti questi servizi AWS all’interno della propria infrastruttura aziendale.

Come adottare un modello DevOps con Flowing

Come abbiamo visto nel corso di questo articolo, quando si parla di DevOps non ci si riferisce ad una tecnologia o ad un servizio o ad uno strumento.

Parlare di DevOps può essere interpretato un impegno da parte degli sviluppatori e dei team operativi (da cui, del resto, deriva il nome DevOps, composto dalle parole developers e operations) nel comprendere le sfide e i limiti tecnologici che caratterizzano ciascuna fase del progetto di sviluppo di un software.

Parlando più in generale, attraverso un modello DevOps si possono capire ad esempio quelle che sono le esigenze specifiche richieste da ciascuna fase, quali strumenti si possono impiegare o se esista un metodo alternativo (magari più veloce) per svolgere le stesse attività in minor tempo garantendo comunque la stessa efficacia.

Lo stesso principio si può adottare anche in un contesto più ampio.

Qui a Flowing lo chiamiamo “attività di discovery” o “assessment dell’infrastruttura”.

Si tratta di una fase preliminare di un progetto durante la quale analizziamo la piattaforma attualmente utilizzata da un nostro partner, per poi identificarne la migliore soluzione da adottare (ad esempio per migrare sul cloud AWS) basandoci su fattori come gli obiettivi del cliente, il budget a sua disposizione e le tempistiche entro le quali il progetto dovrebbe essere ultimato.

Una volta analizzati tutti gli elementi del caso, possiamo procedere con le fasi successive del progetto adottando un approccio DevOps, così da offrire ai nostri partner un servizio di gestione dell’infrastruttura e/o di aggiornamento e mantenimento del software in maniera automatica, veloce e sicura.

Un esempio di questo metodo di lavoro basato sul concetto di DevOps lo possiamo ritrovare nel progetto “Harmony: l’e-commerce che ti suggerisce il libro giusto” al quale abbiamo lavorato in passato.

Harmony, una nota casa editrice italiana, ha scelto Flowing per realizzare un sistema di suggerimenti automatici all’interno della loro piattaforma di eCommerce, per offrire agli utenti consigli basati sulla loro cronologia degli acquisti.

Da un punto di vista teorico, possiamo considerare questa idea simile alle raccomandazioni su YouTube basate sulla nostra cronologia dei video oppure sui suggerimenti “articoli che potrebbero piacerti/interessarti” o “utenti che hanno acquistato questo articolo hanno acquistato anche questi prodotti” ritrovabili su altre piattaforme eCommerce come Amazon o eBay.

I cosiddetti sistemi di raccomandazione si occupano sul filtrare e anticipare le preferenze degli utenti basandosi su un’ampia selezione di elementi, come cronologia di ricerca, tag, interessi e via discorrendo.

In questo caso specifico, trattandosi della piattaforma di eCommerce di una casa editrice, il sistema di raccomandazione si può basare su elementi come cronologia dei libri acquistati, autori, anni di pubblicazione, generi e numerose altre categorie.

I sistemi a filtraggio collaborativo, invece, sono processi basati sulla raccolta di informazioni su una scala più ampia, includendo non solo tutti i criteri di analisi e raccolta dati menzionati poc’anzi, ma espandendo questo filtraggio per contenere anche un bacino di utenza più grande.

In poche parole, mentre i sistemi di raccomandazione si “limitano” ad offrire suggerimenti basandosi sulle informazioni offerte da un singolo individuo (e pertanto iper-personalizzate per lo stesso), i sistemi a filtraggio collaborativo analizzano tutte le informazioni provenienti da più fonti (gli utenti) per suggerire risultati condivisi da più entità.

Infine, esiste una sorta di sottocategoria dei sistemi a filtraggio collaborativo la quale si basa sulla raccolta dati implicita del comportamento degli utenti all’interno di un sito web.

Si tratta essenzialmente di un sistema in grado di tracciare ciascun utente durante la sua navigazione all’interno del sito web e assegnare una sorta di punteggio a ciascuna attività compiuta, per stabilirne la priorità e la probabilità del ripetere le stesse azioni in futuro, oppure per determinarne la frequenza.

Come è intuibile, si tratta di informazioni molto utili perché consentono di avere un’idea abbastanza chiara di quelle che sono le abitudini comportamentali degli utenti, così da poterne prevedere le azioni future e le tendenze di acquisto ed essere in grado di offrire loro suggerimenti e raccomandazioni più accurate.

Quando è giunto per noi il momento di creare la nostra soluzione per il nostro partner, abbiamo deciso di impiegare una variante dei sistemi a filtraggio collaborativo basata su PredictionIO, una soluzione di machine learning per gestire le raccomandazioni e associarla ad un protocollo di osservazione implicita per esigenze di raccolta dati e per necessità di trasparenza nei confronti del cliente (il visitatore del sito web).

Ogni azione possibile all’interno del sito web ha ricevuto una valutazione da 1 a 5, dando un valore più basso alla semplice visualizzazione della pagina di un romanzo e, viceversa, un valore più alto ad una pagina relativa all’inserimento di quel romanzo all’interno della wishlist o del carrello.

Per quanto l’aspetto tecnico di questo progetto non andò incontro a particolari problemi di natura software, ben presto ci rendemmo conto che la prima implementazione di questa soluzione aveva difficoltà ad operare efficacemente.

Questo perché all’inizio dell’operazione i dati a disposizione del nostro software erano ancora insufficienti, risultando in raccomandazioni poco personalizzate e visualizzazioni di proposte simili per tutti gli utenti.

Monitorando in tempo reale questo flusso di dati, la nostra idea è stata quella di limitare temporaneamente le funzionalità del software, disattivando i suggerimenti e concentrando l’attività esclusivamente sulla raccolta dati per un periodo di circa 60 giorni.

Passato questo periodo di tempo, è stato possibile raccogliere dati sufficienti per decidere di riabilitare tutte le funzionalità del software ed effettuare il cosiddetto rollout di una patch, ossia aggiornare l’applicazione così che potesse iniziare (di nuovo) a mostrare suggerimenti di acquisto ai clienti e i risultati sono stati fin da subito promettenti.

Il DevOps come nuova cultura aziendale

Come abbiamo potuto osservare nel corso di questo articolo, l’approccio WebOps alle operazioni aziendali è sicuramente una metodologia lavorativa efficace e in grado di offrire ottimi risultati, tuttavia richiede un’evoluzione di mentalità e cultura aziendale per poter essere sfruttata appieno.

Per quanto possa sembrare scontato da dire, è bene tenere a mente che l’obiettivo di tutti i team che lavorano all’interno di un’azienda dovrebbe essere quello di ottenere i risultati preventivati, ma questo non sarà possibile senza un’efficace comunicazione e collaborazione tra tutte le parti coinvolte all’interno di un progetto.

Con il DevOps, numerose attività possono essere automatizzate e velocizzate e si possono ottenere risultati soddisfacenti in tempi estremamente più rapidi rispetto ad altri modelli lavorativi.

Con l’articolo di oggi, noi di Flowing abbiamo voluto offrire una panoramica su quella che riteniamo essere una strategia lavorativa vincente, la quale si sposa alla perfezione con la filosofia che caratterizza Amazon Web Services.

La facilità di utilizzo dei servizi AWS unita ad un modello come il DevOps è sicuramente uno dei metodi più efficaci per far fronte alle sfide dello sviluppo e della gestione di software e infrastrutture, ma vi è ancora tanto da scoprire.

In qualità di AWS Advanced Partner, noi di Flowing, abbiamo deciso di organizzare per il 29 Aprile il primo evento in presenza nelle Marche completamente gratuito, nel corso del quale affronteremo più in dettaglio i servizi e le opportunità offerte da AWS e mostreremo alcune applicazioni pratiche dei concetti di innovazione tramite i nostri casi studio.

Come innovare e far crescere il tuo business con AWS