La mattina del 22 settembre torun.ai ha cominciato ad arrancare. Una fattoria di browser automatici, più di duemila indirizzi in tre quarti d'ora, chiedeva le nostre pagine pubbliche una alla volta, e nel minuto peggiore arrivava a circa tre pagine al secondo. Un sito dovrebbe reggerlo senza battere ciglio. Il nostro no: nella fascia più carica oltre un quarto delle richieste ha impiegato più di trenta secondi, e centinaia di visitatori hanno rinunciato prima che la pagina arrivasse.
Non il carico che pensavamo
I sospettati ovvi erano il crawler e il processore. Nessuno dei due ha retto. Riproducendo le stesse tre pagine al secondo su una copia del sito, questa ha tenuto meno di un minuto e poi non ha più completato nulla. L'uso del processore è sceso dal 60 per cento all'1 mentre i thread salivano da 12 a 166. Un server sovraccarico lavora di più; questo aspettava.
Un andata e ritorno per ogni parola
Osservare il server di cache durante una sola pagina ha mostrato cosa aspettava. Una pagina gli inviava 585 comandi, e 428 erano una stessa richiesta e il suo rinnovo, ripetuti: una tabella di traduzioni che, per il nostro sito, è vuota. Ogni testo tradotto della pagina, e una pagina ne ha centinaia, la richiedeva di nuovo, e ogni richiesta teneva occupato un thread finché non arrivava la risposta. A tre pagine al secondo i thread sono finiti, e tutto si è messo in coda dietro di loro.
La correzione, e un limite
Ora quelle richieste vengono servite dalla memoria per un minuto alla volta, recuperate una sola volta alla scadenza e svuotate sul server che modifica una traduzione. La stessa pagina ora invia 31 comandi invece di 585. Abbiamo anche messo un limite davanti alla generazione delle pagine: si genera un numero fisso di pagine alla volta, una breve coda attende, e tutto ciò che va oltre riceve subito un «riprova tra un momento» invece di rallentare ogni pagina.
Misurato in produzione
Dopo il rilascio del 23 settembre abbiamo misurato di nuovo il sito in produzione. La pagina mediana si genera in 42 millisecondi, contro 249, e la più lenta su venti in 72 millisecondi, contro quasi due secondi. La richiesta che partiva 214 volte per pagina ora parte una volta.
La lezione che abbiamo annotato è semplice: un dato di capacità è una misura, non una convinzione. Non avevamo mai provato quanto reggesse il sito pubblico. Ora lo abbiamo fatto, e lo rifaremo prima di dichiarare un numero.