1.500 persone al lancio, nessun disservizio
Una piattaforma web aspettava 1.500 persone nello stesso momento. In prova le registrazioni si mettevano in fila: ho trovato il blocco nel codice e ho preparato l'infrastruttura per il giorno del lancio.
Il contesto
Una piattaforma web con area riservata stava per aprire al pubblico. Il giorno del lancio erano attese oltre 1.500 persone, quasi tutte nello stesso momento.
Il problema
Tutto girava su un solo server: applicazione, database e servizi. Se quella macchina si fermava, si fermava tutto.
Poi c'era un problema che non si vedeva. Nelle prove di carico le registrazioni si mettevano in fila: il 95% si chiudeva entro 8 secondi, ma qualcuna arrivava a 24. Per chi si registra il giorno del lancio, 24 secondi sono una pagina chiusa.
La soluzione
Prima ho cercato la causa, poi ho pensato ai server.
- Il blocco nel codice. Le registrazioni si aspettavano una con l'altra per un blocco nel codice. L'ho corretto per primo.
- Server che si aggiungono da soli. Un bilanciatore distribuisce il traffico su un gruppo che passa da 2 a 6 server in base al carico.
- Database e code gestiti. Sono servizi gestiti nel cloud, con i dati in un data center a Milano.
- Rilasci con la rete sotto. Se dopo un rilascio qualcosa non va, la piattaforma torna da sola alla versione precedente.
- Prove di carico. Ho simulato la folla del lancio prima del passaggio, non dopo.
- Il passaggio. Ho spostato la piattaforma tre giorni prima del lancio e ho verificato che i dati fossero identici a quelli di partenza.
Il risultato
- Le registrazioni sono più veloci dell'86%: il 95% si chiude entro 1,1 secondi, contro gli 8 di prima.
- Nelle prove di carico gli errori sono stati lo 0%.
- Nei controlli, lo 0% delle risposte conteneva dati di un altro utente.
- Il lancio è avvenuto nella data prevista.
- Nei giorni del lancio la piattaforma ha lavorato con tre server invece di due, per prudenza.
- Il giorno dopo, con il traffico reale, i server lavoravano al 5% della CPU e al 12% della memoria, con alcune centinaia di richieste al minuto.
- Il rilascio successivo è passato senza nessun allarme.
Cosa controllare prima di un lancio
- Prima di aggiungere server, cerca dove si ferma il lavoro: qui il collo di bottiglia stava nel codice.
- Le prove di carico si fanno con il numero di persone che aspetti davvero, prima del giorno del lancio.
- Sotto carico, oltre alla velocità, controlla che ognuno veda solo i propri dati.
- Un passaggio è finito quando i dati coincidono, non quando la copia termina.
Dettagli modificati per tutelare la riservatezza del cliente.
Benefici
- Registrazioni chiuse in poco più di un secondo anche nel picco
- Server che si aggiungono da soli quando arriva la folla
- Rilasci che tornano indietro da soli se qualcosa va storto
- Dati conservati in un data center a Milano
Funzionalità
- Bilanciatore del carico con da 2 a 6 server
- Database e code gestiti nel cloud
- Ritorno automatico alla versione precedente dopo un rilascio
- Prove di carico prima del passaggio
- Verifica che i dati spostati siano identici agli originali
Hai un problema simile?
Raccontami cosa ti serve: ti rispondo io, di solito entro un giorno lavorativo.