Loenduripiltide vahemällu salvestamine mällu
Sisust ja selle ülevaatamisest
Selles artiklis
Peaaegu viiendik selle teenuse joonistatavatest loenduripiltidest ei muuda enam midagi. Eelmise põlvkonna hiireliikumise skript laeb pildi uuesti iga liigutuse peale ja kuna need päringud enam midagi ei suurenda, annavad kaks järjestikust sama pildi, bait baidi haaval.
Ilmne kandidaat vahemälule. Huvitavad otsused olid, kuhu see panna ja mille järgi võtit moodustada.
Mitte kettale
See töötab väikesel serveril ja ketas on SD-kaart. Joonistatud piltide vahemällu salvestamine sinna tähendanuks ligikaudu 70 MB kirjutusi päevas, vastutasuks mõõdetud kokkuhoiu eest: 1,6 minutit protsessoriaega päevas.
See on halb vahetus. SD-kaardid lähevad katki kirjutamisest ja ostetav asi on ümardamisviga masinal, mis ei ole protsessorist piiratud. Seega elab vahemälu kataloogis /dev/shm, mis on tmpfs, mis on RAM. Mõõdetud seal: 0,027 ms lugemine, 0,036 ms kirjutamine, 1,9 GB vaba.
Kõik kaob taaskäivitamisel. Vahemälu jaoks ei ole see kaotus, see on tavaline olukord.
Redis töötab samal masinal. Seda ei kasutatud põhjusel, millel pole tehnoloogiaga mingit pistmist: see kuulub teisele rakendusele ja on selle jaoks parooliga kaitstud. Ühe instantsi jagamine seoks kaks omavahel mitteseotud teenust, nii et ühe halb päev muutub teise halvaks päevaks.
Võti sisaldab numbreid
Tavaline vahemälu võti on identiteet pluss aegumine ja aegumine on kihlveo: viimase viie minuti jooksul ei muutunud midagi olulist. Loenduri puhul on see, mis muutub, täpselt see, mida kuvatakse.
Seega lähevad kuvatavad väärtused võtme sisse. Kui number muutub, on see teine võti ja pilt joonistatakse uuesti. Kihlvedu kaob, mitte ei tehta hoolikalt. Iga arvestatud külastus suurendab vähemalt eluaegset kogusummat, nii et ühelegi arvestatud külastusele ei saa serveerida aegunud pilti. Alles jääv aegumine on ainult ülempiir väärtustele, mida võtmes ei ole — nädala-, kuu- ja aastanumbritele.
Mida tuli kõigepealt kontrollida
Vahemälu on ohutu ainult siis, kui see, mida ta salvestab, on tema võtme funktsioon. See on väide iga kujunduse kohta ja seda kontrolliti, mitte ei eeldatud:
- ükski kujundus ei kasuta
rand(),mt_rand(),shuffle()egauniqid() - ükski kujundus ei loe kella täpsemalt kui tunni kaupa
- vana skripti jälgimisparameetreid ei loeta puus kusagil
Viimane tõi kaasa kogu harjutuse parima läbikukkumise. Kuni need parameetrid olid veel võtme osa, kandis iga päring veidi erinevaid hiirekoordinaate, nii et iga võti oli unikaalne. Vahemälu töötas terve päeva ja registreeris 13 tabamust. See töötas täiuslikult ja ei teinud midagi, mis on kõige raskemini märgatav katkisuse liik.
Ja kui siin miski ebaõnnestub — loetamatu kataloog, täis ketas, rikutud kirje — joonistatakse pilt lihtsalt tavalisel viisil. Vahemälu ei tohi kunagi olla põhjus, miks loendur ei ilmu.