Mikä on välimuistidata? Mitä tyhjennä välimuisti tarkoittaa ja mitä se tekee?

Ensinnäkin, mikä on välimuisti?

Yleisesti ottaen välimuisti (lausutaan "käteisenä") on tietyntyyppinen arkisto. Voit ajatella arkistoa tallennustilaksi. Armeijassa tämä merkitsisi aseiden, ruoan ja muiden tarvikkeiden hankkimista operaation jatkamiseksi.

Tietojenkäsittelytieteessä näitä "tarvikkeita" kutsutaan resursseiksi, joissa resurssit ovat komentosarjoja, koodia ja asiakirjasisältöä. Jälkimmäiseen viitataan joskus tarkemmin "varoina", kuten teksti, staattinen data, media ja hyperlinkit, mutta tässä käytän vain yhtä termiä resurssit .

Välimuistin ja muun tyyppisten arkistojen välinen ero

Välimuistin ensisijainen tarkoitus on nopeuttaa verkkosivujen resurssien hakua lyhentämällä sivun latausaikoja. Toinen välimuistin kriittinen osa on varmistaa, että se sisältää suhteellisen tuoreita tietoja.

Tässä artikkelissa käsitellään kahta yleistä välimuistin tallennustapaa: selaimen välimuistin tallentaminen ja sisällönjakeluverkot (CDN).

Välimuistien lisäksi verkkoarkkitehtuureissa esiintyy muita arkistoja; usein nämä on suunniteltu pitämään valtavat tietovälineet. Ne eivät kuitenkaan ole niin keskittyneet noutosuorituskykyyn.

Esimerkiksi Amazon Glacier on tietovarasto, joka on suunniteltu tallentamaan dataa edullisesti, mutta ei noutamaan sitä nopeasti. SQL-tietokanta on sen sijaan suunniteltu joustavaksi, ajantasaiseksi ja nopeaksi, mutta on harvoin halpaa eikä yleensä niin nopeaa kuin välimuisti.

Selaimen välimuisti: muistivälimuisti

Muistivälimuisti tallentaa resurssit paikallisesti tietokoneelle, jossa selain on käynnissä. Kun selain on aktiivinen, haetut resurssit tallennetaan tietokoneen fyysiseen muistiin (RAM) ja mahdollisesti myös kiintolevylle.

Myöhemmin, kun verkkosivustoa tarkasteltaessa tarvitaan täsmälleen samat resurssit, selain vetää ne välimuistista etäpalvelimen sijaan. Koska välimuisti on tallennettu paikallisesti, nopeaan muistiin, nämä resurssit haetaan nopeammin ja sivu latautuu nopeammin.

Resurssien hakunopeus on olennaista, mutta samoin on välttämätöntä, että resurssit ovat tuoreita. Vanhentunut resurssi on vanhentunut eikä ehkä enää ole kelvollinen.

Osa selaimen tehtävästä on tunnistaa välimuistissa olevat resurssit vanhentuneina ja noutaa ne, jotka ovat. Koska verkkosivulla on tyypillisesti may-resursseja, välimuistissa on yleensä sekoitus vanhentuneita ja uusia versioita.

Mistä selain tietää, mikä välimuistissa on vanhentunut?

Vastaus ei ole yksinkertainen, mutta on olemassa kaksi päämenetelmää: välimuistin irrotus ja HTTP-otsikkokentät.

välimuistin rikkominen

Italialaiset

Välimuistin poisto on palvelinpuolen tekniikka, joka varmistaa, että selain hakee vain uusia resursseja. Se tekee tämän epäsuorasti.

Vaikka välimuistin tyhjentäminen saattaa kuulostaa dramaattiselta, se ei todellakaan riko mitään eikä edes kosketa selaimen välimuistissa olevaa sisältöä. Ainoa välimuistin rikkominen on muuttaa alkuperäisen resurssin URI tavalla, joka saa selaimen näyttämään, että resurssi on täysin uusi. Koska se näyttää uudelta, se ei ole selaimen välimuistissa. Välimuistissa olevan resurssin vanha versio tallennetaan edelleen välimuistiin, mutta lopulta se kuihtuu ja kuolee, eikä sitä voida enää käyttää.

Sano, että minulla on verkkosivu, www.foobar.com/about.htmljossa kerrotaan kaikesta foobar.com-sivustosta ja jonka haluat koskaan tietää. Kun vierailet kyseisellä sivulla, selain tallentaa välimuistiin sen ja siihen liittyvät resurssit.

Myöhemmin Quxbaz-yritys ostaa foobar.com-sivuston, ja noin-sivun sisällössä tapahtuu merkittäviä muutoksia. Selaimen välimuistissa ei ole uutta sisältöä, mutta se voi silti uskoa sen sisältämän sisällön olevan ajan tasalla eikä yritä koskaan hakea sitä uudelleen.

Mitä sinä, Quxbaz-verkkovastaava, teet varmistaaksesi, että kaikki uusi sisältö työnnetään ulos?

Koska selain luottaa URI: hen kohteiden löytämiseksi välimuistista, jos resurssin URI muuttuu, se on kuin selain ei ole koskaan nähnyt sitä ennen kuin se hakee kyseistä resurssia palvelimelta.

Siten, muuttamalla resurssin URI: stä www.foobar.com/about.htmltilaan www.foobar.com/about2.html(tai kohtaan www.quxbaz.com/about.html), selain ei löydä kyseiseen URI: hen liittyvää välimuistiresurssia ja suorittaa täydellisen haun palvelimelta. Resurssi voi olla olennaisesti sama kuin alkuperäinen URI: n alkuperäinen, mutta selain ei tiedä sitä.

Sinun ei kuitenkaan tarvitse muuttaa sivun nimeä. Koska URI sisältää myös kyselymerkkijonon määritelmän mukaan, voit lisätä versioparametrin URI: hen www.foobar.com/about.html?v=2hef9eb1.

Tässä tapauksessa versioparametrille v asetetaan uusi, uusi luotu hajautusarvo aina, kun sisältö muuttuu, tai jos jokin muu prosessi, kuten palvelimen uudelleenkäynnistys, laukaisee. Selain näkee, että kyselymerkkijono on muuttunut, ja koska kyselymerkkijonot voivat vaikuttaa palautettavaan, se hakee päivitetyn resurssin palvelimelta.

Kumpikaan näistä tekniikoista ei toimi, jos vanhaa URI: tä käytetään suoraan kirjanmerkistä. Ellei selainta kehotettu vahvistamaan URI viimeisessä välimuistipyynnössä (tai välimuistissa oleva resurssi on vanhentunut), se ei tee täydellistä hakua välimuistin päivittämiseksi. Tämä vie meidät seuraavaan aiheeseen.

HTTP-otsikkokentät

Jokaisessa resurssipyynnössä on joitain metatietoja, jotka tunnetaan otsikkona. Vastaavasti jokaiseen vastaukseen liittyy myös otsikkotiedot.

Joissakin tapauksissa selain näkee vastausotsikkojen arvot ja muuttaa vastaavia arvoja seuraavissa pyynnön otsikoissa. Näiden otsikkojen arvojen joukossa ovat ne, jotka vaikuttavat resurssien välimuistiin tallentamiseen selaimessa.

HEAD-pyynnöt ja ehdolliset pyynnöt

HEAD-pyyntö on kuin katkaistu GET- tai POST-pyyntö. Koko resurssin pyytämisen sijaan HEAD-pyyntö pyytää vain otsikkokenttiä, jotka muuten palautettaisiin täydellisen pyynnön yhteydessä.

Resurssin otsikko on yleensä paljon pienempi (tavujen kokonaismäärä) kuin siihen liittyvä resurssitieto (vastauksen "runko"). Otsikkotiedot ovat riittävän informatiivisia, jotta selain voi määrittää välimuistissa olevan resurssin tuoreuden.

HEAD-pyyntöjä käytetään usein palvelinresurssin oikeellisuuden tarkistamiseen (ts. Onko resurssia edelleen olemassa, ja jos on, onko sitä päivitetty sen jälkeen, kun selain on viimeksi käyttänyt sitä?). Selain käyttää välimuistissa olevaa sisältöä, jos HEAD-pyyntö osoittaa, että resurssi on kelvollinen, muuten se suorittaa täydellisen GET- tai POST-pyynnön ja päivittää välimuistin palautetulla.

Ehdollisella pyynnöllä selain lähettää otsikossa kentät, jotka kuvaavat välimuistissa olevan resurssin tuoreuden. Tällä kertaa palvelin määrittää, onko selaimen välimuisti vielä tuore.

Jos näin on, palvelin palauttaa 304-vastauksen, jossa on vain resurssin otsikkotiedot eikä resurssirunkoa (data). Jos selaimen välimuisti todetaan vanhentuneiksi, palvelin palauttaa täyden 200 OK-vastauksen.

Tämä mekanismi on nopeampi kuin HEAD-pyyntöjen käyttö, koska se eliminoi mahdollisuuden antaa kaksi pyyntöä yhden sijasta.

Edellä oleva yksinkertaistaa sitä, mikä voi olla melko monimutkainen prosessi. Välimuistiin liittyy paljon hienosäätöä, mutta kaikkea ohjataan otsikkokenttien kautta, joista tärkein on välimuistin hallinta.

Välimuistin hallinta

Kun vastaat pyyntöön, palvelin lähettää otsikkokentät selaimelle osoittamaan, minkä käyttäytymisen tulisi mukautua välimuistiin tallennettaessa. Jos lataan sivun osoitteessa //en.wikipedia.org/wiki/Uniform_Resource_Identifier, vastaus sisältää tämän otsikkotietueessaan:

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

yksityinen tarkoittaa, että vain selaimen tulisi tallentaa välimuisti asiakirjan sisältö.

s-maxage ja max-age asetetaan arvoon 0 . S-MaxAge arvo on välityspalvelin kanssa välimuistit, kun taas MaxAge on tarkoitettu selaimen. Pelkästään enimmäisikän asettamisen seurauksena välimuistissa oleva resurssi vanhenee välittömästi, mutta sitä voidaan silti käyttää (vaikka vanhentunut) sivun lataamisen aikana samalla selainistunnolla.

Vanhentunut resurssi voi olla uudelleenvalinta HEAD-pyynnön kautta, jota voi seurata GET- tai POST-pyyntö vastauksesta riippuen. Must-revalidate direktiivi komennot selaimen uudelleen voimaan välimuistissa resurssi, jos se on vanhentunut.

Koska max-ikä on tässä tapauksessa 0 , välimuistissa oleva resurssi on heti vanhentunut saatuaan. Kahden direktiivin yhdistelmä vastaa yhden direktiivin välimuistia .

Nämä kaksi asetusta varmistavat, että selain vahvistaa välimuistissa olevan resurssin aina uudelleen, olipa se edelleen samassa istunnossa vai ei.

Välimuistinhallintadirektiivit ovat hyvin laajoja ja toisinaan hämmentäviä - ne ovat oma aihe. Täydellinen dokumentoitu luettelo direktiiveistä löytyy täältä.

E-tag

Tämä on tunniste, jonka palvelin lähettää ja selain säilyttää seuraavaan pyyntöön asti. Tätä käytetään vain, kun selain tietää, että resurssin välimuistin käyttöikä on umpeutunut.

E-tagit ovat palvelimen luomia hash-arvoja, jotka usein käyttävät resurssin fyysistä tiedostonimeä ja palvelimessa viimeksi muokattua päivämäärää siemeninä. Kun resurssitiedosto päivitetään, muokattu päivämäärä muuttuu ja uusi hajautusarvo luodaan ja lähetetään pyynnön vastausotsikossa.

Muut välimuistiin vaikuttavat otsikkotagit

Otsikkotunnisteet vanhenevat ja viimeksi muokatut ovat vanhentuneita, mutta useimmat palvelimet lähettävät ne edelleen vanhempien selainten taaksepäin yhteensopivuuden takaamiseksi. Esimerkki:

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

Tässä vanhentumisajaksi asetetaan nolla päivämäärä (historiallisesti UNIX-käyttöjärjestelmästä). Tämä osoittaa, että resurssi vanhenee heti, aivan kuten max-age = 0 . Viimeksi muokattu kertoo selaimelle, milloin resurssiin tehtiin viimeisin päivitys, jonka avulla se voi sitten päättää, pitäisikö sen hakea uudelleen välimuistin arvon sijasta.

Välimuistin päivityksen pakottaminen selaimelta

Mikä on vaikea ladata uudelleen?

Kova uudelleenlataus pakottaa kaikkien sivun resurssien noutamisen, olivatpa ne sitten sisältöä, komentosarjoja, tyylitaulukoita tai mediaa. Melkein kaikki, eikö?

Jotkut resurssit eivät välttämättä sisälly nimenomaisesti sivulle. Sen sijaan ne voidaan hakea dynaamisesti, yleensä sen jälkeen kun kaikki nimenomainen on ladattu.

Selain ei tiedä etukäteen, että näin tapahtuu, ja kun se tapahtuu, myöhemmät pyynnöt (yleensä komentosarjojen käynnistämät) käyttävät edelleen näiden resurssien välimuistikopioita, jos ne ovat käytettävissä.

Mikä on välimuisti ja kova uudelleenlataus?

Tämä toiminto tyhjentää koko selaimen välimuistin, jolla on sama vaikutus kuin kovalla latauksella, mutta aiheuttaa lisäksi myös dynaamisesti ladattujen resurssien noutamisen - loppujen lopuksi välimuistissa ei ole mitään, joten ei ole valintaa!

Sisältötoimitusverkot: maantieteellinen välimuisti

CDN on muutakin kuin välimuisti, mutta välimuisti on yksi sen tehtävistä. CDN tallentaa tietoja maantieteellisesti hajautettuihin paikkoihin siten, että meno-paluuajat maantieteellisesti paikalliselle selaimelle ja sieltä lyhenevät.

Selainpyynnöt ohjataan läheiselle CDN: lle, mikä lyhentää fyysisen etäisyyden vastausdataa. CDN: t pystyvät myös käsittelemään suuria määriä liikennettä ja tarjoamaan suojaa tietyntyyppisiä hyökkäyksiä vastaan.

CDN saa resurssinsa Internet Exchange Pointin (IXP), solmujen kautta, jotka ovat osa Internetin runkoa (kirjaimin). Määritä vaiheet, kun pyyntöreititys määritetään siirtymään CDN: ään isäntäpalvelimen sijaan. Seuraava vaihe on varmistaa, että CDN: llä on verkkosivustosi nykyinen sisältö.

Vanhoina aikoina useimmat CDN: t tukivat push-menetelmää: verkkosivusto työnsi uutta sisältöä CDN-keskittimeen, joka sitten jaettaisiin maantieteellisesti hajautettuihin solmuihin.

Nykyään useimmat CDN: t käyttävät yllä kuvattuja välimuistiprotokollia (tai vastaavia) 1) lataamaan uusia resursseja ja 2) päivittämään olemassa olevat resurssit. Selaimella on edelleen välimuisti, eikä mikään muutu. CDN tekee vain uusien resurssien siirrot nopeammin.