Il cliente
Testbusters prepara gli studenti ai test di ammissione dei corsi di laurea a numero chiuso in Italia, con un forte accento su Medicina, Odontoiatria e Veterinaria. Una parte centrale della preparazione è l'esercitazione: affrontare quiz nelle stesse condizioni della prova reale, più e più volte, e misurare i propri progressi.
La sfida
Con la pandemia di Covid-19 e i vincoli sugli assembramenti, la formazione in presenza non era più possibile. Testbusters ha dovuto digitalizzare in tempi rapidi l'intera offerta, affiancando alla didattica a distanza un simulatore di quiz online.
Noi ci siamo occupati del simulatore: una piattaforma che doveva reggere decine di migliaia di studenti, spesso collegati negli stessi momenti, senza rallentamenti e senza far lievitare i costi.
La prima versione
La prima versione del simulatore è stata sviluppata in PHP con rendering lato server, su un framework realizzato internamente, con database MySQL e un'interfaccia basata su Bootstrap personalizzato tramite SASS. Il tutto girava su una VPS on-premise con Apache.
La piattaforma funzionava, ma il modello infrastrutturale mostrava presto i suoi limiti: una VPS va dimensionata sul carico massimo e si paga per intero anche quando resta inutilizzata. Per servire decine di migliaia di utenti la spesa aveva raggiunto circa 600 dollari al mese.
La migrazione a un'architettura serverless
Abbiamo quindi deciso di scomporre il monolite PHP e passare a un'architettura serverless, in cui le risorse si attivano solo quando servono e scalano automaticamente con il numero di utenti.
Il primo passo è stato MongoDB App Services. Quando MongoDB ne ha annunciato la dismissione, abbiamo migrato l'intera logica su AWS, mantenendo MongoDB Atlas come database: i dati sono rimasti dov'erano e la transizione è stata trasparente per gli studenti.
Tutta l'infrastruttura è descritta come codice con AWS CDK: ogni risorsa è versionata, riproducibile e modificabile in modo controllato, senza configurazioni manuali.
Prima e dopo
Prima
- Monolite PHP con rendering lato server
- Database MySQL
- VPS on-premise con Apache, dimensionata sui picchi
- Circa 600 $ al mese
Dopo
- API Gateway e AWS Lambda
- MongoDB Atlas
- Serverless su AWS, infrastruttura come codice con CDK
- Circa 80 $ al mese, a parità di utenti
L'architettura
- Amazon Cognito
- Autenticazione e gestione degli utenti.
- Amazon DynamoDB
- Login passwordless e memorizzazione dei codici temporanei di accesso.
- API Gateway + AWS Lambda
- API e logica applicativa, in modalità proxy.
- Amazon S3
- Hosting dei contenuti statici.
- MongoDB Atlas
- Database di domande, simulazioni e risultati.
- Amazon SES
- Invio delle email transazionali.
- AWS CDK
- Definizione e rilascio dell'intera infrastruttura come codice.
I risultati
- Costi infrastrutturali scesi da circa 600 a circa 80 dollari al mese, con la stessa base di utenti.
- Scalabilità automatica: le risorse crescono con gli studenti collegati e si riducono quando il traffico cala.
- Accesso passwordless, senza password da ricordare o reimpostare.
- Infrastruttura interamente descritta come codice, versionata e riproducibile.
