• Non ci sono risultati.

3.11 Continuous Delivery

3.11.2 Dark Launching

Il Dark Launching è una tecnica, utilizzata da Facebook, AirBnB e dai maggiori distributori di servizi software, per la gestione delle Release in maniera graduale e

controllata. Secondo il Dark Launching è possibile iniziare a convertire parte del va- lore potenziale di una feature anche prima del momento strategico ottimale, la nuova

feature viene quindi messa a disposizione di un piccolo sottoinsieme di utilizzatori, consci o inconsci.

Il piccolo subset di istanze complete viene quindi monitorato nel dettaglio per

mettere in luce le performance in produzione, in vista dello scaling, il grado di sod- disfazione dei clienti e l’eventuale presenza di bug e anomalie sfuggite al Continuous

Testing.

Figura 3.11: Facebook Dark Launching secondo Facebook

Facebook adotta un rilascio in tre fasi per la gestione degli aggiornamenti più significativi:

1. La nuova feature viene rilasciata tra i dipendenti dell’azienda, monitorando il prodotto e garantendo la presenza di un "arresto forzato" prima dell’effettivo

rilascio.

2. Si passa quindi al rilascio del 2% in produzione, in questa fase si colleziona-

no segnali di alert, ponendo grande attenzione ad eventuali sovraccarichi del sistema o ai punti più critici della feature.

3. La feature viene infine rilasciata in produzione ed inserita nel processo di Continuous Monitoring.

3.12

Continuous Deployment

Il Continuous Deployment consiste nella completa industrializzazione del processo di

sviluppo e distribuzione del prodotto software. Anche il Deploy viene automatizzato creando un effettivo flusso di rilasci generato dalla semplice pressione di un pulsante.

Il Continuos Deployment non è però una tecnica adatta a tutte le aziende, rag- giungere un tale livello di automazione presuppone infatti la completa comprensione

e adozione delle pratiche precedenti e un alto livello di fiducia nella Deployment

Pipeline.

Figura 3.12: Delivery e Deployment

Eliminare ogni intervento umano implica che ogni fase del processo sia imple-

mentata al meglio:

Una sola compilazione

Il software deve essere compilato una e una sola volta, in un ambiente identico a quello di produzione, isolato e monitorato. La Deployment Pipeline deve poter

identificare in maniera univoca ogni singolo prodotto compilato e testato in modo da poter selezionare il miglior candidato o eliminare quelli corrotti.

Test come unica garanzia di qualità

La Deployment pipeline deve contenere test perfetti, in grado di garantire la mas- sima copertura e il massimo livello qualitativo, come richiesto dagli standard di

produzione. E’ inoltre necessario introdurre Smoke Tests in grado di verificare che l’ambiente di esecuzione sia consistente con le specifiche e che il prodotto sia

effettivamente attivo e funzionante.

Processo di Deployment industrializzato

Anche il processo di Deployment deve essere automatizzato e gestito con compo- nenti software al pari del prodotto in sviluppo. Il processo deve essere testabile,

documentato, convergente e idempotente, in modo da poter essere ripetuto in qual- siasi ambiente della fase di produzione. Utilizzando lo stesso metodo per ogni stage

si ha la possibilità di verificare l’efficacia dello stesso ben prima del suo effettivo utilizzo in produzione.

Ambienti standardizzati

Per poter standardizzare il deploy è necessario prima di tutto che gli ambienti siano

standardizzati, secondo i principi del Configuration Management.

3.12.1

Blue/Green Deployment

Il Blue/Green deployment è una tecnica che permette di gestire in maniera graduale

e controllata il Continuous Deployment di un software, solitamente di un servizio web.

L’ambiente di produzione viene replicato, ottenendo due ambienti gemelli chia- mati Green Environment e Blue Environment, il primo conterrà l’attuale versione

Figura 3.13

del software, utilizzato dal 100% dell’utenza, il secondo sarà dedicato al rilascio del- la nuova versione. Un terzo elemento dell’infrastruttura si occupa di dirottare una

percentuale definita di utenti dalla vecchia alla nuova versione, completa di tutte le nuove funzionalità. La transizione tra Blue e Green è graduale e incrementale,

l’utenza viene mano a mano dirottata fino al completo abbandono del Green Envi- ronment, durante questa fase si monitorano le performances della nuova istanza allo

scopo di rilevare criticità e problemi di scaling.

Al termine della transizione la vecchia istanza può essere mantenuta, al fine di poter effettuare un rollback in caso di necessità, oppure disabilitata. In ogni caso

assumerà il ruolo di pilota al successivo rilascio.

Il B/G Deployment si differenzia dal Dark Launching per la necessità di avere due ambienti di produzioni differenti, in ogni caso la configurazione dell’istanza

aggiornata può essere gestita con le Toggle Features, inoltre le features sono rilasciate a un subset in continua transizione fino alla totale copertura.

3.12.2

Oltre il prodotto

Nelle sezioni 3.7 e 3.8 sono presentate le metodologie per convertire gli script di Provisioning e Orchestration in componenti software, in tutto e per tutto gestibili

allo stesso modo del prodotto sviluppato.

Questo significa che è possibile creare una Continuous Deployment Pipeline anche

per l’infrastruttura sul quale è rilasciato il software: ogni nuova modifica alla con- figurazione delle istanze o all’architettura stessa viene quindi inserita in un VCS,

testata, integrata ed applicata in maniera continua e automatizzata.

3.13

Continuous Monitoring (CM)

Il Continuous Monitoring rappresenta la chiusura del feedback loop, fondamentale

per il miglioramento incrementale del processo di produzione. Il lavoro del team non

termina con il rilascio in produzione, il prodotto deve essere infatti costantemente monitorato per assicurare che le specifiche funzionali e non funzionali siano garantite

sul lungo termine. Allo stesso modo, anche la Deployment Pipeline e il lavoro del team deve essere monitorato per garantire che tutto funzioni secondo i più elevati

standard di efficienza.

3.13.1

Monitoring post-produzione

Il prodotto deve esser progettato fin dalle prime fasi del processo di sviluppo per

integrare strumenti di controllo atti a valutarne il funzionamento:

Test in produzione

Gli stessi test eseguiti nella Deployment Pipeline devono poter essere eseguiti pe-

riodicamente sul software in produzione, in modo da verificare costantemente che tutto funzioni senza problemi.

Metriche

Il Software deve esporre una serie di Metriche (KPI), valori atti a valutare il fun- zionamento del prodotto in modo significativo e duraturo. La definizione dei KPI

è strettamente legata all’applicativo del caso. Per un servizio web è significativo monitorare il tempo di risposta alla singola richiesta, oppure il numero di richieste

giornaliere; per un modello di previsione è interessante verificare che l’errore fatto sulla predizione converga allo zero.

Due sono i metodi solitamente utilizzati per esporre metriche:

White Box La generazione ed esposizione delle metriche è parte integrante del codice dell’applicativo, KPI di questo tipo sono molto significativi perchè danno

un valore costantemente aggiornato sul corretto funzionamento. Un esempio di KPI White-box è l’errore sulla singola previsione.

Black Box Le metriche sono periodicamente collezionate da un software esterno che valuta gli effetti del prodotto sull’ambiente di esecuzione. Ad esempio, una me-

trica black box è lo stato di funzionamento di un determinato servizio, o il numero di elementi salvati in un database al termine dell’ultima esecuzione di un processo

Batch.

Documenti correlati