Kas ir kešatmiņā saglabātie dati? Ko nozīmē Notīrīt kešatmiņu un ko tas dara?

Pirmkārt, kas ir kešatmiņa?

Kopumā kešatmiņa (izrunā "nauda") ir repozitorija veids. Jūs varat domāt par krātuvi kā krātuvi. Militārajā jomā tas būtu ieroču, pārtikas un citu piederumu glabāšana, kas nepieciešami misijas turpināšanai.

Datorzinātnēs šos "izejmateriālus" sauc par resursiem, kur resursi ir skripti, kods un dokumentu saturs. Pēdējo dažkārt konkrētāk sauc par "aktīviem", piemēram, tekstu, statiskajiem datiem, datu nesējiem un hipersaitēm, taču šeit es izmantošu tikai vienu terminu resursi .

Atšķirība starp kešatmiņu un cita veida krātuvēm

Kešatmiņas galvenais mērķis ir paātrināt tīmekļa lapu resursu iegūšanu, samazinot lapu ielādes laiku. Vēl viens kritiskais kešatmiņas aspekts ir nodrošināt, lai tajā būtu salīdzinoši svaigi dati.

Šajā rakstā tiks aplūkotas divas izplatītās kešatmiņas metodes: pārlūka kešatmiņa un satura piegādes tīkli (CDN).

Tīmekļa arhitektūrā bez kešatmiņām darbojas arī citas krātuves; bieži tie ir paredzēti, lai glabātu plašas datu kopas. Tomēr tie nav tik koncentrēti uz atgūšanas sniegumu.

Piemēram, Amazon Glacier ir datu krātuve, kas paredzēta datu lētai glabāšanai, bet ne ātrai izgūšanai. Savukārt SQL datu bāze ir veidota tā, lai tā būtu elastīga, atjaunināta un ātra, taču tā reti ir lēta un parasti nav tik ātra kā kešatmiņa.

Pārlūka kešatmiņa: atmiņas kešatmiņa

Atmiņas kešatmiņa resursus lokāli glabā datorā, kurā darbojas pārlūks. Kamēr pārlūks ir aktīvs, iegūtie resursi tiks glabāti datora fiziskajā atmiņā (RAM) un, iespējams, arī cietajā diskā.

Vēlāk, kad , pārskatot tīmekļa lapu, ir nepieciešami tieši tādi paši resursi, pārlūkprogramma tos no kešatmiņas, nevis attālā servera, izvilks. Tā kā kešatmiņa tiek glabāta lokāli, ātrajā atmiņā šie resursi tiek ielādēti ātrāk, un lapa tiek ielādēta ātrāk.

Būtiskākais ir resursu meklēšanas ātrums, taču tāpat ir nepieciešama arī resursu svaiga esamība. Novecojis resurss ir novecojis un, iespējams, vairs nav derīgs.

Daļa no pārlūka uzdevuma ir noteikt, kuri kešatmiņā saglabātie resursi ir novecojuši, un atjaunot tos, kas ir. Tā kā tīmekļa lapai parasti ir resursi ar maiju, kešatmiņā parasti būs novecojušas un svaigas versijas.

Kā pārlūks zina, kas ir novecojis kešatmiņā?

Atbilde nav vienkārša, taču ir divas galvenās pieejas: kešatmiņas iznīcināšana un HTTP galvenes lauki.

kešatmiņas iznīcināšana

Itāļi

Kešatmiņas atdalīšana ir servera puses tehnika, kas nodrošina, ka pārlūkprogramma iegūst tikai jaunus resursus. Tas to dara netieši.

Kaut arī kešatmiņas atgrūšana var izklausīties dramatiski, tā patiešām neko neiznīcina un pat nepieskaras tam, kas jau ir saglabāts pārlūkprogrammā. Viss, kas paredzēts kešatmiņā, tiek mainīts sākotnējā resursa URI tādā veidā, ka pārlūkprogrammai šķiet, ka resurss ir pilnīgi jauns. Tā kā tas izskatās jauns, tas nebūs pārlūkprogrammas kešatmiņā. Kešatmiņā saglabātā resursa vecā versija joprojām tiks saglabāta kešatmiņā, taču galu galā tā nokaltīs un nomirs, un tai vairs nekad nevarēs piekļūt.

Pieņemsim, ka man ir tīmekļa lapa, www.foobar.com/about.htmlkurā par foobar.com ir pateikts viss, ko jūs kādreiz vēlaties uzzināt. Tiklīdz jūs apmeklējat šo lapu, pārlūks to kešatmiņā un ar to saistītos resursus.

Vēlāk korporācija Quxbaz izpērk foobar.com, un par lapas saturu notiek būtiskas izmaiņas. Pārlūkprogrammas kešatmiņā nebūs šī jaunā satura, tomēr tā joprojām var uzskatīt, ka tā saturs ir aktuāls, un nekad nemēģinās to atjaunot.

Ko jūs, Quxbaz tīmekļa administrators, darāt, lai nodrošinātu visu jaunā satura izstumšanu?

Tā kā pārlūks paļaujas uz URI, lai atrastu vienumus kešatmiņā, ja resursa URI mainās, tas ir tāds, ka pārlūkprogramma to nekad nav redzējusi, pirms tā dodas, lai ielādētu šo resursu no servera.

Tādējādi, mainot resursa URI no www.foobar.com/about.htmluz www.foobar.com/about2.html(vai uz www.quxbaz.com/about.html), pārlūks neatradīs ar šo URI saistīto kešatmiņas resursu un veiks pilnu ielādi no servera. Resurss varētu būt būtiski tāds pats kā oriģināls zem vecā URI, taču pārlūks to nezina.

Jums nav jāmaina lapas nosaukums. Tā URI arī vaicājuma virkni ar definīciju, varat pievienot versijas parametru URI: www.foobar.com/about.html?v=2hef9eb1.

Šajā gadījumā versijas parametram v tiek iestatīta jauna, jauna ģenerēta jaukšanas vērtība ikreiz, kad mainās saturs, vai to iedarbina kāds cits process, piemēram, restartējot serveri. Pārlūkprogramma redz, ka vaicājuma virkne ir mainījusies, un, tā kā vaicājuma virknes var ietekmēt to, kas tiks atgriezts, tā no servera iegūs atjauninātu resursu.

Neviena no šīm metodēm nedarbosies, ja vecajam URI var piekļūt tieši no grāmatzīmes. Ja pārlūkprogrammai nav uzdots atkārtoti apstiprināt URI par pēdējo kešatmiņā saglabāto pieprasījumu (vai kešatmiņā saglabātā resursa derīguma termiņš ir beidzies), tā kešatmiņas atsvaidzināšanai neveiks pilnu ielādi. Tas mūs noved pie nākamās tēmas.

HTTP galvenes lauki

Katram resursu pieprasījumam ir meta informācija, kas pazīstama kā galvene. Un otrādi, katrai atbildei ir saistīta arī galvenes informācija.

Dažos gadījumos pārlūkprogramma redz atbildes galvenes vērtības un maina atbilstošās vērtības nākamajās pieprasījumu galvenēs. Starp šīm galvenes vērtībām ir vērtības, kas ietekmē resursu kešatmiņas veikšanu pārlūkprogrammā.

HEAD pieprasījumi un nosacīti pieprasījumi

HEAD pieprasījums ir kā saīsināts GET vai POST pieprasījums. Tā vietā, lai pieprasītu pilnu resursu, HEAD pieprasījums pieprasa tikai galvenes laukus, kas citādi tiktu atgriezti pēc pilna pieprasījuma.

Resursa galvene parasti būs daudz mazāka (kopējo baitu skaitā) nekā ar to saistītie resursa dati (atbildes "pamatteksts"). Galvenes informācija ir pietiekami informatīva, lai pārlūks varētu noteikt resursu svaigumu kešatmiņā.

HEAD pieprasījumus bieži izmanto, lai pārbaudītu servera resursa derīgumu (tas ir, vai resurss joprojām pastāv un vai ir, vai tas ir atjaunināts kopš pārlūkprogrammas pēdējās piekļuves?). Pārlūkprogramma izmantos to, kas atrodas kešatmiņā, ja HEAD pieprasījums norāda, ka resurss ir derīgs, pretējā gadījumā tas izpildīs pilnu GET vai POST pieprasījumu un atsvaidzinās kešatmiņu ar atgriezto.

Ar nosacītu pieprasījumu pārlūkprogramma galvenē nosūta laukus, kas raksturo kešatmiņā saglabātā resursa svaigumu. Šoreiz serveris nosaka, vai pārlūkprogrammas kešatmiņa joprojām ir jauna.

Ja tā ir, serveris atgriež atbildi 304 ar tikai resursa galvenes informāciju un bez resursa pamatteksta (datiem). Ja tiek noteikts, ka pārlūkprogrammas kešatmiņa ir novecojusi, serveris atgriezīs pilnu atbildi ar 200 OK.

Šis mehānisms ir ātrāks nekā HEAD pieprasījumu izmantošana, jo tas izslēdz iespēju, ka būs jāizsniedz divi pieprasījumi, nevis viens.

Iepriekšminētais vienkāršo to, kas var būt diezgan sarežģīts process. Kešatmiņā ir daudz precizēšanas, taču to visu kontrolē galvenes lauki, no kuriem vissvarīgākais ir kešatmiņas kontrole.

Kešatmiņas kontrole

Atbildot uz pieprasījumu, serveris pārlūkprogrammai nosūtīs galvenes laukus, norādot, kādai uzvedībai vajadzētu pielāgoties kešatmiņā. Ja es ielādēju lapu vietnē //en.wikipedia.org/wiki/Uniform_Resource_Identifier, atbildes galvenes ierakstā ir iekļauts:

cache-control: private, s-maxage=0, max-age=0, must-revalidate 

privāts nozīmē, ka dokumenta saturu kešatmiņā drīkst saglabāt tikai pārlūkprogramma.

s-maxage un max-age ir iestatīti uz 0 . S-maxage vērtība ir proxy serveriem ar kešatmiņas, bet maxage paredzēta pārlūkprogrammā. Uzstādītie efekts max-age vien ir tā, ka kešatmiņā resurss beidzas uzreiz, tomēr tas joprojām var lietot (pat tad, ja ir sakaltusi) lapas pārlādēšanas laikā, bet tajā pašā pārlūkprogrammas sesijā.

Novecojis resurss var būt atkārtota apstiprināšana, izmantojot HEAD pieprasījumu, kam atkarībā no atbildes var sekot GET vai POST pieprasījums. Nepieciešama atkārtoti apstiprināt direktīva liek pārlūkprogrammai atkārtoti apstiprināt kešatmiņā saglabāto resursu, ja tas ir novecojis.

šajā gadījumā maksimālais vecums ir iestatīts uz 0 , kešatmiņā esošais resurss pēc saņemšanas nekavējoties tiek novecojis. Divu direktīvu kombinācija ir vienāda ar vienotās direktīvas kešatmiņu .

Abi iestatījumi nodrošina, ka pārlūkprogramma vienmēr atjauno kešatmiņā saglabāto resursu neatkarīgi no tā, vai tā joprojām atrodas tajā pašā sesijā vai nē.

Kešatmiņas vadības direktīvas ir ļoti plašas un reizēm mulsinošas - tās ir pati sava tēma. Pilns dokumentēts direktīvu saraksts ir atrodams šeit.

E-tags

Šis ir marķieris, kuru serveris nosūta, un pārlūks saglabā līdz nākamajam pieprasījumam. Tas tiek izmantots tikai tad, kad pārlūkprogramma zina, ka resursa kešatmiņas kalpošanas laiks ir beidzies.

E-tagi ir servera ģenerētas jaukšanas vērtības, kurās kā sēkla bieži tiek izmantots resursa fiziskais faila nosaukums un servera pēdējais modificētais datums. Atjauninot resursa failu, mainās modificētais datums, un tiek ģenerēta jauna jaucējvērtības vērtība, kas tiek nosūtīta pieprasījuma atbildes galvenē.

Citi galvenes tagi, kas ietekmē kešatmiņu

Galvenes tagu derīguma termiņš ir beidzies, un pēdējās modifikācijas ir novecojušas, tomēr lielākā daļa serveru tos joprojām sūta, lai nodrošinātu savietojamību ar vecākām pārlūkprogrammām. Piemērs:

expires: Thu, 01 Jan 1970 00:00:00 GMT last-modified: Sun, 01 Mar 2020 17:59:02 GMT 

Šeit derīguma termiņš tiek iestatīts uz nulles datumu (vēsturiski no operētājsistēmas UNIX). Tas norāda, ka resursa derīguma termiņš beidzas nekavējoties, tāpat kā max-age = 0 . Pēdējā modifikācija paziņo pārlūkprogrammai, kad resursam tika veikts pēdējais atjauninājums, un pēc tam to var izmantot, lai izlemtu, vai tam vajadzētu to atjaunot, nevis izmantot kešatmiņas vērtību.

Piespiežot kešatmiņu no pārlūka

Kas ir grūti atkārtoti ielādējams?

Stingra atkārtota ielāde liek atjaunot visus lapas resursus, neatkarīgi no tā, vai tie ir saturs, skripti, stila lapas vai multivide. Diezgan viss, vai ne?

Daži resursi, iespējams, nav tieši iekļauti lapā. Tā vietā tos var ielādēt dinamiski, parasti pēc tam, kad viss nepārprotamais ir ielādēts.

Pārlūkprogramma pirms laika nezina, ka tas notiks, un, kad tas notiks, vēlākos pieprasījumos (kurus parasti ierosina skripti) joprojām tiks izmantotas šo resursu kešatmiņā saglabātas kopijas, ja tādas būs pieejamas.

Kas ir skaidra kešatmiņa un cietā pārlādēšana?

Šī darbība notīra visu pārlūkprogrammas kešatmiņu, kurai ir tāds pats efekts kā cietajai atkārtotai ielādēšanai, taču papildus tiek ielādēti arī dinamiski ielādētie resursi - galu galā kešatmiņā nav nekā, tāpēc nav izvēles!

Satura piegādes tīkli: ģeogrāfiski izvietota kešatmiņa

CDN ir vairāk nekā tikai kešatmiņa, taču kešatmiņa ir viens no tā uzdevumiem. CDN glabā datus ģeogrāfiski sadalītās vietās, lai samazinātu turp un atpakaļ laiku no ģeogrāfiski vietējā pārlūka un no tā.

Pārlūkprogrammas pieprasījumi tiek novirzīti uz tuvējo CDN, tādējādi saīsinot fiziskā attāluma reakcijas datus. CDN spēj apstrādāt arī lielu trafiku un nodrošināt drošību pret dažu veidu uzbrukumiem.

CDN savus resursus iegūst, izmantojot interneta apmaiņas punktu (IXP), mezglus, kas ir daļa no interneta mugurkaula (ar lielajiem burtiem). Ir jāveic darbības, lai iestatītu pieprasījumu maršrutēšanu, lai dotos uz CDN resursdatora servera vietā. Nākamais solis ir pārliecināties, vai CDN ir jūsu vietnes pašreizējais saturs.

Vecajās dienās lielākā daļa CDN atbalstīja push metodi: vietne CDN centrmezglā ievietos jaunu saturu, kas pēc tam tiks izplatīts ģeogrāfiski izkliedētos mezglos.

Mūsdienās lielākā daļa CDN izmanto iepriekš aprakstītos kešatmiņas protokolus (vai līdzīgus), lai 1) lejupielādētu jaunus resursus un 2) atsvaidzinātu esošos resursus. Pārlūkprogrammai joprojām ir kešatmiņa, un nekas no tā nemainās. Viss, ko CDN dara, ir ātrāka šo jauno resursu pārsūtīšana.