Nopeuta WordPressiä RAM-välimuistilla: esittelyssä Redis + Docker

WordPress-sivustojen ja -verkkokauppojen suorituskyvyn yhtenä pullonkaulana on WordPressin perusmekaniikka tietokannan suhteen: jokaista sivukävijää varten on ladattava sivun sisältö tietokannasta, kuten tekstisisällöt, kategoriat, tuotteiden hinnat, valikot jne.

Perinteisesti WP-sivustoja on moni nopeuttanut välimuistilisäosilla, jotka tekevät staattisia sivuja jotka vähentävät/poistavat tietokantakyselyitä. Yksi tällainen lisäosa on suosittu WP Rocket.

Nämäkään lisäosat eivät tarjoa riittävästi suorituskykyä tilanteisiin, joissa:

  • Saman minuutin sisällä kävijöitä sivustolle saapuu satoja, jopa useampi tuhat kävijää
  • WooCommerce-kaupassa tuotteiden ja eri variaatioiden lisääntyessä tietokantakyselyiden määrä kasvaa
  • Verkkosivustolla on satoja bloggauksia sisältävä blogi/verkkolehti, jossa on sivukohtaisesti lukuisia dynaamisia elementtejä jotka lisäävät tietokannan kuormitusta

Tällaisissa tilanteissa jähmeyttä aiheuttaa tietokantapyyntöjen määrä, jossa nopeakaan SSD-levy ei ole riittävän nopea. Lopputuloksena sivuston viive kasvaa tai sivuston kävijät saavat kuuluisan HTTP 500 errorin ruudulleen.

Redis cache/välimuisti tarjoaa tähän ratkaisun tarjoamalla välimuistipalvelun, joka hyödyntää palvelimen RAM-muistia palvelimen levyn sijaan. Tällä hetkellä Redis on mahdollista ottaa käyttöön Docker-alustassamme.

Miten Redis cache / RAM-välimuisti toimii?

Redis on avoimeen lähdekoodiin perustuva palvelinpohjainen ratkaisu WordPress-sivustoille, joka tarjoaa sivukävijöille tiedot RAM-muistiin sijoitetusta välimuistista, sen sijaan että ne ladataan tietokannasta levyltä.

Lopputuloksena on suorituskyvyn lukuja, jotka päihittävät tietokannasta perinteisellä mallilla tehdyt haut tähtitieteellisillä eroilla ja vapauttavat I/O-käskyjen osalta levyprosessit muuhun toimintaan.

Esimerkki: näin Redis otetaan käyttöön

Tarvitset palvelun käyttöönottamiseksi XetNET Docker-palvelun, johon tilataan kolme säiliötä:

  • WordPress- tai PHP-säiliö
  • MariaDB- tai MySQL-säiliö
  • Redis-säiliö

Asenna WordPress-sivusto Docker-säiliöön tai siirrä valmis sivusto ohjeemme avustuksella nykyisestä ympäristöstä palvelimelle.

Asenna sen jälkeen Redis Object Cache -lisäosa WordPress-asennukseesi. Tämän jälkeen Redis-säiliössä olevan palvelimen tiedot syötetään lisäosan asetuksiin.

Lisää wp-config.php tiedostoon lisäosan vaatimat asetukset, minimissään seuraavat rivit:

define(‘WP_REDIS_HOST’, ‘XXX.XXX.XXX.XXX’);
define(‘WP_REDIS_PORT’, ‘XXXX’);

Korvaa X-merkinnät oikeilla tiedoilla, jotka löydät Dockerin asetuksista Redis-säiliön tiedoista (kuvat alla):

Klikkaa Docker-säiliön Redis kohdalta.

Tallenna wp-config.php muutosten jälkeen ja klikkaa WordPress-hallintanäkymässä Redis-lisäosan asetuksista ”Enable Object Cache”. Jos kaikki meni onnistuneesti, Status-kentässä lukee ”Connected”:

Nyt olet valmis!

Redis itsessään nopeuttaa jo yksinkertaisten sivustojen toimintaa, mutta suurimman hyödyn siitä saa ruuhkatilanteissa ja tietokannaltaan raskaiden sivustojen kanssa. Tällaisia ovat mm. verkkokaupat joissa on useita satoja, jopa tuhansia tuotteita ja tuotevariaatioita, tai verkkosivustot joissa on runsaasti dynaamista sisältöä.

Miten paljon Redis nopeuttaa tai auttaa ruuhkatilanteissa?

Redis-tuloksia ja testejä on julkaistu runsaasti verkossa. Scalegrid.io bloggauksessa puhtaan WordPress-asennuksen kanssa Redis nopeutti sivun latausaikaa noin 900 millisekunnista 400 millisekuntiin.

Periaatteessa Redis auttaa itsessään jokaista WordPress-sivustoa suoriutumaan paremmin, vaikka kävijämäärät eivät olisi suuria tai sivuston rakenne ei olisi kovin monimutkainen. Siksi se on monen kehittäjän suosima tapa lisätä suorituskykyä WordPress-sivustoihin.

Mitä raskaampi tietokantakyselyiltään oleva sivusto on kyseessä, sitä enemmän Redis helpottaa palvelinta suoriutumaan. Se taas näkyy ulospäin erinomaisena käyttäjäkokemuksena, kun sivuston vasteaika on lyhyt ja sivut latautuvat nopeasti.

Redis lisäksi on kustannustehokas: hosting-ratkaisujen kustannukset pysyvät kurissa, kun hyödynnetään muistipohjaista välimuistipalvelua sen sijaan, että investoidaan tehokkaampaan I/O-suorituskykyyn levyissä. Esimerkiksi Docker-palvelussamme säiliön saa käyttöön hintaan 4,50 €/kk eli kolmella säiliöllä syntyy erittäin suorituskykyinen alusta, jota voit helposti skaalata suuremmaksi toiminnan ja sivuston kasvaessa.

Bonusvinkki: kytke Redis toimimaan toisen välimuisti-lisäosan kanssa, kuten yllä artikkelissamme mainittu WP Rocket. Näin hyödynnät huiman tietokannan suorituskyvyn myös sivuston latautumiseen liittyvien optimointien kera.

emjr on Emailemjr on Facebookemjr on Linkedinemjr on Twitter
emjr
Toimitusjohtaja at XetNET / Xetpoint Oy
Xetpoint Oy:n perustaja ja yrittäjä. Bisneshenkinen nörtti henkeen ja vereen joka rentoutuu(?) keskeneräisen taloprojektin kanssa.