GH GambleHub

Installazione zero-downtime

(Sezione Architettura e Protocolli)

1) Cos'è Zero-Downtime e perché è necessario

Zero-Downtime (ZDT) è un modo per rilasciare nuove versioni dell'applicazione senza la disponibilità del servizio per gli utenti e senza la perdita di richieste. Obiettivi:
  • Zero facile per clienti e integrazioni.
  • Rilascio prevedibile, ritorno rapido e rischio gestito.
  • Conserva SLO/SLI (latitanza, errori, disponibilità) nei limiti degli accordi.

La chiave di ZDT non è una tecnica «magica», ma una combinazione di pattern di consegna, compatibilità dei dati e corretta routing del traffico.

2) Principi di base Zero-Downtime

1. Compatibilità versione: la nuova versione deve gestire il traffico e i dati contemporaneamente.
2. Idampotenza delle operazioni: la riprogettazione non deve interrompere lo stato.
3. Completamento grazioso (graceful shutdown) e drenaggio delle connessioni.
4. Controllo sanitario passo passo: readover/liveness campioni, health-endpoint.
5. Il ritorno come primo cittadino è più semplice e veloce di hotfix.
6. Osservabilità by design: etichette di rilascio, dashboard unificati, alert SLO.
7. Automazione: gli script di rilascio e ripristino sono codice, non istruzioni manuali.

3) Cartelli di consegna senza downtime

3. 1 Rolling Update

Rimuoviamo gradualmente alcune istanze della vecchia versione, le aggiorniamo a una nuova versione e le riportiamo al pool.

Vantaggi: risparmio sull'infrastruttura, solo in k8s/ASG.
Contro: per un po "il cluster funziona con due versioni contemporaneamente (variante skew).

3. 2 Blue-Green

Due protesi completi: attivo (Blue) e candidato (Green). Il cambio di traffico è una flip atomica.

Il lato positivo è il ritorno istantaneo, l'isolamento puro.
Contro i costi delle infrastrutture, più complicato con la stateful.

3. 3 Canary/Rollout progressivo

Forniamo una piccola quota di traffico (1-5-10-25-50-100%) alla nuova versione gate per metriche.

I vantaggi sono un minimo di blast radius, una soluzione data-driven.
Contro - bisogno di osservazione matura e routing intelligente.

3. 4 Shadow traffic / Dark launch

Mirroring delle query reali in una nuova versione (senza risposta all'utente) o avvio nascosto per assemblare le metriche.

I vantaggi sono l'identificazione precoce dei problemi.
Contro - doppio carico di dipendenza, dobbiamo controllare gli effetti collaterali.

4) Gestione del traffico e delle connessioni

4. 1 Readiness/Liveness

Liveness dice all'orchestratore «riavvicinami».
«Non guidare il traffico, non sono ancora pronto».
Non è possibile rilasciare senza una corretta logica e timeout.

4. 2 Drenaggio delle connessioni (Connection Draining)

Prima di ritirare l'istanza dal pool:
  • smettete di accettare nuove connessioni,
  • in attesa del completamento degli attivi
  • Interrompiamo il tempo.

4. 3 sessioni Sticky e routing livello L7

Sticky è utile per gli script stateful, ma rende più difficile il bilanciamento del carico di lavoro.
Le regole L7 (percorso, intestazione, cookie, API) sono comode per il canary/ring.

4. 4 Connessioni a lunga durata

WebSocket/gRPC streaming - Accendere il segnale «GOAWAY» prima dell'aggiornamento.
Pianificare Windows per superare gli striam e i becof-retrai client.

5) Compatibilità dei dati e migrazione del database

5. 1 Expand-Migrate-Contract

1. Espand - Aggiungi nuove colonne/indici/tabelle senza stravolgere la versione precedente.
2. Migrate - Trasferiamo i dati di sottofondo e idipotente (batch, checkpoint).
3. Contract - Rimuoviamo il vecchio solo dopo la stabilizzazione.

5. 2 Pratiche

Evitare l'esclusivo DDL-lock nella finestra di rilascio.
Versionare i contratti API/eventi (schema registry, CDC).
Per le migrazioni pesanti, strumenti online, repliche, spostamenti graduali.
Record dual-write (dual-write) solo con deduplicazione e utenti idipotenti.
Outbox/Inbox per l'integrazione affidabile attraverso le code.

6) Cache, sessioni e operazioni di sfondo

Sessioni e cache esterne (Redis/Memcached) in modo che le versioni siano scambiabili.
Riscaldamento della cache/jit/indice di ritmo prima di essere incluso nel pool.
Separare le code di sfondo per versione o utilizzare la leadership per evitare corse.

7) Osservabilità e gate SLO

Golden signals: latitanza p95/p99, error rate, RPS, saturation, fila.
Business SLA: autorizzazioni, conversioni, pagamenti completi, rinuncia ai passi del vortice.
Il rollout è avanzato solo se canary ≤ baseline + soglia di degrado, e non brucia.

8) Completamento sicuro e ripristino

Il ritorno è la stessa piplina, solo al contrario: comandi fissi, non craft manuale.
Per blue-green - flip back; canary - perdita di peso fino allo 0% o precedente passo stabile.
Dati: transazioni compensative, rielaborazione, deduplicazione degli eventi.

9) Assegno-fogli Zero-Downtime

Prima del lancio

  • Assemblaggio di un manufatto firmato (immutabile), SBOM e controllo delle dipendenze.
  • Readava/liveness sono stati implementati e testati.
  • Piano di migrazione in modalità expand, reversibilità confermata.
  • Dashboard e alert per la nuova versione sono pronti, etichette di rilascio sono pronte.
  • Il ripristino è stato convalidato su staging/pre-prod.

Durante il lancio

  • Il drenaggio delle connessioni è acceso, i timeout sono adeguati.
  • Il traffico viene tradotto gradualmente (canary/ring) o flip (blue-green).
  • Le metriche vengono confrontate con baseline e le soglie di gate vengono rispettate.

Dopo il lancio

  • Post-monitoraggio N ore, nessun incidente.
  • Migrazioni contract completate e bandiere/percorsi temporanei rimossi.
  • Retrospettiva, aggiornamento playbook.

10) Anti-pattern

Recreate-deplay senza drenaggio e readehi le query.
Il DDL non è pronto per blocchi e timeout in prima serata.
Combinazione di diagrammi incompatibili tra le versioni del servizio.
Nessuna idepotenza nei processori e nei worker.
Senza gate o confronto con baseline.
DNS-TTL lungo con blue-green, che fa sì che la flip duri ore.
Sessione/cache locale nella memoria dell'istanza di rolling/canary.

11) Script di implementazione

11. 1 Kubernetes (rolling + canary)

Deployment с `maxUnavailable=0`, `maxSurge=25%`.
Readavain attesa di riscaldamento (inizializzazione cache, migrazione minore).
Strumenti-mesh/Ingress con weighted routing (1-5-10-25-50-100%).
Alert: p95, 5xx, fila, vortice d'affari.

11. 2 Blue-Green nella nuvola

Due pile dietro il bilanciatore. example. com` и `green. example. com`.
Riscaldamento green, smoke/regress, quindi listener/route swap (o failover DNS con TTL basso).
In caso di problemi, flip back istantaneo.

11. 3 Servizio Stateful

Repliche di dati + migrazioni online doppia lettura con validazione.
I jobs di sfondo vengono spostati in base alla «leadership» della versione o alle code divise.
Sessioni/cache fuori sede; sticky è attivato solo temporaneamente.

12) Phicheflagi e applicazioni client

I nuovi fili vengono attivati con le bandiere (i segmenti sono i dipendenti del Beta).
Per i client mobile/disctop, tenere conto dei limiti di compatibilità del protocollo e della sopravvivenza delle versioni precedenti (deprecation policy, server-side fallback).

13) Prestazioni e costi

Rolling è più economico, ma richiede una compatibilità attenta.
Blue-Green è più costoso durante il lancio, ma il rimborso è immediato.
Canary bilancia rischi e costi, ma richiede una forte osservabilità.
Risparmiare attraverso l'espansione ephemerale e pulizia automatica degli stand.

14) Piplining minimo ZDT

1. Build: un unico artefatto, firma, SBOM.
2. Test: unit/integration/contract + security.
3. Staging: smoke, carico di lavoro, migrazioni in modalità expand, controllo di ripristino.
4. Prod: shadow → canary (gate) o blue-green flip.
5. Post-deploy - osservazione, contract-cleanup, retrò.

15) Breve riepilogo

Zero-Downtime è una disciplina: versioni compatibili + routing corretto + migrazioni gestite + osservabilità e ripristino rapido. Scegli un pattern sotto il contesto (rolling, blue-green, canary), automatizzi i gate SLO, tieni i dati idipotenti - e le release smetteranno di essere un evento, diventando un processo di routine affidabile.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.