Kontaktirajte podršku

Odgovaramo e-poštom, obično u roku od dva dana.

Radi zaštite od zloupotrebe, Google reCAPTCHA proverava ovo slanje. Pritom se podaci prenose Googleu. Skripta se učitava tek kada otvorite ovaj formular.

← Sve objave

Keširanje slika brojača u memoriji

O sadržaju i njegovoj proveri

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.

šta bi koštalo, dnevno70 MBšta bi kupilo, dnevno1,6 minrazličite jedinice namerno — u tome je razmena

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() ili uniqid()
  • 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.

Oglas