Scopri quando usare Blue/Green o Canary, come funziona lo spostamento del traffico, cosa monitorare e passaggi pratici di rollout e rollback per rilasci più sicuri.

Rilasciare nuovo codice è rischioso per una ragione semplice: non sai davvero come si comporterà finché gli utenti reali non lo usano. Blue/Green e Canary sono due modi comuni per ridurre quel rischio mantenendo il downtime vicino allo zero.
Un deployment blue/green usa due ambienti separati ma simili:
Prepari l'ambiente Green in background—distribuisci la nuova build, esegui controlli, lo preriscaldi—e poi sposti il traffico da Blue a Green quando sei sicuro. Se qualcosa va storto, puoi tornare rapidamente indietro.
L'idea chiave non è “due colori”, ma un passaggio netto e reversibile.
Un rilascio canary è un rollout graduale. Invece di cambiare tutto in una volta, invii la nuova versione a una piccola porzione di utenti prima (per esempio, 1–5%). Se tutto sembra sano, estendi il rollout passo dopo passo fino al 100% del traffico.
L'idea chiave è imparare dal traffico reale prima di impegnarti completamente.
Entrambi gli approcci sono strategie di deployment che mirano a:
Lo fanno in modi diversi: Blue/Green punta a uno switch rapido tra ambienti, mentre Canary si basa sull'esposizione controllata tramite spostamento del traffico.
Nessun approccio è automaticamente superiore. La scelta giusta dipende da come viene usato il prodotto, da quanto sei sicuro nei test, da quanto velocemente vuoi feedback e da che tipo di failure vuoi evitare.
Molte squadre li combinano—usando Blue/Green per semplicità infrastrutturale e tecniche Canary per l'esposizione graduale agli utenti.
Nelle sezioni successive li confronteremo direttamente e mostreremo quando ciascuno funziona meglio.
Blue/Green e Canary sono entrambi modi per rilasciare cambiamenti senza interrompere gli utenti—ma differiscono nel modo in cui il traffico si sposta verso la nuova versione.
Blue/Green esegue due ambienti completi: “Blue” (corrente) e “Green” (nuovo). Verifichi Green, poi sposti tutto il traffico in una volta—come premere un interruttore controllato.
Canary invia la nuova versione prima a una piccola fetta di utenti (per esempio 1–5%), poi sposta gradualmente il traffico mentre osservi le prestazioni nel mondo reale.
| Fattore | Blue/Green | Canary |
|---|---|---|
| Velocità | Cutover molto rapido dopo la validazione | Più lento per design (rollout a gradini) |
| Rischio | Medio: una release difettosa colpisce tutti dopo lo switch | Minore: i problemi spesso emergono prima del rollout completo |
| Complessità | Moderata (due ambienti, switch pulito) | Più alta (split del traffico, analisi, step graduali) |
| Costo | Più alto (praticamente raddoppi capacità durante il rollout) | Spesso più basso (puoi scalare con la capacità esistente) |
| Migliore per | Cambiamenti grandi e coordinati | Miglioramenti frequenti e piccoli |
Scegli Blue/Green quando vuoi un momento di taglio pulito e prevedibile—soprattutto per cambiamenti grandi, migrazioni o release che richiedono una netta separazione “vecchio vs nuovo”.
Scegli Canary quando distribuisci spesso, vuoi imparare dal traffico reale in sicurezza e preferisci ridurre il blast radius lasciando che le metriche guidino ogni passo.
Se sei indeciso, parti con Blue/Green per semplicità operativa, poi aggiungi Canary per i servizi ad alto rischio quando il monitoraggio e le pratiche di rollback sono consolidate.
Blue/Green è una buona scelta quando vuoi che i rilasci si sentano come un “colpo di interruttore”. Esegui due ambienti di produzione: Blue (corrente) e Green (nuovo). Quando Green è verificato, instradi gli utenti lì.
Se il tuo prodotto non può tollerare finestre di manutenzione visibili—flussi di checkout, sistemi di prenotazione, dashboard autenticati—Blue/Green aiuta perché la nuova versione è avviata, preriscaldata e controllata prima che gli utenti reali vi siano indirizzati. Gran parte del “tempo di deploy” avviene fuori dalla vista dei clienti.
Il rollback spesso è solo rimettere il traffico su Blue. Questo è prezioso quando:
Il vantaggio chiave è che il rollback non richiede ricostruire o ridistribuire—è uno switch di traffico.
Blue/Green è più semplice quando le migrazioni del database sono backward compatible, perché per un periodo Blue e Green possono coesistere (e leggere/scrivere entrambi, a seconda del routing e della configurazione dei job).
Esempi adatti:
Esempi rischiosi: rimuovere colonne, rinominare campi o cambiare significati in place—questi possono rompere la promessa di “tornare indietro” a meno di migrazioni in più fasi.
Blue/Green richiede capacità extra (due stack) e un modo per dirigere il traffico (load balancer, ingress o routing della piattaforma). Se hai già automazione per provisioning e una leva di routing pulita, Blue/Green diventa la scelta pratica per release ad alta confidenza e basso stress.
Un rilascio canary è una strategia dove distribuisci un cambiamento a una piccola fetta di utenti reali, impari da ciò che succede e poi espandi. È la scelta giusta quando vuoi ridurre il rischio senza fermare tutto per un grande rilascio “tutto in una volta”.
Canary funziona meglio per app ad alto traffico perché anche l'1–5% del traffico può fornire dati significativi rapidamente. Se già monitori metriche chiare (tasso di errori, latenza, conversione, completamento checkout, timeout API), puoi validare la release su pattern di uso reale invece di affidarti solo agli ambienti di test.
Alcuni problemi emergono solo sotto carico reale: query DB lente, cache miss, latenza regionale, dispositivi insoliti o flussi utente rari. Con un canary puoi confermare che il cambiamento non aumenta gli errori né degrada le prestazioni prima che raggiunga tutti.
Se il tuo prodotto viene rilasciato frequentemente, ha più team che contribuiscono o include cambiamenti che possono essere introdotti gradualmente (tweak UI, esperimenti di prezzo, logiche di raccomandazione), i canary sono naturali. Puoi espandere da 1% → 10% → 50% → 100% in base a quanto osservi.
Il canary si sposa bene con le feature flag: puoi distribuire il codice in sicurezza e poi abilitare la funzionalità per un sottoinsieme di utenti, regioni o account. I rollback diventano meno drammatici—spesso basta spegnere una flag anziché ridistribuire.
Se miri alla delivery progressiva, i canary sono spesso il punto di partenza più flessibile.
Vedi anche: /blog/feature-flags-and-progressive-delivery
Lo spostamento del traffico significa semplicemente controllare chi riceve la nuova versione della tua app e quando. Invece di spostare tutti in una volta, trasferisci le richieste gradualmente (o selettivamente) dalla versione vecchia a quella nuova. È il cuore pratico sia di un deployment blue/green sia di un rilascio canary—ed è ciò che rende un rilascio senza downtime realistico.
Puoi spostare il traffico in diversi punti dello stack. La scelta giusta dipende da cosa già usi e da quanto controllo fine ti serve.
Non hai bisogno di tutti i livelli. Scegli una sola “fonte di verità” per le decisioni di routing così che la tua gestione delle release non diventi approssimazione.
La maggior parte dei team usa uno (o un mix) di questi approcci per lo spostamento del traffico:
La percentuale è più facile da spiegare, ma le cohort sono spesso più sicure perché puoi controllare quali utenti vedono il cambiamento (e evitare di sorprendere i clienti più importanti nelle prime ore).
Due elementi rompono comunemente piani di deployment solidi:
Sticky sessions (affinità di sessione). Se il tuo sistema vincola un utente a un server/versione, uno split al 10% potrebbe non comportarsi come il 10%. Può anche causare bug confusi quando gli utenti rimbalzano tra versioni durante la sessione. Se puoi, usa storage sessione condiviso o assicurati che il routing mantenga un utente coerentemente su una versione.
Cache warming. Le nuove versioni spesso incontrano cache fredde (CDN, cache applicativa, cache di query DB). Questo può sembrare un peggioramento delle prestazioni anche quando il codice è a posto. Pianifica tempo per preriscaldare le cache prima di aumentare il traffico, specialmente per pagine ad alto traffico e endpoint costosi.
Considera i cambiamenti di routing come modifiche di produzione, non come un click occasionale.
Documenta:
Quella piccola governance evita che persone volenterose “spostino al 50%” mentre ancora verificavi se il canary è sano.
Un rollout non è solo “il deploy è riuscito?” È “gli utenti reali stanno avendo una esperienza peggiore?” Il modo più semplice per restare calmi durante Blue/Green o Canary è osservare un piccolo insieme di segnali che ti dicono: il sistema è sano e la modifica sta danneggiando i clienti?
Tasso di errori: monitora 5xx HTTP, fallimenti di richiesta, timeout e errori di dipendenze (DB, pagamenti, API terze parti). Un canary che aumenta “piccoli” errori può comunque generare molto lavoro al supporto.
Latenza: osserva p50 e p95 (e p99 se disponibile). Una modifica che mantiene stabile la latenza media può comunque creare code lunghe che gli utenti percepiscono.
Saturazione: guarda quanto è “pieno” il sistema—CPU, memoria, IO disco, connessioni DB, depth delle code, pool di thread. Problemi di saturazione spesso emergono prima dei blackout.
Segnali d'impatto utente: misura ciò che gli utenti esperiscono davvero—fallimenti nel checkout, successo del login, risultati di ricerca restituiti, crash dell'app, tempi di caricamento delle pagine chiave. Questi sono spesso più significativi dei soli numeri infrastrutturali.
Crea una dashboard compatta che stia su uno schermo e sia condivisa nel canale di rilascio. Mantienila coerente ad ogni rollout così le persone non perdono tempo a cercare grafici.
Includi:
Se fai un canary release, segmenta le metriche per versione/gruppo di istanze così puoi confrontare canary vs baseline. Per blue/green, confronta il nuovo ambiente vs il vecchio durante la finestra di cutover.
Decidi le regole prima di spostare traffico. Esempi di soglie:
I numeri esatti dipendono dal tuo servizio, ma la cosa importante è l'accordo. Se tutti conoscono il piano di rollback e i trigger, eviti discussioni mentre i clienti sono impattati.
Aggiungi (o stringi temporaneamente) gli alert specifici per le finestre di rollout:
Mantieni gli alert azionabili: “cosa è cambiato, dove e cosa fare dopo”. Se gli alert sono rumorosi, la gente ignorerà il segnale importante quando lo spostamento del traffico è in corso.
La maggior parte dei fallimenti nei rollout non è causata da “bug grandi”. Sono mismatch piccoli: una config mancante, una migrazione DB sbagliata, un certificato scaduto o un’integrazione che si comporta diversamente nel nuovo ambiente. I controlli pre‑rilascio sono l'occasione per trovare questi problemi quando il blast radius è ancora ridotto.
Prima di spostare qualsiasi traffico (sia per blue/green che per canary), conferma che la nuova versione sia viva e in grado di servire richieste.
I test unitari sono utili, ma non provano che il sistema distribuito funzioni. Esegui una breve suite end‑to‑end automatizzata contro il nuovo ambiente che finisca in minuti, non ore.
Concentrati su flussi che attraversano confini di servizio (web → API → DB → terze parti) e includi almeno una richiesta “reale” per ogni integrazione chiave.
I test automatici a volte tralasciano l'ovvio. Fai una verifica mirata e orientata all'uomo dei workflow principali:
Se supporti ruoli multipli (admin vs cliente), campiona almeno un percorso per ruolo.
Una checklist trasforma la conoscenza tribale in una strategia ripetibile. Tienila breve e actionabile:
Quando questi controlli sono di routine, lo spostamento del traffico diventa un passo controllato—non un salto nel vuoto.
Un rollout blue/green è più semplice da eseguire quando lo tratti come una checklist: prepara, distribuisci, valida, switcha, osserva, poi pulisci.
Spedisci la nuova versione nell'ambiente Green mentre Blue continua a servire traffico reale. Mantieni config e segreti allineati così Green sia un vero mirror.
Esegui controlli veloci e ad alto segnale: l'app parte correttamente, le pagine chiave si caricano, pagamenti/login funzionano e i log sembrano normali. Se hai smoke test automatici, eseguili ora. È anche il momento per verificare che dashboard e alert per Green siano attivi.
Blue/Green si complica con il database. Usa un approccio espandi/contrai:
Questo evita scenari in cui “Green funziona, Blue si rompe” durante lo switch.
Prima di switchare il traffico, preriscalda le cache critiche (home page, query comuni) così gli utenti non pagano il costo del “cold start”.
Per job in background/cron, decidi chi li esegue:
Inverti il routing da Blue a Green (load balancer/DNS/ingress). Osserva tasso di errori, latenza e metriche di business per una breve finestra.
Esegui un controllo in stile utente reale, poi mantieni Blue disponibile brevemente come fallback. Una volta stabile, disabilita i job di Blue, archivia i log e deprovisiona Blue per ridurre costi e confusione.
Un canary rollout riguarda l'apprendimento sicuro. Invece di mandare subito tutti gli utenti alla nuova versione, esponi una piccola fetta del traffico reale, osserva da vicino e poi espandi. L'obiettivo non è “andare piano”, è “dimostrare che è sicuro” con prove a ogni passo.
Distribuisci la nuova versione insieme alla versione stabile corrente. Assicurati di poter instradare una percentuale definita di traffico a ciascuna e che entrambe le versioni siano visibili nel monitoraggio (dashboard separate o tag aiutano).
Parti piccolissimo. Qui i problemi evidenti emergono in fretta: endpoint rotti, config mancanti, sorprese nelle migrazioni DB o picchi di latenza imprevisti.
Annota per questa fase:
Se il primo stage è pulito, aumenta fino a circa un quarto del traffico. Vedrai più varietà reale: comportamenti utente diversi, dispositivi della long tail, casi limite e concorrenza più alta.
A metà traffico diventano più evidenti i problemi di capacità e performance. Se raggiungerai un limite di scalabilità, spesso i segnali precoci emergono qui.
Quando le metriche sono stabili e l'impatto utente è accettabile, sposta tutto il traffico sulla nuova versione e dichiara la promozione.
I tempi dipendono da rischio e volume di traffico:
Considera anche i cicli di business. Se il tuo prodotto ha picchi (es.: pause pranzo, weekend, run di fatturazione), esegui il canary abbastanza a lungo da coprire le condizioni che tipicamente causano problemi.
I rollout manuali creano esitazione e inconsistenza. Quando possibile, automatizza:
L'automazione non rimuove il giudizio umano—rimuove il ritardo.
Per ogni step annota:
Questi appunti trasformano la storia dei rollout in un playbook per la prossima release—e rendono gli incidenti futuri molto più semplici da diagnosticare.
I rollback sono più semplici quando decidi prima cosa significa “male” e chi può premere il pulsante. Un piano di rollback non è pessimismo—è come impedisci che piccoli problemi diventino interruzioni prolungate.
Scegli una lista corta di segnali e imposta soglie esplicite per evitare dibattiti durante un incidente. Trigger comuni includono:
Rendi il trigger misurabile (“p95 > 800ms per 10 minuti”) e assegnalo a un owner (on‑call, release manager) con permesso di agire subito.
La velocità conta più dell'eleganza. Il tuo rollback dovrebbe essere una di queste azioni:
Evita “fix manuale e continua il rollout” come prima mossa. Stabilizza prima, indaga dopo.
Con un canary, alcuni utenti potrebbero aver creato dati con la nuova versione. Decidi in anticipo:
Una volta stabile, scrivi una breve nota post‑azione: cosa ha causato il rollback, quali segnali mancavano e cosa cambierai nella checklist. Trattalo come un ciclo di miglioramento prodotto per il processo di rilascio, non come un esercizio di colpa.
Le feature flag separano “deploy” (spedire codice in produzione) da “release” (attivarlo per le persone). Questo è importante perché puoi usare la stessa pipeline—blue/green o canary—controllando l'esposizione con un semplice interruttore.
Con le flag puoi fare merge e deploy in sicurezza anche se una feature non è pronta per tutti. Il codice è presente ma dormiente. Quando sei sicuro, abiliti gradualmente la flag—spesso più velocemente che spingere una nuova build—e se qualcosa va storto puoi disabilitarla altrettanto in fretta.
La consegna progressiva riguarda l'aumento di accesso in passi deliberati. Una flag può essere abilitata per:
Questo è utile quando un canary indica che la versione è sana, ma vuoi comunque gestire il rischio della feature separatamente.
Le feature flag sono potenti, ma solo se governate. Alcuni accorgimenti le mantengono ordinate e sicure:
Una regola pratica: se qualcuno non sa rispondere “cosa succede quando la spegniamo?” la flag non è pronta.
Per una guida più approfondita sull'uso delle flag come parte di una strategia di rilascio, vedi: /blog/feature-flags-release-strategy.
Scegliere tra blue/green e canary non è “qual è migliore”. È cosa vuoi controllare e cosa puoi realisticamente gestire con il tuo team e i tool.
Se la tua priorità principale è un cutover pulito e prevedibile e un facile pulsante “torna alla versione precedente”, blue/green è solitamente la scelta più semplice.
Se la priorità è ridurre il blast radius e imparare dal traffico reale prima di estendere la release, canary è più sicuro—soprattutto quando i cambiamenti sono frequenti o difficili da testare completamente in anticipo.
Una regola pratica: scegli l'approccio che il tuo team può eseguire con costanza alle 2 di notte quando qualcosa va storto.
Scegli un servizio (o un workflow user‑facing) e fai un pilota per alcune release. Scegli qualcosa abbastanza importante da contare, ma non così critico che tutti blocchino. L'obiettivo è costruire memoria muscolare su spostamento del traffico, monitoraggio e rollback.
Tienilo corto—una pagina va bene:
Assicurati che la responsabilità sia chiara. Una strategia senza owner resta un suggerimento.
Prima di aggiungere nuove piattaforme, guarda gli strumenti che già usi: impostazioni del load balancer, script di deploy, monitoraggio esistente e processo di incident. Aggiungi nuovo tooling solo quando rimuove frizioni reali che hai provato nel pilota.
Se stai costruendo e distribuendo servizi rapidamente, piattaforme che combinano generazione app con controlli di deployment possono ridurre il carico operativo. Per esempio, Koder.ai è una piattaforma che permette di creare app web, backend e mobile da un'interfaccia chat—e poi distribuirle e ospitarle con funzioni di sicurezza come snapshot e rollback, oltre al supporto per domini personalizzati ed esportazione del codice sorgente. Queste capacità si allineano bene con l'obiettivo principale di questo articolo: rendere i rilasci ripetibili, osservabili e reversibili.
Se vuoi vedere opzioni di implementazione e workflow supportati, rivedi /pricing e /docs/deployments. Poi pianifica il tuo primo rilascio pilota, registra cosa ha funzionato e itera il runbook dopo ogni rollout.