Kreiptis pagalbos

Atsakome el. paštu, dažniausiai per dvi dienas.

Google reCAPTCHA tikrina šį pateikimą, kad apsaugotų nuo piktnaudžiavimo; duomenys siunčiami Google. Scenarijus įkeliamas tik atvėrus šią formą.

← Visi įrašai

Skaitiklių paveikslėlių podėlis atmintyje

Apie turinį ir jo patikrą

Šiame straipsnyje

Beveik penktadalis šios paslaugos piešiamų skaitiklių paveikslėlių daugiau nieko nekeičia. Ankstesnės kartos pelės sekimo scenarijus paveikslėlį įkelia per kiekvieną judesį, o nuo tada, kai tos užklausos nebedidina skaičių, dvi iš eilės sukuria tą patį paveikslėlį, baitas į baitą.

Akivaizdus podėlio kandidatas. Įdomūs sprendimai buvo kur jį laikyti ir kuo grįsti jo raktą.

Ne diske

Tai veikia mažame serveryje, o diskas yra SD kortelė. Piešiamų paveikslėlių podėlis joje būtų reiškęs maždaug 70 MB įrašymų per dieną, mainais už išmatuotą sutaupymą – 1,6 minutės procesoriaus laiko per dieną.

Tai blogas kompromisas. SD kortelės genda nuo įrašymo, o už tai gaunama tik apvalinimo paklaida kompiuteryje, kurio neriboja procesorius. Todėl podėlis yra /dev/shm, kuris yra tmpfs, tai yra RAM. Ten išmatuota: 0,027 ms skaitymui, 0,036 ms įrašymui, 1,9 GB laisvos vietos.

kiek kainuotų per dieną70 MBką suteiktų per dieną1,6 minvienetai sąmoningai skirtingi — tai ir yra kompromisas

Paleidus iš naujo viskas dingsta. Podėliui tai ne praradimas, o įprastas atvejis.

Redis veikia tame pačiame kompiuteryje. Jis nenaudotas dėl su technologijomis nesusijusios priežasties: priklauso kitai programai ir jai apsaugotas slaptažodžiu. Bendra instancija susietų dvi nesusijusias paslaugas, todėl bloga diena vienai taptų bloga diena kitai.

Rakte yra skaičiai

Įprastas podėlio raktas yra tapatybė ir galiojimo pabaiga, o galiojimo pabaiga – lažybos: per pastarąsias penkias minutes nepasikeitė nieko svarbaus. Skaitiklyje keičiasi būtent tai, kas rodoma.

Todėl rodomos reikšmės patenka į raktą. Pasikeitus skaičiui, raktas jau kitas ir paveikslėlis piešiamas iš naujo. Lažybų atsisakoma, užuot jas darius atsargiai. Kiekvienas užskaitytas apsilankymas padidina bent viso laikotarpio sumą, todėl jokiam užskaitytam apsilankymui negali būti pateiktas pasenęs paveikslėlis. Likusi galiojimo pabaiga tėra viršutinė riba reikšmėms, kurių nėra rakte — savaitės, mėnesio ir metų skaičiams.

Ką reikėjo patikrinti pirmiausia

Podėlis saugus tik tada, jei jame laikomas dalykas yra jo rakto funkcija. Tai teiginys apie kiekvieną dizainą, ir jis patikrintas, o ne numanytas:

  • joks dizainas nenaudoja rand(), mt_rand(), shuffle() ar uniqid()
  • joks dizainas neskaito laiko tiksliau nei valandomis
  • sekimo parametrai iš seno scenarijaus niekur kodo medyje neskaitomi

Paskutinis punktas sukėlė geriausią viso bandymo nesėkmę. Kol tie parametrai dar buvo rakto dalis, kiekviena užklausa turėjo kiek kitokias pelės koordinates, todėl kiekvienas raktas buvo unikalus. Podėlis veikė visą dieną ir užregistravo 13 pataikymų. Jis veikė tobulai ir nieko nedarė – sunkiausiai pastebimas gedimo tipas.

O jei čia kas nors nepavyksta — neperskaitomas katalogas, pilnas diskas, sugadintas įrašas, — paveikslėlis tiesiog piešiamas įprastai. Podėlis niekada neturi būti priežastis, dėl kurios skaitiklis nepasirodo.

Reklama