SOS Fanta: come abbiamo gestito il traffico con picchi da 10x

Nella settimane a cavallo tra Agosto e Settembre, il portale SOS Fanta ha ricevuto un grande incremento di visitatori dovuto al termine del calciomercato, all’inizio delle attività legate al fantacalcio e al rilascio delle Push Notifications sull’applicazione mobile.
In questo post ti racconto come abbiamo affrontato la problematica e gestito picchi di traffico che decuplicavano il numero di richieste ricevuto dall’infrastruttura.

Negli ultimi anni abbiamo gestito siti con grandi volumi di traffico, come Calcio Mercato, e questa esperienza ci ha permesso di maturare una grande competenza nella gestione di picchi di traffico. Abbiamo gestito l’incremento di traffico su SOS Fanta andando ad effettuare una revisione dell’infrastruttura e una serie di ottimizzazioni sull’applicazione, un’installazione WordPress.
WordPress è ad oggi la base di partenza per milioni di progetti web nel mondo, viene utilizzato da aziende e professionisti non solo per la creazione di blog ma in generale per la creazione di piattaforme di pubblicazione online.

 

Definizione dell’infrastruttura

 

infrastruttura

 

Per gestire l’incremento di richieste abbiamo disegnato l’infrastruttura inserendo due istanze AWS EC2, create su due differenti Availability Zones all’interno della region di Francoforte.
La distribuzione del carico su queste due istanze viene effettuata grazie all’utilizzo di un bilanciatore, che tramite degli Health Check verifica il corretto funzionamento dell’applicazione.
Per l’istanza di database abbiamo scelto di utilizzare il servizio AWS RDS, utilizzando Aurora come motore di database relazionale.

Per poter avere una base dati comune su tutta l’infrastruttura, abbiamo utilizzato un plugin per gestire i media, appoggiandoci sullo storage ad oggetti di Amazon (S3) e idephix come tool per effettuare il deploy del codice.
Abbiamo scelto di utilizzare un servizio di CDN come Cloudfront per poter inserire uno strato di cache. Questo ci ha permesso di scaricare le istanze EC2 da gran parte delle richieste e quindi di ottimizzarne il dimensionamento.
Una serie di controlli gestiti attraverso il servizio AWS CloudWatch ci permettono di monitorare lo stato dell’infrastruttura. Questi controlli possono inserire automaticamente, quando necessario, nuove istanze nel bilanciatore.

 

SOS Traffico

Per poter analizzare le performance dell’applicazione, abbiamo inserito un Application Performance Monitoring (APM) come New Relic.
Questo ci ha permesso di analizzare nel dettaglio il funzionamento dell’applicazione, andando ad effettuare una serie di ottimizzazioni sul codice e sulle query che venivano effettuate verso il database.
Abbiamo installato il plugin WP offload s3 che ci ha permesso di spostare i contenuti statici (immagini e assets) verso un bucket S3 e di fornirli durante l’apertura del sito direttamente dallo storage ad oggetti.

Nonostante questo, durante l’invio di notifiche push dall’applicazione mobile riscontravamo problematiche nell’infrastruttura.
Come si nota dal grafico qui sotto, in una situazione di traffico senza notifiche push le istanze gestiscono una media di 3000 richieste al secondo.
L’incremento di richieste nei cinque minuti immediatamente successivi all’invio di una notifiche, provoca l’aumento delle richieste di tredici volte il numero di richieste effettuate normalmente.

traffico richieste grafico

 

Ottimizzazioni WordPress

Grazie all’analisi dei log di accesso nei server web abbiamo individuato un alto numero di chiamate verso le application programming interface (API) da parte dell’applicazione mobile.

L’attivazione di Cloudfront, per quanto riguarda le API e i contenuti statici, permette di ridurre ulteriormente il numero di richieste effettuate verso le istanze.
Inoltre, abbiamo introdotto uno strato di cache che potesse gestire un picco come quello rilevato negli istanti successivi all’invio di una notifica push.

Cloudwatch, sistema di monitoraggio e analisi del log, ci ha permesso di effettuare nuove revisione del codice e di ottimizzare ulteriormente la configurazione di CloudFront.
In questo modo abbiamo raggiunto una percentuale di Hits vicina al 99% per le richieste effettuate verso i primi 50 oggetti più richiesti.

 

In conclusione

La stretta collaborazione tra il team Ops e il team Dev, unitamente ad un lavoro di precisione, ci ha permesso di raggiungere questo risultato. Ad oggi, possiamo offrire al cliente un’infrastruttura pronta per scalare e gestire numeri ben più grandi di quelli gestiti quotidianamente.