Keširanje slika brojača u memoriji
U ovom članku
Blizu petine slika brojača koje ova usluga crta više ništa ne menja. Skript za praćenje miša iz prethodne generacije ponovo učitava sliku pri svakom pokretu, a pošto ti zahtevi više ništa ne uvećavaju, dva uzastopna daju istu sliku, bajt po bajt.
Očigledan kandidat za keš. Zanimljive odluke bile su gde ga smestiti i po čemu ga ključevati.
Ne na disk
Ovo radi na malom serveru, a disk je SD kartica. Keširanje nacrtanih slika na nju značilo bi otprilike 70 MB upisa dnevno, u zamenu za izmerenu uštedu od 1,6 minuta procesorskog vremena dnevno.
To je loša razmena. SD kartice otkazuju od upisivanja, a ono što se kupuje je greška zaokruživanja na mašini koja nije ograničena procesorom. Zato keš živi u /dev/shm, što je tmpfs, što je RAM. Tamo izmereno: 0,027 ms za čitanje, 0,036 ms za upis, 1,9 GB slobodno.
Sve nestaje pri ponovnom pokretanju. Za keš to nije gubitak, to je uobičajen slučaj.
Redis radi na istoj mašini. Nije korišćen, iz razloga koji nema veze sa tehnologijom: pripada drugoj aplikaciji i za nju je zaštićen lozinkom. Deljenje jedne instance povezalo bi dve nepovezane usluge, tako da loš dan jedne postane loš dan druge.
Ključ sadrži brojeve
Uobičajen ključ keša je identitet plus rok važenja, a rok važenja je opklada: ništa važno se nije promenilo u poslednjih pet minuta. Kod brojača, ono što se menja upravo je ono što je prikazano.
Zato prikazane vrednosti idu u ključ. Ako se broj promeni, to je drugi ključ i slika se crta iznova. Opklada nestaje umesto da se pažljivo kladi. Svaka izbrojana poseta uvećava barem ukupan zbir, pa nijedna izbrojana poseta ne može da dobije zastarelu sliku. Preostali rok važenja samo je gornja granica za vrednosti koje nisu u ključu — nedeljne, mesečne i godišnje cifre.
Šta je trebalo prvo proveriti
Keš je bezbedan samo ako je ono što kešira funkcija svog ključa. To je tvrdnja o svakom dizajnu, i proverena je umesto da se pretpostavi:
- nijedan dizajn ne koristi
rand(),mt_rand(),shuffle()iliuniqid() - nijedan dizajn ne čita sat preciznije nego po satu
- parametri praćenja iz starog skripta ne čitaju se nigde u stablu
Ovo poslednje dalo je najbolji neuspeh celog poduhvata. Dok su ti parametri još bili deo ključa, svaki zahtev je nosio malo drugačije koordinate miša, pa je svaki ključ bio jedinstven. Keš je radio ceo dan i zabeležio 13 pogodaka. Radio je savršeno i nije radio ništa, što je najteža vrsta kvara za primećivanje.
A ako bilo šta ovde zakaže — nečitljiv direktorijum, pun disk, oštećen unos — slika se jednostavno crta na uobičajen način. Keš nikada ne sme da bude razlog zbog kog se brojač ne pojavljuje.