path deployment

in Architetture Software, Informatica

Path per Advanced Deployment

Reading Time: < 1 minute

Una volta definita la struttura dei processi e dell’infrastruttura di una CI/CD, si procede con la definizione delle strategie che devono essere adottati nei vari ambienti di rilascio. Tipicamente sono presenti diversi ambienti con ruoli differenti e con funzionalità differenti.

L’utilizzo di ambienti separati può avvenenire utilizzando path differenti:

  • blue-green deployment: prevede carichi e bilanciamenti separati durante il deployment
  • A/B testing: prevede l’utilizzo di due ambienti per testare l’iteazione con l’utente
  • canary deployment: prevede aggiornamenti parziali dell’intera infrastruttura

Blue-green deployment

In questo scenario, in produzione sono presenti due ambienti completamente identici (ambiente blu e ambiente green), ma solo uno dei due è attivo. La pubblicazione del nuovo software viene effettuata nell’ambiente inattivo. Soltanto quando tutte le nuove implementazioni sono state testate correttamente, viene effettualo switch dell’ambiente di produzione su quello nuovo. Questo scambio solitamente può essere attivato mediante la modifica su ELB (Elastic Load Balancer).

A/B testing

E’ uno scenario leggermente piu’ complesso: vengono impostati due diversi design con opportune metriche di valutazione. Vengono utilizzati entrambi e al termine vengono comparati i risultati delle metriche. Dopo aver confrontato quale tipo di scenario ha avuto risultato migliori in base alle metriche definite, si può procedere aumentando il numero di utenti che partecipano ai test (un pò come succede nel canary release).

Canary Release

Tecnicamente l’approccio è molto simile al Blue-Green deployment, con l’unica differenza che il rilascio dedicato ai test viene effettuato verso un sottoinsieme di utenti. Una volta effettuati i test con un sottoinsieme limitato di utenti, normalmente si procede aumentandone il numero fino a quando tutti non avranno effettuato la transizione. Questa scenario può essere utilizzato anche per l’implementazione gestite tramite test: apprrocciando lo sviluppo con testing incrementali è possibile migliorare lo sviluppo introducendo a poco a poco funzionalità e debug mirati.