Kontaktovať podporu

Odpovedáme e-mailom, zvyčajne do dvoch dní.

Google reCAPTCHA kontroluje toto podanie na ochranu pred zneužitím; údaje sa prenášajú spoločnosti Google. Skript sa načíta až pri otvorení tohto formulára.

← Všetky príspevky

Vyrovnávacia pamäť pre obrázky počítadiel v RAM

O obsahu a jeho overovaní

V tomto článku

Takmer pätina obrázkov počítadiel, ktoré táto služba vykresľuje, už nič nemení. Skript na sledovanie myši z predchádzajúcej generácie znovu načítava obrázok pri každom pohybe a odkedy tieto požiadavky prestali čokoľvek zvyšovať, dve po sebe vytvoria ten istý obrázok, bajt po bajte.

Zjavný kandidát na vyrovnávaciu pamäť. Zaujímavé bolo rozhodnúť, kam ju umiestniť a podľa čoho ju kľúčovať.

Nie na disk

Toto beží na malom serveri a disk je karta SD. Ukladanie vykreslených obrázkov do vyrovnávacej pamäte na nej by znamenalo približne 70 MB zápisov denne, výmenou za nameranú úsporu 1,6 minúty času procesora denne.

To je zlý kompromis. Karty SD zlyhávajú v dôsledku zapisovania a kupovanou vecou je zaokrúhľovacia chyba na stroji, ktorý nie je obmedzený procesorom. Vyrovnávacia pamäť je preto v /dev/shm, čo je tmpfs, teda RAM. Zmerané tam: 0,027 ms na čítanie, 0,036 ms na zápis, 1,9 GB voľných.

čo by to stálo denne70 MBčo by to získalo denne1,6 minzámerne odlišné jednotky — práve to je kompromis

Pri reštarte všetko zmizne. Pre vyrovnávaciu pamäť to nie je strata, ale bežný prípad.

Na tom istom stroji beží Redis. Nepoužil sa z dôvodu, ktorý vôbec nesúvisí s technológiou: patrí inej aplikácii a je pre ňu chránený heslom. Zdieľanie jednej inštancie by spojilo dve nesúvisiace služby, takže zlý deň jednej by sa stal zlým dňom druhej.

Kľúč obsahuje čísla

Bežným kľúčom vyrovnávacej pamäte je identita a koniec platnosti a koniec platnosti je stávka: za posledných päť minút sa nič dôležité nezmenilo. Pri počítadle sa mení práve to, čo sa zobrazuje.

Zobrazené hodnoty preto vstupujú do kľúča. Ak sa číslo zmení, je to iný kľúč a obrázok sa vykreslí nanovo. Stávka zmizne namiesto toho, aby sa robila opatrne. Každá započítaná návšteva zvýši aspoň celkový počet od začiatku, takže žiadnej započítanej návšteve sa nemôže poskytnúť zastaraný obrázok. Zostávajúca platnosť je iba hornou hranicou pre hodnoty, ktoré nie sú v kľúči — týždenné, mesačné a ročné údaje.

Čo sa muselo overiť najprv

Vyrovnávacia pamäť je bezpečná iba vtedy, keď je ukladaná vec funkciou svojho kľúča. Je to tvrdenie o každom dizajne a bolo overené, nie predpokladané:

  • žiadny dizajn nepoužíva rand(), mt_rand(), shuffle() ani uniqid()
  • žiadny dizajn nečíta hodiny s jemnejším rozlíšením než na hodiny
  • parametre sledovania zo starého skriptu sa nikde v strome nečítajú

Posledný bod priniesol najlepšie zlyhanie celého cvičenia. Kým boli tieto parametre súčasťou kľúča, každá požiadavka niesla trochu odlišné súradnice myši, takže každý kľúč bol jedinečný. Vyrovnávacia pamäť bežala celý deň a zaznamenala 13 úspešných zásahov. Fungovala dokonale a nerobila nič, čo je najťažšie spozorovateľný druh poruchy.

A ak tu niečo zlyhá — nečitateľný adresár, plný disk, poškodená položka — obrázok sa jednoducho vykreslí bežným spôsobom. Vyrovnávacia pamäť nikdy nesmie byť dôvodom nezobrazenia počítadla.

Reklama