Yleisimmin verkkopalvelut koostuvat tietokannasta, serveripuolen logiikasta sekä selainpuolen koodista. Näiden kaikkien toimintaa voidaan vauhdittaa huomattavasti hyödyntämällä välimuisteja.

Välimuistin toimintaideana on tallettaa harvemmin päivittyviä tiedostoja, sisältöjä tai ohjelmistokomponentteja sopivaan paikkaan verkkopalvelun käyttöön. Kun tieto on välimuistissa, sitä ei tarvitse hakea uudestaan palvelimelta, tai esimerkiksi samaa ohjelmakoodia ei täydy suorittaa peräjälkeen uudestaan, mikä säästää palvelimen laskentatehoa. Toteutustapa riippuu välimuistin sijainnista, mutta yleisimmin välimuistit sijaitsevat serverin ja asiakkaan välissä, tietokannan ja serverin välillä tai itse selaimessa.

Tietokantavälimuistit on perustasolla monesti sisäänrakennettu tietokantajärjestelmiin, kuten MySQL ja PostgreSQL. Nämä säilövät useimmin tehtyjä tietokantahakuja, jolloin tietokannan ohjausjärjestelmän ei tarvitse joka kerta hakea tietokannasta samaa tietoa, vaan se voidaan poimia suoraan välimuistista. Verkkopalvelun kehittäjä voi vaikuttaa näiden välimuistien optimointiin muokkaamalla välimuistiasetuksia serverin kokoa ja tarpeita vastaavaksi. Tietokannoille on saatavilla myös erinäisiä muita välimuisteja, jotka parantavat suorituskykyä entisestään, esimerkiksi Memcached(SQL-tyyppisille tietokannoille) ja Redis(NoSQL-tyyppisille tietokannoille). Monesti näiden käyttöönotto on kuitenkin hieman kalliimpaa, sillä se edellyttää erityisasiantuntemusta kyseisen teknologian implementoinnista.

Serverin välimuistit nopeuttavat ohjelmalogiikan toimintaa. Periaatteeltaan ne ovat hyvin samanlaisia verrattuna tietokantavälimuistiin. Kerran suoritettu ohjelmakoodi jätetään välimuistiin, jolloin samaa pyyntöä tarvittaessa koko koodia ei enää ajeta uudestaan. Välimuisti voi olla osittainen(esim. APC) tai full page –tyyppinen, kuten Varnish cache. Varsinkin dynaamista sisältöä sisältävien verkkopalvelujen suunnittelussa on erityisen tärkeää tiedostaa, mikä sisältö on staattista ja mikä jatkuvasti päivittyvää. Useasti päivittyvää sisältöä ei voida välimuistittaa ollenkaan, koska muuten käyttäjä ei näe mahdollisesti haluttua nykytilannetta. Tällöin välimuistin tyhjennys ja implementointi oikeisiin sivuston osiin on keskeinen osa välimuistiratkaisua suunnitellessa.

Selaimen välimuisti on oleellinen optimointitapa erityisesti paljon sisältöä sisältäville verkkopalveluille. Kuvat, tyylitiedostot ja esimerkiksi Javascript-tiedostot muuttuvat harvemmin keskisuurillakaan sivustoilla. Jos asiakkaan selain lataisi jokaisen sivulatauksen yhteydessä staattiset tiedostot uudestaan, aiheuttaisi tämä joka kerralla keskimäärin 1,2 megatavun tiedostonsiirron palvelimelta selaimelle. Käyttäjämäärän ei tarvitse olla edes kovin suuri, kun (normaalikokoisen) serverin kapasiteetti alkaa loppua kesken aktiivisimmilla kävijätunneilla. Tästä johtuen on ensiarvoisen tärkeää tallentaa harvemmin päivittyvät suuret tiedostot asiakaspuolen selaimen välimuistiin. Positiivisena sivuvaikutuksena tämä pienentää aiemmin mainittua RTT-arvoa, sillä selaimen ei tarvitse enää pyytää resurssia palvelimelta. Selaimen välimuisti otetaan käyttöön asettamalla HTTP-protokollan expires- sekä cache-control-otsakkeet päälle serveriltä. Nämä kertovat selaimelle haluttujen tiedostotyyppien välimuistiin tallentamisen ehdot sekä vanhenemisajan.

Välimuistit ovat yksi tärkeimmistä osa-alueista optimoitaessa verkkopalvelua. Erityisesti staattisten tiedostojen tallennus selaimeen säästää radikaalisti serverikapasiteettia, ja mahdollistaa skaalautumisen suuremmille käyttäjämäärille. Kun verkkopalvelu monimutkaistuu, tietokantavälimuistit ja serverin erityyppiset välimuistit tarjoavat mahdollisuuden edelleen optimoida palvelua sulavammaksi vaativampiin käyttötapauksiin.

 

Kaikki tämän juttusarjan artikkelit löydät tagin "nopeusoptimointi" alta, tai klikkaamalla tästä linkistä.

 

Lisätietoa osoitteessa: http://lamia.fi/