Na manhã de 22 de setembro, o torun.ai começou a arrastar-se. Uma quinta de navegadores automáticos, mais de dois mil endereços em três quartos de hora, pedia as nossas páginas públicas uma a uma, e no pior minuto chegou a cerca de três páginas por segundo. Um site devia aguentar isso sem pestanejar. O nosso não aguentou: na janela mais carregada, mais de um quarto dos pedidos demorou mais de trinta segundos, e centenas de visitantes desistiram antes de a página chegar.
Não era a carga que pensávamos
Os suspeitos óbvios eram o robô e o processador. Nenhum se confirmou. Quando repetimos as mesmas três páginas por segundo contra uma cópia do site, este aguentou menos de um minuto e depois deixou de concluir fosse o que fosse. O uso do processador caiu de 60 por cento para 1, enquanto o número de threads subia de 12 para 166. Um servidor sobrecarregado trabalha mais; este estava à espera.
Uma ida e volta por cada palavra
Observar o servidor de cache durante uma única página mostrou do que estava à espera. Uma página enviou-lhe 585 comandos, e 428 eram uma mesma consulta e a sua renovação, repetidas: uma tabela de traduções que, no nosso site, está vazia. Cada texto traduzido da página, e uma página tem centenas, voltava a pedi-la, e cada pedido prendia um thread até a resposta chegar. A três páginas por segundo os threads esgotaram-se, e tudo ficou em fila atrás deles.
A correção, e um limite
Essas consultas passam a ser respondidas a partir da memória durante um minuto de cada vez, pedidas uma só vez quando expiram e limpas no servidor que altera uma tradução. A mesma página envia agora 31 comandos em vez de 585. Pusemos também um limite à frente da geração de páginas: um número fixo de páginas é gerado de cada vez, uma fila curta espera, e tudo o que passar disso recebe logo um «tente de novo daqui a pouco» em vez de tornar todas as páginas mais lentas.
Medido em produção
Depois da versão de 23 de setembro, voltámos a medir o site em produção. A página mediana é gerada em 42 milissegundos, contra 249, e a mais lenta em cada vinte em 72 milissegundos, contra quase dois segundos. A consulta que corria 214 vezes por página corre agora uma vez.
A lição que registámos é simples: um número de capacidade é uma medição, não uma crença. Nunca tínhamos testado o que o site público aguentava. Agora testámos, e voltaremos a testar antes de indicar um número.