Metodi di distribuzione
È possibile prendere in considerazione diverse strategie e varianti per l'implementazione di nuove versioni del software in un processo di consegna continua. Questa sezione illustra i metodi di implementazione più comuni: tutto contemporaneamente (implementazione in loco), in sequenza, immutabile e blu/verde. AWS indica quali di questi metodi sono supportati da AWS CodeDeploy e AWS Elastic Beanstalk.
Nella tabella seguente sono riepilogate le caratteristiche di ciascun metodo di implementazione.
Metodo | Impatto di una distribuzione non riuscita | Orario di distribuzione | Nessun tempo di inattività | Nessuna modifica DNS | Processo di rollback | Codice distribuito in |
---|---|---|---|---|---|---|
Implementazione in loco | Tempo di inattività |
|
☓ | ✓ | Ridistribuisci | Istanze esistenti |
In sequenza | Singolo batch fuori servizio. Qualsiasi batch completato con successo prima del fallimento dell'esecuzione di una nuova versione dell'applicazione. |
|
✓ | ✓ | Ridistribuisci | Istanze esistenti |
In sequenza con batch aggiuntivi (beanstalk) | Minimo se il primo batch ha esito negativo; altrimenti simile a quello dell'implementazione in sequenza. |
|
✓ | ✓ | Ridistribuisci | Istanze nuove ed esistenti |
Non modificabile | Minima |
|
✓ | ✓ | Ridistribuisci | Nuove istanze |
Suddivisione del traffico | Minima |
|
✓ | ✓ | Reindirizza il traffico e termina le nuove istanze | Nuove istanze |
Blu/verde | Minima |
|
✓ | ☓ | Ritorna all'ambiente precedente | Nuove istanze |
Tutto contemporaneamente (implementazione in loco)
L'implementazione Tutto contemporaneamente (in loco) è un metodo che puoi utilizzare per implementare il nuovo codice dell'applicazione in una flotta di server esistente. Questo metodo sostituisce tutto il codice in un'unica operazione di implementazione. Prevede tempi di inattività perché tutti i server della flotta vengono aggiornati contemporaneamente. Non è necessario aggiornare i registri DNS esistenti. Se l'implementazione non riesce, l'unico modo per ripristinare le operazioni è ripetere l'implementazione del codice su tutti i server.
In AWS Elastic Beanstalk, questo metodo di implementazione è denominato Tutto contemporaneamente ed è disponibile per applicazioni singole e con bilanciamento del carico. In AWS CodeDeploy, questo metodo di implementazione è denominato Implementazione in loco con una configurazione di implementazione di AllAtOnce
.
Implementazione in sequenza
Con l'implementazione in sequenza, la flotta è suddivisa in porzioni in modo da non doverla aggiornare in contemporanea. Durante il processo di implementazione, due versioni software, la nuova e la vecchia, sono in esecuzione sulla stessa flotta. Questo metodo consente di applicare l'aggiornamento senza tempi di inattività. Se l'implementazione non riesce, sarà interessata solo la porzione aggiornata della flotta.
Una variante del metodo di implementazione in sequenza, chiamata rilascio canary, comporta l'implementazione della nuova versione del software inizialmente su una porzione molto ridotta di server. In questo modo, è possibile osservare come si comporta il software nell'ambiente di produzione su pochi server, riducendo al minimo l'impatto delle modifiche che causano interruzioni. In caso di un tasso elevato di errori risultanti da una distribuzione canary, il software viene ripristinato allo stato precedente. In caso contrario, la percentuale di server con la nuova versione viene gradualmente aumentata.
AWS Elastic Beanstalk ha seguito il modello di implementazione in sequenza con due opzioni di implementazione: in sequenza e in sequenza con batch aggiuntivi. Queste opzioni consentono all'applicazione di dimensionare verso l'alto prima di mettere fuori servizio i server, preservando così la piena capacità durante l'implementazione. AWS CodeDeploy applica questo pattern come una variazione dell'implementazione in loco con pattern come OneAtATime e HalfAtATime.
Implementazione immutabile e blu/verde
Il pattern immutabile specifica l'implementazione del codice dell'applicazione tramite l'avvio di un set completamente nuovo di server con una nuova configurazione o versione del codice dell'applicazione. Questo pattern sfrutta la funzionalità cloud in base a cui le nuove risorse del server vengono create con semplici chiamate API.
La strategia di implementazione blu/verde è un tipo di implementazione immutabile che richiede anche la creazione di un altro ambiente. Una volta che il nuovo ambiente è attivo e ha superato tutti i test, il traffico viene spostato su questa nuova implementazione. Fondamentalmente, il vecchio ambiente, ovvero l'ambiente "blu", viene mantenuto inattivo nel caso in cui sia necessario un ripristino dello stato precedente.
AWS Elastic Beanstalk supporta i pattern di implementazione immutabile e blu/verdi. Anche AWS CodeDeploy supporta il pattern blu/verde. Per ulteriori informazioni su come i servizi AWS applicano questi pattern immutabili, consulta il whitepaper Implementazioni blu/verdi su AWS