Mis on vahemälu? Lihtne juhend rakendusi ehitavatele inimestele
Vahemälu tähendab valmis koopia hoidmist millestki, mida oli aeglane või kallis kätte saada, nii et järgmine päring selle kohta saab vastuse kiiresti salvestatud koopiast. Salvestatud koopiat nimetatakse vahemäluks (cache). Su brauser salvestab pilte vahemällu, et sait laadiks teisel külastusel kiiremini; server salvestab aeglase andmebaasipäringu tulemuse vahemällu, et seda ei peaks iga külastaja jaoks uuesti käivitama.
Vahemälu teeb rakendused kiiremaks ja odavamaks käitada. Selle suurim kompromiss on see, et koopia võib aeguda.
Miks vahemälu AI-ga ehitamisel oluline on
AI-ga ehitatud rakendustes puutud vahemäluga kokku kolmel viisil:
- „Uuendasin rakendust, aga näen ikka vana versiooni." See on kõige levinum vahemälu juhtum ja tavaliselt kahjutu – sinu brauser või CDN näitab salvestatud koopiat.
- Kiirus. Kui leht on aeglane, sest see arvutab iga külastaja jaoks uuesti samad numbrid, võib tulemuse vahemällu salvestamine muuta lehe peaaegu hetkeliseks.
- Kulu. Paljud AI ehitajad ja hostid küsivad tasu arvutusvõimsuse, andmebaasiaja ja välise API kutsete eest. Kui tuhat külastajat käivitab sama kalli päringu, võimaldab vahemälu selle eest maksta ainult üks kord.
Põhitõdede tundmine laseb sul vahemälu paluda seal, kus see aitab, ja märgata seda, kui see on põhjuseks, miks midagi valesti näib.
Igapäevane võrdlus
Mõtle hõivatud kohviku köögile.
Iga hommik võiks kokk valmistada iga kohvi värskelt jahvatatud ubadest, kui seda tellitakse. See on aeglane. Selle asemel hoiab ta valmis filterkohvi potti kuumaplaadil. Enamik kliente saab tassi sekunditega – see on vahemälu tabamus. Kui pott saab tühjaks, keedetakse uus – see on vahemälus puudus.
Kohv seisab aga liiga kaua ja läheb halvaks, seega on kohvikul reegel: viska ära iga pott, mis on vanem kui 30 minutit. See reegel on vahemälu aegumisaeg. Keegi ei hoiaks sama potti terve päeva ja keegi ei valmistaks ette kellegi kohandatud tellimust piimavahu ja kolme suhkruga – mõnda asja ei tohi üldse vahemällu panna.
Kus vahemälud asuvad
Ühe lehe laadimine võib läbida mitu vahemälu, alates kasutajale lähimast kuni kõige kaugemani:
| Vahemälu | Kus see asub | Mida see tavaliselt hoiab | Näide |
|---|---|---|---|
| Brauseri vahemälu | Külastaja seadmes | Pildid, stiilileht, skriptid, fondid | Sinu logo laaditakse teisel lehel kohe |
| CDN-i vahemälu | Üle maailma serverites, külastajatele lähedal | Staatilised failid ja mõnikord terved lehed | Tokyos olev külastaja saab failid lähedalt serverilt, mitte sinu algserverist |
| Rakenduse vahemälu | Serveris või selle kõrval, sageli mälus või Redis'es | Aeglaste päringute või välise API kutsete tulemused | Tänased vahetuskursid, mis tuuakse kord tunnis |
| Andmebaasi vahemälu | Andmebaasi sees | Hiljuti kasutatud andmed ja päringuplaanid | Populaarsed read jäävad kiirde mällu |
CDN (sisuedastusvõrk) on sisuliselt ülemaailmne vahemälude võrk sinu saidi failide jaoks.
Kuidas vahemälu otsustab, mida hoida
Iga vahemälu peab vastama samadele küsimustele:
- Mida võib vahemällu panna? Avalik, jagatud andmed (tootepilt, blogipostitus) – jah. Privaatsed andmed (kasutaja konto lehekülg, tema sõnumid) – mitte kunagi jagatud vahemälus.
- Kui kauaks? See on TTL (time to live, elueaeg). Logo võib olla vahemälus aasta; laoseis 30 sekundit.
- Kuidas seda uuendatakse? Kas koopia aegub ja tuuakse uuesti, või eemaldab rakendus selle tahtlikult, kui andmed muutuvad – seda nimetatakse invalideerimiseks.
Veebisaitide puhul ütleb server brauseritele ja CDN-idele päise Cache-Control abil, kuidas iga faili vahemällu panna. Näiteks Cache-Control: max-age=3600 tähendab „selle koopiat võib uuesti kasutada tund aega".
Kaasaegsed ehitustööriistad lahendavad staatiliste failide kõige keerulisema osa vahemälu murdmisega (cache busting): iga kord, kui fail muutub, saab ta uue nime sõrmejäljega, näiteks app.3f9a2c.js. Brauserid võivad vana nime pikalt vahemällu hoida, sest uuel versioonil on lihtsalt teine nimi.
Näide: tootekataloog
Sul on väike veebipood. Avaleht näitab 50 toodet koos hindade ja laoseisudega andmebaasist, plus nimekirja „trendikas", mis nõuab kõigi tellimuste üle aeglast arvutust.
- Pildid ja skriptid salvestavad brauser ja CDN pikaks ajaks vahemällu. Iga uus ehitus annab muutunud failidele uued nimed, nii et uuendused ilmuvad ikka.
- Trendide nimekiri arvutatakse kord iga 10 minuti järel ja salvestatakse rakenduse vahemällu. Iga külastaja nende 10 minuti jooksul saab salvestatud tulemuse kohe.
- Hindu hoitakse vahemälus lühikest aega ning vahemälu tühjendatakse alati, kui muudad toodet, nii et kliendid ei näe vanu hindu kaua.
- Laoseisu kassas ei panda kunagi vahemällu. Kui keegi klõpsab „Osta", kontrollib rakendus päris andmebaasi, nii et see ei saa müüa asja, mis just otsa sai.
- Ostukorv ja kontolehed ei salvestata kunagi jagatud vahemällu, sest need on isiklikud.
Tulemus: avaleht on kiire, andmebaas teeb palju vähem tööd ja midagi, mis puudutab raha või privaatsust, ei jää kunagi aegunuks.
Põhimõisted
| Mõiste | Tähendus |
|---|---|
| Vahemälu tabamus / möödaminek | Andmed leiti vahemälust / tuli võtta algallikast. |
| TTL (time to live) | Kui kaua vahemälu koopiat peetakse värskeks. |
| Aegunud andmed | Vahemälu koopia, mis on vananenud. |
| Invalideerimine | Vahemälu koopia tahtlik eemaldamine, sest originaal muutus. |
| Vahemälu murdmine | Faili nime või URL-i muutmine, kui see muutub, nii et vahemälud toovad uue versiooni. |
| Cache-Control | HTTP päis, mis ütleb brauseritele ja CDN-idele, kuidas vastust vahemällu panna. |
| Kõva värskendus | Lehe uuesti laadimine, andes brauserile käsu ignoreerida oma vahemälu. |
| Redis | Populaarne mälusisene andmehoidla, mida kasutatakse sageli rakenduse vahemäluna. |
Levinud väärarusaamad
- „Vahemälu on alati hea." Vale asja vahemällu panemine tekitab päris vigu: vanad hinnad, puuduvad uued postitused või – halvimal juhul – ühe kasutaja privaatne leht teisele näidatud. Vahemälu tuleb seada tahtlikult.
- „Kui näen vana versiooni, ebaõnnestus mu uuendus." Tavaliselt ei ebaõnnestunud. Proovi kõva värskendust (Ctrl+Shift+R või Macis Cmd+Shift+R) või privaatset akent, enne kui eeldad, et midagi on katki.
- „Vahemälu parandab aeglase rakenduse." See peidab aeglust korduvate päringute puhul. Esimene päring on ikka aeglane, ja kui põhiprobleem on puuduv andmebaasi indeks, paranda ka see.
- „Peaksin kõike vahemällu panema nii kauaks kui võimalik." Pikad vahemäluajad sobivad failidele, mis muutudes saavad uued nimed. HTML-lehtede ja andmete puhul on lühemad ajad ohutumad.
- „Vahemälu tühjendamine parandab kõigi jaoks." See tühjendab ainult sinu brauseri. Külastajatel ja CDN-i vahemäludel on ikka oma koopiad.
Mida küsida oma AI ehitajalt
- „Millised selle rakenduse osad on aeglased ja mida saaks turvaliselt vahemällu panna?"
- „Pane [trendide nimekiri / API tulemus] vahemällu [N] minutiks ja tühjenda see, kui aluseks olevad andmed muutuvad."
- „Veendu, et ühtegi isikuandmeid või konto andmeid sisaldavat lehte ei saa CDN ega jagatud vahemälu salvestada."
- „Pane püsivate nimedega staatilistele failidele pikad vahemäluajad ja HTML-ile lühikesed."
- „Salvesta [välise API] vastused vahemällu, et me ei kutsuks seda igal lehe laadimisel – ja ütle, kui aegunud need andmed võivad olla."
- „Pärast avaldamist näen vana versiooni. Kas see on minu brauseri vahemälu või pole midagi lähetatud?"
Vahemälu Mythexis
Pärast Mythexi rakenduse uuenduse avaldamist märgivad dokumentatsiooni andmed, et CDN-i vahemälud võivad hetkeks maha jääda, ja avaliku URL-i kõva värskendus näitab uut versiooni – vt Kuidas avaldada. Lehel Hostingu piirangud soovitatakse ka staatiliste varade vahemällu panemist, sest hosting, andmebaasiaeg ja ribalaius tasutakse sinu krediidisaldost. Kõik, mis sellest kaugemale läheb – päringutulemuste või API vastuste vahemällu panemine – on midagi, mida palud agendil rakendusse ehitada.
Seotud lugemine: mis on CDN, kuidas teha oma veebisait kiiremaks ja mis on päringute piiramine.
Küsimused
Mis on vahemälu lihtsalt öeldes?
Vahemälu tähendab koopia salvestamist millestki, mida oli aeglane või kallis kätte saada, et järgmisel vajadusel saaks seda kiiresti salvestatud koopiast serveerida. Brauserid, CDN-id, serverid ja andmebaasid kasutavad kõik vahemälu, et rakendused oleksid kiiremad ja odavamad käitada.
Miks näen pärast veebisaidi uuendamist ikka vana versiooni?
Sinu brauser või CDN serveerib tõenäoliselt vanade failide vahemällu salvestatud koopiat. Kõva värskendus (Windowsis Ctrl+Shift+R, Macis Cmd+Shift+R) lahendab tavaliselt probleemi. Külastajate jaoks annavad hästi tehtud saidid uuendatud failidele uued nimed, nii et vahemälud toovad uue versiooni automaatselt.
Mida teeb vahemälu tühjendamine?
Brauseri vahemälu tühjendamine kustutab brauseris salvestatud failide ja lehtede koopiad, nii et järgmisel korral laaditakse kõik uuesti. See võib parandada lehti, mis näevad katki või aegunud välja, ning lehed laaditakse esimesel korral pärast seda veidi aeglasemalt.
Kas vahemälu võib probleeme tekitada?
Jah. Peamine risk on aegunud andmete serveerimine – vana hind, aegunud laoseis – või hullem: ühe kasutaja privaatse lehe salvestamine vahemällu ja selle näitamine kellelegi teisele. Head vahemälureeglid määravad, mida võib vahemällu salvestada, kui kauaks ja et isikuandmeid ei salvestataks kunagi jagatud vahemälus.