WBSC: architettura web scalabile in alta affidabilità

Come abbiamo trasformato un sito web WordPress in una applicazione distribuita in Cloud capace di reggere milioni di richieste HTTP ogni ora

WBSC

WBSC è la World Baseball Softball Confederation, l'organizzazione mondiale responsabile del Baseball e del Softball, affiliata all'International Olympic Committee. WBSC è composta da 208 federazioni nazionali in 141 paesi del mondo.

La sfida

Il sito web di WBSC è il principale punto di riferimento per i maggiori portali dedicati allo sport, per le agenzie di stampa internazionali e per le pubblicazioni di settore per quanto riguarda le notizie relative a tutti i tornei e le competizioni internazionali. Per questo motivo, il traffico sul sito web di WBSC può aumentare molto rapidamente, in particolare in concomitanza con tornei o eventi.

Non è raro che il numero di utenti sul sito web aumenti percentualente di migliaia di volte a causa della rapida condivisione sui social network di link diretti a loro, o delle pubblicità sulle reti televisive di tutto il mondo legate ai tornei a loro riconducibili.

Il sito di WBSC è tradotto in cinque lingue tra cui il giapponese, il koreano e il cinese, e gli utenti che lo visitano provengono da tutto il mondo. Oltre alla pubblicazione quotidiana di notizie, il sito contiene regolamenti internazionali e documenti di riferimento per lo sport utilizzati giornamente in tutto il mondo; soprattutto, il sito contiene tutte le statistiche relative a tutte le squadre internazionali e a tutti i giocatori, oltre ai punteggi e ai dati delle partite aggiornati in tempo reale durante le competizioni. Per questo motivo, il sito non è solo un punto di riferimento per appassionati e tifosi, o per gli addetti ai lavori legati alle numerose federazioni nazionali, ma anche per un nutrito staff composto da redattori, editori e traduttori.

Abbiamo realizzato interamente l'infrastruttura in Cloud su cui è ospitato il sito di WBSC; il sito è stato completamente realizzato dalla società di comunicazione VENTIE30, nostro partner per lo sviluppo web.

I punti chiave del progetto erano numerosi e sfidanti; nello specifico il sito deve essere veloce, sicuro, sempre online in tutte le sue funzionalità sia per i visitatori, sia per lo staff che ci lavora. In particolare, per un sito di questo tipo è importante dare la possibilità agli sviluppatori che ci lavorano ogni giorno di poter implementare nuove funzionalità e correggere bug senza rischiare di compromettere il sito in vivo e contemporaneamente potendo agire su di esso continuamente, velocemente e in sicurezza. Tutte le operations devono potersi svolgere senza alcun downtime.

La soluzione

Il primo passo perché l'infrastruttura del sito di WBSC fosse in grado di rispondere alle esigenze del cliente era quello di trasformare il sito web in una applicazione distibuita, in orizzontale e in verticale, su più macchine divise su più layer. Di base il sito web di WBSC è realizzato in WordPress, dunque le componenti fondamentali sono l'applicativo web, il database e il file system; a questi si aggiungono una serie di web services e applicativi a cui il sito web si appoggia, come ad esempio il Play by Play che aggiorna in tempo reale i punteggi delle partite.

Database

Per garantire continuità alle operazioni legate al database abbiamo messo in piedi un sistema as a service con un nodo di scrittura principale e un numero variabile di repliche in lettura con replica sincrona; in questo modo la perdita di un nodo non pregiudica la capacità di recuperare informazioni dal database. Quando non risponde il nodo principale per le scritture entra in gioco il sistema di disaster recovery che promuove automaticamente una delle repliche di lettura a nodo principale, ripristinando dunque la funzionalità completa dell'infrastrututra. Tutti i backup sono automatizzati e replicati su più regioni geografiche.

Data la grande quantità di letture che il database deve sopportare, in particolare quando il traffico scala molto rapidamente, è stato predisposto per il database un layer di caching. L'output delle query più frequenti e pesanti viene salvato su più nodi di memcached, che le serve all'applicativo direttamente dalla RAM per massimizzare la velocità.

File system

Tutti i file su cui l'applicazione deve poter operare, come per esempio file multimediali caricabili direttamente dal sito web o file di configurazione, devono poter essere condivisi tra tutti i server web del cluster. Per questo motivo, è stato implementato un NAS in alta affidabilità, replicato in modo sincrono su più macchine. Anche per il file system i backup vengono effettuati in maniera automatica e replicati su più regioni geografiche.

Web server

I web server che ospitano gli applicativi sono raggiungibili tramite un load balancer in alta affidabilità e scalano automaticamente aumentando il loro numero in base a metriche che vengono periodicamente aggiornate in base all'analisi sui dati di traffico e di consumo di risorse del cluster, per poter scalare in modo sempre più veloce e preciso per poter sopportare il traffico e minimizzare i costi di infrastruttura. Le istanze che non rispondono vengono automaticamente rimosse dal cluster e non ricevono più traffico.

Contenuti statici

Tutti i file statici serviti ai client, come fogli di stile CSS, script JavaScript, immagini e video, sono ospitati su un object storage ridondato in modo da massimizzare la disponiblità dei file, la loro durabilità e per consentire di distribuirli efficacemente su più server in modo da garantire performance elevate e inalterate qualsiasi sia il numero di richieste. A livello di object storage vengono gestiti il caching delle risorse a livello di browser e a livello di edge location della CDN. Sull'object storage vengono salvati anche i log e i report con le metriche aggregate.

Content Delivery Network e Web Application Firewall

Abbiamo implementato per il sito di WBSC una Content Delivery Network distribuita su più di 50 data center in tutto il mondo; in questo modo il tempo di caricamento del sito è uniforme da ovunque lo si visiti. Ogni richiesta passa per la CDN che effettua caching in pull di tutte le pagine web del sito con tempistiche ad-hoc per ogni sezione e invalidation dinamica delle risorse modificate alla radice. Alla CDN si aggancia un web application firewall con gestione dinamica delle regole di esclusione per proteggere il sito dai più comuni attacchi rivolti alle applicationi web.

Dal primo progetto alla collaborazione continuativa

Il lavoro con WBSC ha messo il nostro team alle prese con problemi interessanti e complessi per i quali il cliente aveva bisogno di soluzioni tecnologicamente avanzate e precise, realizzate velocemente. Per un cliente come WBSC il time to market è fondamentale. La collaborazione con VENTIE30 e con il personale del committente si è svolta senza intoppi e si è rivelata un'occasione di crescita per tutte le parti coinvolte nei progetti. La piena soddisfazione del cliente finale ci ha permesso di instaurare un rapporto di collaborazione continuativa con progetti di sviluppo e integrazioni per la gestione dell'uptime e il monitoring dell'infrastruttura, in particolare durante i tornei, per interventi di ottimizzazione dell'architettura e di consulenze legate allo sviluppo.

Il futuro

L'evoluzione delle tecnologie legate al web, le esigenze in crescita del cliente e la collaborazione continuativa ci consentono di pianificare insieme al cliente un piano continuativo di sviluppo. Nello specifico, tra i progetti all'orizzonte ci sono il passaggio completo di tutto il sito web in HTTPS, l'implementazione del protocollo HTTP2, l'integrazione dell'IPv6 end-to-end e la progressiva migrazione, già avviata, verso un'architettura orientata ai microservices attraverso la realizzazione ad-hoc di web services con API REST, in particolare sfruttando tecnologie come Lambda e API Gateway di Amazon Web Services con linguaggi come Node.js e Python. Dal punto di vista del dato, l'architettura sta migrando da un paradigma di data persistency basato principalmente su database relazionali ad un modello di polyglot persistence basato su object storage, SQL e database non relazionali come DynamoDB di Amazon.