Obrázky počítadel v mezipaměti RAM
Téměř pětina obrázků počítadel, které tato služba kreslí, už nic nemění. Skript pro sledování myši z předchozí generace načítá obrázek znovu při každém pohybu, a protože tyto požadavky už nic nezvyšují, dva po sobě jdoucí dávají stejný obrázek, bajt po bajtu.
Jasný kandidát na mezipaměť. Zajímavá rozhodnutí byla, kam ji umístit a co použít jako klíč.
Ne na disk
Běží to na malém serveru a diskem je SD karta. Ukládat na ni vykreslené obrázky by znamenalo zhruba 70 MB zápisů denně, výměnou za naměřenou úsporu 1,6 minuty procesorového času denně.
To je špatný obchod. SD karty odcházejí zápisem a to, co se kupuje, je zaokrouhlovací chyba na stroji, který není omezen procesorem. Mezipaměť proto žije v /dev/shm, což je tmpfs, tedy RAM. Naměřeno tam: 0,027 ms čtení, 0,036 ms zápis, 1,9 GB volno.
Při restartu vše zmizí. Pro mezipaměť to není ztráta, je to normální stav.
Na stejném stroji běží Redis. Nepoužil se z důvodu, který nemá nic společného s technikou: patří jiné aplikaci a je pro ni chráněn heslem. Sdílení jedné instance by svázalo dvě nesouvisející služby, takže špatný den jedné by se stal špatným dnem druhé.
Klíč obsahuje čísla
Obvyklý klíč mezipaměti je identita plus doba platnosti, a doba platnosti je sázka: za posledních pět minut se nic důležitého nezměnilo. U počítadla se ale mění právě to, co je zobrazeno.
Zobrazené hodnoty proto jdou do klíče. Když se číslo změní, je to jiný klíč a obrázek se vykreslí nově. Sázka tím mizí, místo aby se uzavírala opatrně. Každá započítaná návštěva zvýší přinejmenším celkový součet, takže žádné započítané návštěvě nemůže být doručen zastaralý obrázek. Zbývající doba platnosti je jen horní mez pro hodnoty, které nejsou v klíči — týdenní, měsíční a roční čísla.
Co bylo potřeba nejdřív ověřit
Mezipaměť je bezpečná jen tehdy, když je to, co ukládá, funkcí svého klíče. To je tvrzení o každém designu a bylo ověřeno, nikoli předpokládáno:
- žádný design nepoužívá
rand(),mt_rand(),shuffle()aniuniqid() - žádný design nečte hodiny jemněji než po hodinách
- sledovací parametry ze starého skriptu se nikde ve stromu kódu nečtou
Ten poslední přinesl nejlepší selhání celého cvičení. Dokud byly tyto parametry součástí klíče, každý požadavek nesl trochu jiné souřadnice myši, takže každý klíč byl jedinečný. Mezipaměť běžela celý den a zaznamenala 13 zásahů. Fungovala dokonale a nedělala nic, což je ten druh poruchy, který se odhaluje nejhůř.
A když tu cokoli selže — nečitelný adresář, plný disk, poškozená položka — obrázek se prostě vykreslí normální cestou. Mezipaměť nesmí být nikdy důvodem, proč se počítadlo nezobrazí.