Kas ir kešatmiņa? Vienkāršs ceļvedis lietotņu veidotājiem
Kešatmiņa nozīmē gatavas kopijas glabāšanu no kaut kā, ko bija lēni vai dārgi iegūt, lai nākamo pieprasījumu varētu ātri apmierināt no šīs kopijas. Saglabāto kopiju sauc par kešatmiņu (cache). Pārlūkprogramma kešo attēlus, lai vietne otrajā apmeklējumā ielādētos ātrāk; serveris kešo lēnas datubāzes vaicājuma rezultātu, lai to nebūtu jāizpilda katram apmeklētājam.
Kešatmiņa padara lietotnes ātrākas un lētākas darbībā. Tās lielais kompromiss ir tāds, ka kopija var novecot.
Kāpēc kešatmiņa ir svarīga, veidojot ar MI
Kešatmiņu MI veidotās lietotnēs var sastapt trīs veidos:
- „Es atjauninju lietotni, bet joprojām redzu veco versiju.” Tas ir visbiežākais kešatmiņas moments, un parasti tas ir nekaitīgs — jūsu pārlūkprogramma vai CDN rāda saglabātu kopiju.
- Ātrums. Ja lapa ir lēna, jo katram apmeklētājam pārrēķina vieni un tie paši skaitļi, rezultāta kešošana var padarīt to gandrīz tūlītēju.
- Izmaksas. Daudzi MI veidotāji un hosti maksā par skaitļošanu, datubāzes laiku un ārējiem API izsaukumiem. Ja tūkstoš apmeklētāju izraisa vienu un to pašu dārgo pieprasījumu, kešatmiņa ļauj par to samaksāt vienreiz.
Pamatu zināšana ļauj pieprasīt kešošanu tur, kur tā palīdz, un pamanīt to, kad tieši tā ir iemesls, kāpēc kaut kas izskatās nepareizi.
Ikdienas salīdzinājums
Iedomājieties apmeklētas kafejnīcas virtuvi.
Katru rītu pavārs katru kafijas tasi varētu pagatavot no svaigi maltām pupiņām, tiklīdz tā ir pasūtīta. Tas ir lēni. Tā vietā viņš uz plīts uztur gatavu filtra kafijas katlu. Vairums klientu tasi saņem dažās sekundēs — tas ir kešatmiņas trāpījums (cache hit). Kad katls iztukšojas, kāds pagatavo jaunu — tas ir kešatmiņas netrāpījums (cache miss).
Bet kafija, kas stāv pārāk ilgi, novecojas, tāpēc kafejnīcai ir noteikums: izmest katru katlu, kas vecāks par 30 minūtēm. Šis noteikums ir kešatmiņas derīguma termiņš. Neviens nevienu katlu neturētu visu dienu, un neviens neiepriekš pagatavotu kāda pielāgotu pasūtījumu ar auzu pienu un trim karotītēm cukura — dažas lietas nemaz nevajadzētu kešot.
Kur atrodas kešatmiņas
Viena lapas ielāde var iziet cauri vairākām kešatmiņām — no tuvākās lietotājam līdz tālākajai:
| Kešatmiņa | Kur atrodas | Ko parasti glabā | Piemērs |
|---|---|---|---|
| Pārlūkprogrammas kešatmiņa | Apmeklētāja ierīcē | Attēlus, stilu failus, skriptus, fontus | Jūsu logotips ielādējas uzreiz otrajā lapā |
| CDN kešatmiņa | Serveri visā pasaulē, tuvu apmeklētājiem | Statiskos failus un dažreiz visas lapas | Apmeklētājs Tokijā failus saņem no tuvākā servera, nevis no jūsu avota |
| Lietojumprogrammas kešatmiņa | Uz servera vai blakus tam, bieži atmiņā vai Redis | Lēnu vaicājumu vai ārējo API izsaukumu rezultātus | Šodienas valūtas kursi, iegūti vienreiz stundā |
| Datubāzes kešatmiņa | Datubāzes iekšienē | Nesen lietotos datus un vaicājumu plānus | Populārās rindas paliek ātrā atmiņā |
CDN (satura piegādes tīkls) būtībā ir visas pasaules kešatmiņu tīkls jūsu vietnes failiem.
Kā kešatmiņa izlemj, ko paturēt
Katrai kešatmiņai jāatbild uz tiem pašiem jautājumiem:
- Ko drīkst kešot? Publiskus, kopīgus datus (produkta attēlu, emuāra ierakstu) — jā. Privātus datus (lietotāja konta lapu, viņa ziņojumus) — nekad kopīgā kešatmiņā.
- Cik ilgi? Šis ir TTL (time to live, dzīves ilgums). Logotipu var kešot gadu; krājumu līmeni — 30 sekundes.
- Kā tas tiek atjaunināts? Vai nu kopija beidzas un tiek iegūta no jauna, vai lietotne tīši to noņem, kad dati mainās — to sauc par invalidāciju.
Vietnēm serveris pārlūkprogrammām un CDN pasaka, kā kešot katru failu, izmantojot Cache-Control galveni. Piemēram, Cache-Control: max-age=3600 nozīmē „šo kopiju var izmantot atkārtoti stundu”.
Mūsdienu būvēšanas rīki sarežģītāko daļu statiskiem failiem risina ar kešatmiņas maiņu (cache busting): katru reizi, kad fails mainās, tam tiek piešķirts jauns nosaukums ar pirkstu nospiedumu, piemēram, app.3f9a2c.js. Pārlūkprogrammas var ilgi kešot veco nosaukumu, jo jaunajai versijai ir cits nosaukums.
Praktisks piemērs: produktu katalogs
Jums ir neliels tiešsaistes veikals. Sākumlapā no datubāzes tiek rādīti 50 produkti ar cenām un krājumu līmeni, kā arī „populāro” saraksts, kam vajadzīgs lēns aprēķins pāri visiem pasūtījumiem.
- Attēlus un skriptus pārlūkprogramma un CDN kešo ilgu laiku. Katrs jaunais build izmainītajiem failiem piešķir jaunus nosaukumus, tāpēc atjauninājumi joprojām parādās.
- Populāro sarakstu aprēķina reizi 10 minūtēs un saglabā lietojumprogrammas kešatmiņā. Katrs apmeklētājs šajās 10 minūtēs saņem saglabāto rezultātu uzreiz.
- Cenas tiek kešotas īsu laiku, un kešatmiņa tiek notīrīta, kad rediģējat produktu, tāpēc klienti nekad ilgi neredz vecu cenu.
- Krājumi norēķinā nekad netiek kešoti. Kad kāds noklikšķina „Pirkt”, lietotne pārbauda īsto datubāzi, tāpēc nevar pārdot preci, kas tikko izpārdota.
- Groza un konta lapas nekad netiek glabātas kopīgās kešatmiņās, jo tās ir personīgas.
Rezultāts: sākumlapa ir ātra, datubāze strādā daudz mazāk, un nekas, kas svarīgs naudas vai privātuma ziņā, nekad nav novecojis.
Galvenie termini
| Termins | Nozīme |
|---|---|
| Kešatmiņas trāpījums / netrāpījums | Dati tika atrasti kešatmiņā / bija jāiegūst no avota. |
| TTL (time to live) | Cik ilgi saglabātā kopija tiek uzskatīta par svaigu. |
| Novecojuši dati | Saglabāta kopija, kas nav aktuāla. |
| Invalidācija | Tīša saglabātas kopijas noņemšana, jo oriģināls ir mainījies. |
| Kešatmiņas maiņa (cache busting) | Faila nosaukuma vai URL mainīšana, kad fails mainās, lai kešatmiņa ielādētu jauno versiju. |
| Cache-Control | HTTP galvene, kas pārlūkprogrammām un CDN saka, kā kešot atbildi. |
| Pilnīga pārlādēšana | Lapas pārlādēšana, liekot pārlūkprogrammai ignorēt savu kešatmiņu. |
| Redis | Populāra datu glabātuve atmiņā, bieži izmantota kā lietojumprogrammas kešatmiņa. |
Biežākie maldi
- „Kešatmiņa vienmēr ir laba.” Nepareizas lietas kešošana rada reālas kļūdas: vecas cenas, trūkstošus jaunus ierakstus vai — sliktākajā gadījumā — viena lietotāja privātu lapu, kas parādīta citam. Kešojiet apzināti.
- „Ja redzu veco versiju, mans atjauninājums neizdevās.” Parasti tas nav noticis. Pirms secināt, ka kaut kas ir bojāts, izmēģiniet pilnīgu pārlādēšanu (Ctrl+Shift+R vai Cmd+Shift+R Mac datorā) vai privātu logu.
- „Kešatmiņa novērš lēnu lietotni.” Tā slēpj lēnumu atkārtotiem pieprasījumiem. Pirmais pieprasījums joprojām ir lēns, un, ja pamatā ir trūkstošs datubāzes indekss, to arī jāizlabo.
- „Man vajadzētu kešot visu, cik ilgi vien iespējams.” Ilgi kešošanas laiki der failiem, kuriem mainoties mainās nosaukums. HTML lapām un datiem īsāki laiki ir drošāki.
- „Kešatmiņas notīrīšana to atrisina visiem.” Tā notīra tikai jūsu pārlūkprogrammu. Apmeklētāju un CDN kešatmiņām joprojām ir savas kopijas.
Ko jautāt savam MI veidotājam
- „Kuras šīs lietotnes daļas ir lēnas un kuras varētu droši kešot?”
- „Kešo [populāro sarakstu / API rezultātu] uz [N] minūtēm un notīri to, kad mainās pamatā esošie dati.”
- „Pārliecinies, ka neviena lapa ar personas vai konta datiem nevar tikt kešota CDN vai kopīgā kešatmiņā.”
- „Statiskajiem failiem ar pirkstu nospiedumiem iestatī ilgus kešošanas laikus, bet HTML — īsus.”
- „Kešo atbildes no [ārējā API], lai to nesauktu katrā lapas ielādē — un pasaki, cik novecojuši dati varētu kļūt.”
- „Pēc publicēšanas redzu veco versiju. Vai tā ir mana pārlūkprogrammas kešatmiņa, vai kaut kas nav izvietots?”
Kešatmiņa Mythex
Pēc atjauninājuma publicēšanas Mythex lietotnē dokumentācijā ir norādīts, ka CDN kešatmiņas var nedaudz atpalikt, un publiskā URL pilnīga pārlādēšana parāda jauno versiju — skatiet Kā publicēt. Lapa Hostinga ierobežojumi arī iesaka kešot statiskos resursus, jo hostingu, datubāzes laiku un joslas platumu apmaksā no jūsu kredītu bilances. Viss pārējais — vaicājumu vai API atbilžu kešošana — ir kaut kas, ko lūdzat aģentam iebūvēt jūsu lietotnē.
Papildu lasāmviela: kas ir CDN, kā padarīt savu vietni ātrāku un kas ir ierobežojums pēc biežuma.
Jautājumi
Kas ir kešatmiņa vienkāršiem vārdiem?
Kešatmiņa nozīmē saglabāt kaut kā kopiju, ko bija lēni vai dārgi iegūt, lai nākamreiz, kad tā ir vajadzīga, to varētu ātri parādīt no saglabātās kopijas. Pārlūkprogrammas, CDN, serveri un datubāzes visi izmanto kešatmiņu, lai lietotnes darbotos ātrāk un izmaksātu mazāk.
Kāpēc pēc atjaunināšanas mana tīmekļa vietne joprojām rāda veco versiju?
Jūsu pārlūkprogramma vai CDN, visticamāk, rāda saglabātu veco failu kopiju. Parasti palīdz pilnīga pārlādēšana (Windows — Ctrl+Shift+R, Mac — Cmd+Shift+R). Apmeklētājiem labi veidotas vietnes atjauninātajiem failiem piešķir jaunus nosaukumus, lai kešatmiņa automātiski ielādētu jauno versiju.
Ko dara kešatmiņas notīrīšana?
Pārlūkprogrammas kešatmiņas notīrīšana dzēš saglabātās failu un lapu kopijas, tāpēc nākamreiz viss tiek lejupielādēts no jauna. Tas var atrisināt lapas, kas izskatās bojātas vai novecojušas, un pēc tam lapas pirmo reizi ielādēsies nedaudz lēnāk.
Vai kešatmiņa var radīt problēmas?
Jā. Galvenais risks ir novecojuši dati — vecā cena, neaktuāls krājumu daudzums — vai, vēl sliktāk, kāda lietotāja privātas lapas saglabāšana kešatmiņā un parādīšana citam. Labi kešatmiņas noteikumi nosaka, kas drīkst tikt kešots un cik ilgi, un personas datus kopīgās kešatmiņās nekad neglabā.