
Dietro le quinte
Black Friday Week 2024: tutti gli aggiornamenti da Digitec Galaxus
di Jana Pense
Il Black Friday regala emozioni non solo ai fan dello shopping ma anche ai team di Software Engineering di Digitec Galaxus. L'obiettivo è chiaro: il negozio deve essere in grado di far fronte alla grande affluenza. I preparativi iniziano già in estate.
Prima di entrare a far parte di Digitec Galaxus quest'autunno in qualità di Software Engineer, mi sono sempre chiesto cosa succedesse dietro le quinte durante le grandi giornate di sconti come Black Friday e Cyber Monday. Quest'anno non solo posso soddisfare la mia curiosità, ma anche accompagnarti in un tour attraverso le fasi di preparazione. In qualità di sviluppatore nel team responsabile della nostra Community, quest'anno mi trovo nel bel mezzo dell'azione.
Tutto ha inizio in una calda giornata di luglio: il comitato organizzativo delle giornate di saldi di quest'anno si riunisce per la prima volta e prepara una prima previsione. Ecco alcune domande: quanti clienti ci aspettiamo? Quali sono i preparativi da fare? A quali scenari speciali devono prepararsi i team? Quali sono i pericoli? Le informazioni ricavate da queste analisi aiutano il Product Development (il nostro sviluppo software interno) a fornirti un'esperienza di acquisto ottimale durante la settimana del Black Friday.
Nei mesi successivi, il Category Management dà il massimo e scova le offerte migliori. Naturalmente, gli oggetti del desiderio devono essere disponibili in tempo per i giorni delle offerte. Allo stesso tempo, il nostro personale logistico sposta le offerte speciali nel sistema di stoccaggio automatico preventivamente. In questo modo, i prodotti ordinati raggiungono più velocemente il reparto di imballaggio per essere spediti il più in fretta possibile.
Ospitiamo quasi tutti i nostri sistemi di negozio in un cosiddetto cluster Kubernetes su Microsoft Azure Cloud. In poche parole, un cluster Kubernetes è costituito da un gran numero di server virtuali, chiamati anche nodi. I nostri sistemi funzionano su questi server. La configurazione standard è sufficiente per 358 giorni all'anno. Durante la settimana del Black Friday, tuttavia, ci aspettiamo un traffico molto più intenso sui nostri negozi. Per i giorni di punta, quindi, espandiamo il cluster con altri nodi in modo da poter scalare i nostri sistemi più in alto. Questo approccio è efficiente ed ecologico, in quanto i server possono essere noleggiati da altri clienti di Azure Cloud dopo la settimana promozionale e non rimangono inutilizzati.
Ma non sono solo i server aggiuntivi a essere richiesti. I nostri team di sviluppo devono anche preparare i feature nella loro area di responsabilità per il grande carico. Nel mio caso, si tratta di caricare e aggiungere commenti o valutazioni. A tal fine, utilizziamo uno strumento che simula un carico utile elevato per testare il comportamento del nostro negozio in questo scenario. Questi risultati e il numero di utenti ipotizzato ci mostrano dove ci sono ancora dei colli di bottiglia nel sistema. Poco prima della settimana promozionale, facciamo un po' di shopping e affittiamo i nodi aggiuntivi in modo da essere pronti per il grande afflusso.
L'anno scorso il nostro negozio è andato in crash per un breve periodo dopo la mezzanotte del Black Friday. Per arrivare alla causa, dobbiamo dare un'occhiata alla struttura del negozio. Il nostro negozio è suddiviso in più parti. Quello che si vede sullo schermo è il cosiddetto front-end. Anche io lavoro su questo ogni giorno. Per questa parte utilizziamo React JS, il rendering lato server con Next JS, Styled Components e Apollo per le richieste di rete. Poi c'è il middleware GraphQL. Qui accettiamo tutte le richieste dal front-end, le inoltriamo ai sistemi back-end pertinenti e restituiamo le risposte nel formato richiesto dal front-end. I sistemi di back-end forniscono la magia dietro le quinte. In questi sistemi, ci assicuriamo che tutti i dati siano memorizzati nel posto giusto e che vengano emessi rapidamente.
Tra i back-end e il middleware GraphQL, utilizziamo una Redis Cache per memorizzare nella cache i dati a cui si accede di frequente, ad esempio quelli relativi ai prodotti. Questo riduce il carico sui nostri database (MongoDB, SQL Server) e su altri sistemi.
L'anno scorso, il nostro sistema GraphQL è stato scalato fino al punto di essere eseguito su 2000 server virtuali simultaneamente e di effettuare decine di migliaia di query al secondo sulla già citata cache Redis. A un certo punto, la cache non è stata più in grado di elaborare le richieste e si sono verificati degli errori. Inoltre, si è verificato un errore dell'applicazione che ripeteva le stesse richieste all'infinito. Questo ha moltiplicato nuovamente il carico, mettendo in ginocchio la cache. Di conseguenza, molte richieste sono finite sul database, il che ha rallentato enormemente il negozio e alla fine ha portato a un breve periodo di inattività. Naturalmente, non vogliamo ripetere lo stesso errore. Dopo questo incidente, abbiamo rivisto la nostra strategia di caching e ora ci affidiamo a una cache multilivello.
Ora utilizziamo una cache LRU In-Memory come primo livello di cache. I prodotti visitati più di frequente vengono memorizzati nella cache. Questo aiuta ad attutire i picchi di richieste alla nostra cache Redis. Abbiamo inoltre corretto l'errore di applicazione dell'anno scorso, in modo che una richiesta errata venga riproposta una sola volta. In questo modo possiamo evitare di sovraccaricare la cache Redis.
Dal Black Friday e Cyber Monday 2021, abbiamo anche rivisto e semplificato il sistema di back-end per le cosiddette «Offerte speciali». Utilizziamo questa funzionalità non solo per le offerte della settimana del Black Friday, ma anche per le offerte giornaliere che proponiamo tutto l'anno. Con questa semplificazione, speriamo di avere meno problemi con la velocità della pagina dell'offerta.
Dopo la teoria, con il Black Friday arriva la pratica. Poco prima del lancio delle offerte, i team scalano manualmente parti dei loro sistemi, come le cache o i database, fino a raggiungere dimensioni precedentemente definite. Per il Black Friday, vogliamo andare sul sicuro e intervenire manualmente in questi punti critici, in modo che sia disponibile un numero sufficiente di server per gestire l'ondata iniziale dopo la mezzanotte. Per le altre parti, il nostro sistema crea automaticamente più capacità se ci sono colli di bottiglia. Pertanto, i nostri server sono pronti a darci dentro.
Le funzioni del negozio che non sono essenziali per il Black Friday vengono disattivate tramite «feature flag». Per una volta, il live feed non ti aggiornerà su chi sta ordinando cosa e da dove. Ci asteniamo inoltre dal raccomandare prodotti e contributi della Community.
Le promozioni vengono memorizzate nei nostri sistemi interni come cosiddette campagne pubblicitarie. Definiamo un periodo di validità per tutti i prodotti e ne determiniamo la disponibilità. Dopodiché, lasciamo che il sistema lavori per noi. Visualizza automaticamente le offerte presenti nel negozio e le evidenzia in grigio se non sono più disponibili.
Ciò di cui non facciamo a meno durante la settimana promozionale è il nostro Continuous Deployment. Non abbiamo un «code freeze». Quindi, se io come sviluppatore voglio rilasciare una modifica nel sistema di versioning e un membro del personale lo conferma nell'area del negozio interessata, tu come cliente vedrai la modifica entro pochi minuti. In questo caso ci affidiamo ai nostri test automatizzati che vengono eseguiti prima di ogni rilascio, oltre che alla responsabilità dei nostre team di engineering.
La notte di martedì (il nostro primo giorno promozionale quest'anno), la notte del Black Friday e la notte del Cyber Monday, ci saranno delle «Emergency Teams Calls» con gli sviluppatori e le sviluppatrici di tutte le aree dell'azienda, che possono reagire immediatamente se qualcosa non va.
Durante la ricerca delle tracce, ho risposto a molte delle mie domande da principiante. Ora non vedo l'ora di vivere la mia prima settimana del Black Friday. La pensi allo stesso modo o vuoi saperne di più su di me? Non svelo nessuna offerta, ma sarò lieto di rispondere alle domande tecniche nei commenti.
Quando non sposto pixel o organizzo byte, spesso mi trovo con i miei droni FPV autocostruiti. Dalle action cam smontate alle grandi cineprese, praticamente tutto ciò che fa video o foto vola in aria con me.