Ráno 22. září se torun.ai sotva pohyboval. Farma automatizovaných prohlížečů, přes dva tisíce adres za tři čtvrtě hodiny, si vyžadovala naše veřejné stránky jednu po druhé a v nejhorší minutě to bylo asi tři stránky za sekundu. Web by to měl zvládnout bez mrknutí oka. Náš nezvládl: v nejvytíženějším úseku trvala víc než čtvrtina požadavků přes třicet sekund a stovky návštěvníků to vzdaly dřív, než stránka dorazila.
Nebyla to zátěž, kterou jsme čekali
Zjevnými podezřelými byli crawler a procesor. Ani jeden neobstál. Když jsme stejné tři stránky za sekundu přehráli proti kopii webu, vydržela méně než minutu a pak už nedokončila vůbec nic. Využití procesoru kleslo z 60 procent na 1, zatímco počet vláken vzrostl z 12 na 166. Přetížený server pracuje víc; tenhle čekal.
Cesta tam a zpět za každé slovo
Sledování serveru mezipaměti během jediné stránky ukázalo, na co čekal. Jedna stránka mu poslala 585 příkazů a 428 z nich byl pořád dokola jeden dotaz a jeho obnovení: tabulka překladů, která je pro náš web prázdná. Každý přeložený text na stránce, a stránka jich má stovky, se na ni ptal znovu a každý dotaz držel vlákno, dokud nepřišla odpověď. Při třech stránkách za sekundu vlákna došla a všechno se za nimi seřadilo do fronty.
Oprava a limit
Tyto dotazy se teď vyřizují z paměti vždy na minutu, po vypršení se načtou jen jednou a vymažou se na serveru, který mění překlad. Stejná stránka teď posílá 31 příkazů místo 585. Před vytváření stránek jsme dali i limit: najednou vzniká pevný počet stránek, čeká krátká fronta a vše nad to okamžitě dostane „zkuste to za chvíli znovu“, místo aby zpomalilo každou stránku.
Změřeno v produkci
Po vydání 23. září jsme živý web změřili znovu. Medián stránky vznikne za 42 milisekund místo 249 a nejpomalejší z dvaceti za 72 milisekund místo téměř dvou sekund. Dotaz, který běžel 214krát na stránku, teď běží jednou.
Poučení, které jsme si zapsali, je prosté: údaj o kapacitě je měření, ne víra. Nikdy jsme nezkoušeli, co veřejný web vydrží. Teď už ano, a než nějaké číslo uvedeme, vyzkoušíme to znovu.