Rankiem 22 września torun.ai zaczął się wlec. Farma zautomatyzowanych przeglądarek, ponad dwa tysiące adresów w trzy kwadranse, pobierała nasze strony publiczne jedna po drugiej, a w najgorszej minucie było to około trzech stron na sekundę. Strona internetowa powinna to znieść bez mrugnięcia okiem. Nasza nie zniosła: w najbardziej obciążonym oknie ponad jedna czwarta żądań trwała dłużej niż trzydzieści sekund, a setki odwiedzających zrezygnowały, zanim strona dotarła.
Nie to obciążenie, o którym myśleliśmy
Oczywistymi podejrzanymi były robot i procesor. Żaden się nie potwierdził. Gdy odtworzyliśmy te same trzy strony na sekundę na kopii serwisu, wytrzymała mniej niż minutę, a potem przestała cokolwiek kończyć. Użycie procesora spadło z 60 procent do 1, a liczba wątków wzrosła z 12 do 166. Przeciążony serwer pracuje więcej; ten czekał.
Podróż tam i z powrotem dla każdego słowa
Obserwacja serwera pamięci podręcznej podczas jednej strony pokazała, na co czekał. Jedna strona wysyłała do niego 585 poleceń, a 428 z nich to było jedno zapytanie i jego odświeżenie, raz za razem: tabela tłumaczeń, która w naszym serwisie jest pusta. Każdy przetłumaczony tekst na stronie, a strona ma ich setki, pytał o nią od nowa, a każde pytanie trzymało wątek, dopóki nie wróciła odpowiedź. Przy trzech stronach na sekundę wątki się skończyły i wszystko ustawiło się za nimi w kolejce.
Poprawka i limit
Te zapytania są teraz obsługiwane z pamięci przez minutę naraz, pobierane jeden raz po wygaśnięciu i czyszczone na serwerze, który zmienia tłumaczenie. Ta sama strona wysyła teraz 31 poleceń zamiast 585. Postawiliśmy też limit przed generowaniem stron: naraz powstaje stała liczba stron, krótka kolejka czeka, a wszystko ponad to od razu dostaje „spróbuj ponownie za chwilę”, zamiast spowalniać każdą stronę.
Zmierzone na produkcji
Po wydaniu z 23 września zmierzyliśmy działający serwis ponownie. Mediana strony powstaje w 42 milisekundy zamiast 249, a najwolniejsza na dwadzieścia w 72 milisekundy zamiast prawie dwóch sekund. Zapytanie wykonywane 214 razy na stronę wykonuje się teraz raz.
Lekcja, którą zapisaliśmy, jest prosta: liczba opisująca wydajność to pomiar, a nie przekonanie. Nigdy nie sprawdziliśmy, ile zniesie serwis publiczny. Teraz to zrobiliśmy i sprawdzimy ponownie, zanim podamy liczbę.