Na manhã de 22 de setembro, o torun.ai começou a se arrastar. Uma fazenda de navegadores automatizados, mais de dois mil endereços em três quartos de hora, pedia nossas páginas públicas uma a uma, e no pior minuto chegou a cerca de três páginas por segundo. Um site deveria aguentar isso sem esforço. O nosso não aguentou: na janela mais carregada, mais de um quarto das requisições levou mais de trinta segundos, e centenas de visitantes desistiram antes de a página chegar.
Não era a carga que imaginá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, ele aguentou menos de um minuto e depois parou de concluir qualquer coisa. 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 esperando.
Uma ida e volta para cada palavra
Observar o servidor de cache durante uma única página mostrou o que ele esperava. Uma página enviou 585 comandos a ele, e 428 eram uma mesma consulta e 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, pedia de novo, e cada pedido segurava um thread até a resposta voltar. A três páginas por segundo os threads acabaram, e tudo ficou na fila atrás deles.
A correção, e um limite
Essas consultas agora são respondidas da memória por um minuto de cada vez, buscadas uma única vez quando expiram e limpas no servidor que altera uma tradução. A mesma página agora envia 31 comandos em vez de 585. Também colocamos um limite na frente da geração de páginas: um número fixo de páginas é gerado de cada vez, uma fila curta espera, e o que passar disso recebe na hora um "tente de novo daqui a pouco" em vez de deixar todas as páginas lentas.
Medido em produção
Depois da versão de 23 de setembro, medimos de novo o site no ar. A página mediana é gerada em 42 milissegundos, antes 249, e a mais lenta a cada vinte em 72 milissegundos, antes quase dois segundos. A consulta que rodava 214 vezes por página agora roda uma vez.
A lição que anotamos é simples: um número de capacidade é uma medição, não uma crença. Nunca tínhamos testado quanto o site público aguentava. Agora testamos, e vamos testar de novo antes de afirmar um número.