Cos'è il canary deployment? Guida pratica per gli SRE

Riassunto

Cos'è il canary deployment? È una strategia di rilascio che invia la nuova versione a una piccola quota di traffico di produzione, spesso il 5 per cento, e la confronta con la versione stabile per una finestra di tempo fissa. Se errori e latenza reggono rispetto al controllo, il rollout si allarga a gradini. Se no, si interrompe e si torna indietro. Limita il raggio d'impatto, ma funziona solo con metriche per versione e traffico sufficiente a produrre un segnale.

Ingegnere che osserva grafici di latenza canary e baseline su due monitor, con una piccola statuina gialla di canarino sulla scrivania

Il canary deployment è una tecnica di rilascio in cui una nuova versione viene messa in produzione su una piccola porzione del traffico, confrontata con la versione già in esecuzione, e allargata solo se i numeri reggono. Quindi, cos'è il canary deployment in pratica? È un deploy con un punto di decisione integrato: la modifica raggiunge per prima l'1-5 per cento degli utenti, e un controllo sulle metriche decide se proseguire o tornare indietro.

Il resto di questa guida spiega come funziona, dove fallisce e cosa conviene automatizzare.

La pagina delle 3 di notte che un canary avrebbe trasformato in un messaggio Slack

Un deploy parte alle 16:40 di un giovedì. Il tasso di errore del servizio checkout sale dallo 0.2 al 4 per cento. Nessuno se ne accorge finché un ticket di supporto arriva due ore dopo, quando ormai ogni utente ha eseguito la nuova build. Il rollback richiede 25 minuti perché la migrazione è applicata a metà.

Lo stesso cambiamento, eseguito come canary sul 5 per cento del traffico, produce un danno circoscritto. Circa 1 utente su 20 vede il bug, il confronto con il controllo fallisce in pochi minuti e la pipeline si ferma. Il post-mortem racconterebbe cosa il canary ha intercettato, non cosa ha mancato.

Piccolo canarino giallo appollaiato su un gancio di lanterna in un tunnel di miniera buio

Il nome viene dalle miniere di carbone, dove il canarino smetteva di cantare prima che l'aria diventasse letale. La coorte ridotta svolge lo stesso ruolo. Non impedisce la release difettosa: limita chi la respira.

Cosa fa davvero un canary deployment, passo dopo passo

Il Google SRE Workbook definisce il canarying come un rilascio parziale e a tempo limitato di una modifica, più una valutazione che decide se il rollout prosegue. Il sottoinsieme che esegue la modifica è il canary. Il resto della flotta è il controllo. Questa impostazione conta: rende il canary un test A/B sull'affidabilità reale, non un deploy lento.

Una sequenza tipica è questa:

Il ciclo è semplice. La parte difficile è il confronto, che la maggior parte dei team implementa come «qualcuno guarda una dashboard».

Canary, blue-green e rolling: quale si adatta alla modalità di guasto

Questi tre approcci vengono confusi di continuo, quindi ecco la distinzione che conta quando si sceglie.

Si sceglie blue-green quando il rischio è un deploy rotto che si rileva con uno smoke test e si ripristina in pochi secondi. Si sceglie il canary quando il rischio è una regressione sottile che solo il traffico reale fa emergere: un aumento della latenza p99, una perdita di memoria lenta, un piano di query che cede con i dati di produzione.

Il canary va evitato se il servizio ha un traffico molto basso. Con poche centinaia di richieste all'ora, una fetta del 5 per cento dà qualche campione e nessun segnale. Il Workbook lo dice chiaramente: pochissime query non forniscono un segnale utile per carichi di lavoro eterogenei.

Perché un canary all'1 per cento probabilmente mente

Ecco il guasto che colpisce i team nei primi tre mesi. Il canary prende il 5 per cento del traffico e fallisce il 20 per cento delle sue richieste. Il tasso di errore dell'intero servizio passa da 0.2 a circa 1.2 per cento. La soglia di allarme è al 2 per cento. Non scatta nulla.

Il monitoraggio aggregato nasconde i fallimenti del canary. La stessa aritmetica compare nel Workbook SRE: un canary che fallisce il 20 per cento delle richieste su un 5 per cento di traffico mostra solo un 1 per cento di errore globale. Bisogna scomporre le metriche per popolazione, canary contro controllo, altrimenti il segnale si perde nel denominatore.

Vista aerea di un'autostrada in cui una corsia è isolata da coni arancioni mentre le altre scorrono normalmente

Altre tre trappole da conoscere:

Scegliere le metriche di gate prima del rilascio, non durante l'incidente

Si parte dagli SLI. Se il servizio ha già uno SLI di disponibilità e uno di latenza, questi sono i primi due gate. Un insieme di partenza ragionevole per un servizio guidato dalle richieste:

Le soglie sono il punto in cui i team perdono settimane. Se sono troppo strette, ogni canary si interrompe per il rumore e gli ingegneri imparano a scavalcare il gate. Se sono troppo larghe, una build difettosa passa. Vanno riviste con una cadenza regolare. Un gate che in sei mesi non ha mai interrotto nulla è perfetto oppure decorativo, e conviene scoprire quale dei due.

Inoltre, l'intervallo di aggregazione delle metriche non deve superare la finestra del canary. Un rollup di 10 minuti su un canary di 5 minuti confonde tutto.

Un canary in configurazione: come appaiono gli step in Argo Rollouts

In Kubernetes, la specifica canary di Argo Rollouts esprime la sequenza come una lista di step. Ecco una versione condensata, nella forma descritta dalla documentazione:

strategy:
  canary:
    steps:
      - setWeight: 5
      - pause: { duration: 30m }
      - analysis:
          templates:
            - templateName: error-rate-vs-baseline
      - setWeight: 25
      - pause: { duration: 30m }
      - setWeight: 50
      - pause: {}

Due dettagli della documentazione meritano attenzione. Senza un router del traffico, il peso è approssimato dal numero di pod, su base indicativa: 10 repliche al 10 per cento significano un pod canary e nove stabili. È matematica sulle repliche, non sulle richieste. E un pause: {} senza durata attende indefinitamente finché qualcuno non esegue kubectl argo rollouts promote, un gate umano che si può volere oppure no.

Se lo step di analisi fallisce, il rollout viene interrotto. È la parte in cui conviene investire.

Pannello di controllo industriale con un interruttore rosso di ripristino protetto e file di spie verdi

I feature flag sono l'altra metà di un canary sicuro

I canary infrastrutturali dividono il traffico per istanza o per pod. I canary basati su flag lo dividono per utente, per account o per qualsiasi attributo selezionabile. Le due tecniche rispondono a domande diverse. La prima chiede se la nuova build è sana. La seconda chiede se il nuovo comportamento è accettabile, e permette di disattivarlo senza un redeploy.

Per i rollout guidati da flag conta lo strumento. LaunchDarkly ha le regole di targeting più mature e il registro di audit più completo, e vince sull'ampiezza dell'ecosistema. Il suo prezzo a scala enterprise è la lamentela più diffusa tra i responsabili di piattaforma.

Statsig unisce sperimentazione e flag, ed è adatto ai team che vogliono valutazioni basate su metriche sulla stessa piattaforma. Ha meno senso se serve soltanto un kill switch.

Il compromesso onesto: una piattaforma di flag offre rollout percentuali, ma la maggior parte non legge da sola gli SLO. Qualcuno deve ancora collegare la metrica alla decisione.

Serve una fonte di confronto che possa dividere per versione

Qualunque strumento guidi il rollout, il verdetto arriva dalla telemetria. Ogni metrica deve avere un'etichetta di versione o di coorte, e il backend deve poterla interrogare senza un ritardo di 10 minuti.

Datadog lo fa bene con le scomposizioni basate su tag, e il suo tracciamento dei deploy correla i rilasci con i picchi di errore. Il costo con alta cardinalità va modellato prima di taggare tutto.

Grafana con Prometheus funziona se è già in uso e le metriche sono etichettate per revisione di rollout. Si ottiene pieno controllo, ma la manutenzione resta a carico del team.

Automatizzare l'interruzione: da dove nasce l'idea del pilota AI

L'analisi manuale del canary scala male. Con dieci deploy al giorno nessuno fissa una dashboard per 30 minuti ogni volta, e così il gate diventa silenziosamente «sembra a posto». Il modello che regge è un giudice automatico: si definiscono l'SLO e il confronto, e un controller interrompe e ripristina quando il canary consuma il budget di errore più in fretta del controllo.

È il problema che l'AI Pilot di upstreamapi affronta: legge il segnale SLO durante il rollout e attiva un auto-rollback quando il tasso di errore supera la soglia impostata. Misura tasso di errore e latenza rispetto alla coorte stabile, niente di più misterioso. Se si usano già i template di analisi di Argo Rollouts con una buona query Prometheus, si dispone di gran parte della stessa capacità, e conviene dirlo a chiunque venda soluzioni magiche. Un pilota ospitato trova la sua ragion d'essere negli stack eterogenei, dove ogni team dovrebbe altrimenti mantenere i propri template di analisi.

Un errore ricorrente: i team automatizzano lo step di promozione e non automatizzano mai l'interruzione. Una pipeline che sa solo andare avanti è un nastro trasportatore.

Cosa misurare per capire se il processo canary funziona

Un programma canary ha le proprie metriche. Da monitorare nell'arco di un trimestre:

Eseguire un solo canary alla volta per servizio. Il Workbook lo raccomanda con forza, e il motivo è pratico: due modifiche sovrapposte rendono impossibile l'attribuzione, e non si sa quale delle due abbia causato il danno.

Da dove cominciare questa settimana

Scegliere un servizio stateless con traffico sufficiente per produrre un segnale in 15 minuti. Aggiungere un'etichetta di versione alle sue metriche di errore e latenza. Scrivere una sola query di confronto, canary contro controllo. Eseguire un canary del 5 per cento con promozione manuale e annotare cosa si sarebbe intercettato negli ultimi tre incidenti.

Poi conviene porsi la domanda scomoda: se il canary fosse fallito alle 02:00, qualcosa lo avrebbe fermato senza un umano sveglio?

Domande frequenti

Cos'è il canary deployment in parole semplici?
È un metodo di rilascio in cui una nuova versione serve per prima una piccola percentuale di traffico reale, mentre la vecchia versione serve il resto. Si confrontano le metriche di salute tra i due gruppi. Se la nuova versione regge, si aumenta la sua quota fino a gestire tutto il traffico. Se no, si torna indietro.
In cosa il canary deployment si differenzia dal blue-green deployment?
Il blue-green mantiene due ambienti completi e sposta tutto il traffico in un colpo solo: il rollback è immediato, ma lo switch espone il 100 per cento degli utenti. Il canary espone prima una piccola frazione e giudica la nuova versione rispetto alla vecchia sul traffico reale. Il canary ha un raggio d'impatto minore e una complessità operativa più alta.
Quale percentuale di traffico deve ricevere un canary?
Non esiste un numero universale. Il Google SRE Workbook usa come esempio il 5 per cento per 30 minuti. La fetta deve essere abbastanza grande e durare abbastanza da produrre un segnale statisticamente utile, che dipende dal volume di traffico e da quanto sono uniformi le richieste.
Quali metriche devono bloccare un canary?
Si parte dagli SLI: tasso di errore e latenza, confrontati tra canary e controllo. Si aggiunge un segnale di saturazione attribuibile alla modifica e una metrica di business, se si riesce a isolarla per coorte. Meglio evitare metriche rumorose come l'uso grezzo della CPU, e tenere la lista corta.
Qual è la differenza tra canary release e canary deployment?
Alcuni team usano canary release per l'esposizione agli utenti di una funzionalità e canary deployment per il rollout infrastrutturale più ampio. Molti considerano i termini intercambiabili. Ciò che conta è che una coorte limitata riceva la modifica per prima e che un controllo delle metriche decida cosa succede dopo.
Si può fare un canary deployment senza Kubernetes?
Sì. Funziona qualsiasi meccanismo che divide il traffico per versione: un load balancer con routing pesato, un service mesh, una regola CDN o un feature flag che seleziona una percentuale di utenti. Strumenti come Argo Rollouts automatizzano gli step su Kubernetes, ma il pattern non dipende da essi.