Tee yhteenveto:

Useimmat WordPressin skaalausta koskevat neuvot hyppäävät suoraan kuormantasaajaan. Se on usein väärä siirto.

Kuormantasaaja ratkaisee tietyn luokan ongelmia. Siitä on apua, kun yksi sovelluspalvelin ei pysty luotettavasti ottamaan vastaan liikennettä, kun tarvitsette redundanssia tai kun yksittäisestä palvelimesta on tullut operatiivinen riski. Monilla sivustoilla liian aikaisin lisätty kuormantasaaja tuo kuitenkin enemmän liikkuvia osia, enemmän vikaantumistapoja ja enemmän viivettä kuin hyötyä.

Parempi kysymys ei ole ”Miten lisäämme WordPressiin kuormantasauksen?” vaan ”Minkä pullonkaulan yritämme poistaa?”. Pienemmissä toteutuksissa vahva sivuvälimuisti, objektivälimuisti, tietokannan siivous, kuvien siirtäminen erilliseen tallennukseen ja huolellinen lisäosakuri ratkaisevat ongelman yleensä nopeammin ja pienemmällä monimutkaisuudella. Yritystason WordPressissä tulee kuitenkin vastaan kohta, jossa vaakasuuntainen hajautus muuttuu välttämättömäksi. Silloin arkkitehtuuri alkaa merkitä enemmän kuin yksittäinen viritys.

Milloin tarvitsette WordPressin kuormantasausta oikeasti

Yleinen oletus on yksinkertainen: enemmän palvelimia tarkoittaa parempaa suorituskykyä. Käytännössä asia ei toimi näin.

Vähemmän liikennettä saavilla WordPress-sivustoilla kuormantasaus voi heikentää suorituskykyä. SpinupWP toteaa, että yhden palvelimen kokoonpanot ovat nopeampia kuin kuormantasatut kokoonpanot noin 8 samanaikaiseen käyttäjään asti, ja että ylimääräinen verkkohyppy voi hidastaa pyyntöjä, kun suorittimen käyttöaste on alle 20 % (SpinupWP:n kuormantasaaja-analyysi). Juuri tämän vivahteen useimmat yleisoppaat ohittavat.

Tilanteet, joissa kuormantasaaja on ennenaikainen

Jos sivustonne on pääosin välimuistiin tallennettavaa sisältöä, aloittakaa muualta. Yksi hyvin viritetty palvelin, jossa on koko sivun välimuisti, Redis-objektivälimuisti, CDN ja kurinalainen lisäosien käyttö, pärjää yleensä paremmin kuin hajautettu pino, jota ei ole suunniteltu tilan, tallennuksen ja välimuistin yhtenäisyyden näkökulmasta.

Ette luultavasti vielä tarvitse WordPressin kuormantasausta, jos nykyiset ongelmanne näyttävät tältä:

  • Välimuistihudit huonosti käyttäytyvien lisäosien takia: Yksi lisäosa ohittaa sivuvälimuistin, ja koko pino tuntuu hitaalta.
  • Paisunut media ja hidas tiedostojen toimitus: Suuret lataukset ja optimoimattomat kuvat kuormittavat I/O:n tai kaistan äärimmilleen.
  • Tietokannan rapautuminen: Automaattisesti ladattavat asetukset, vanhentuneet transientit ja turhat kyselyt lisäävät vältettävissä olevaa työtä jokaiseen pyyntöön.
  • Operatiivinen yksinkertaisuus on tärkeämpää: Tiiminne tarvitsee luotettavuutta ja nopean palautuksen, ei laajempaa pintaa ylläpidettäväksi.

Tiimeille, jotka päättävät, investoidako ensin skaalausarkkitehtuuriin vai perusteelliseen suorituskykytyöhön, tämä on yleensä kohta, jossa kokeneen asiantuntijan katselmointi kannattaa. Yritystason WordPress-ratkaisut toimivat parhaiten, kun ne lähtevät todellisesta pullonkaulasta eivätkä muodikkaimmasta mallista.

Käytännön sääntö: Jos välimuistia ja tietokannan hygieniaa ei ole hoidettu kunnolla, kuormantasaajan lisääminen yleensä piilottaa ongelman sen sijaan, että korjaisi sen.

Tilanteet, joissa se muuttuu välttämättömäksi

Kuormantasaus alkaa olla järkevää, kun käytettävyys ja samanaikaisuus ovat tärkeämpiä kuin arkkitehtuurin yksinkertaisuus. Ajatelkaa tuotelanseerauksia, suuria WooCommerce-kampanjoita, jäsenpalveluja, joissa on paljon kirjautuneiden käyttäjien liikennettä, julkaisijoiden sivustoja, joilla on liikennepiikkejä, tai yrityssivustoja, joilla ei ole varaa yksittäisen solmun vikaantumiseen.

Näissä tapauksissa vaatimus ei ole pelkkä nopeus. Kyse on vikasietoisuudesta. Yhden solmun on voitava kaatua viemättä koko alustaa mukanaan. Tarvitsette terveystarkistukset, ennustettavan reitityksen ja infrastruktuurin, joka kestää piikit ilman, että hätämuutoksia joudutaan tekemään paineen alla.

Silloin WordPressin kuormantasaus lakkaa olemasta vaihtoehto ja muuttuu infrastruktuuriksi.

Kuormantasausarkkitehtuurin ymmärtäminen

Tuotantovalmiissa kuormantasatussa WordPress-kokoonpanossa on neljä liikkuvaa osaa: kuormantasaaja edessä, useita tilattomia sovellussolmuja sen takana, jaettu pääsy latauksiin ja keskitetty välimuistikerros, jota jokainen solmu voi käyttää.

Kaavio WordPressin kuormantasausarkkitehtuurista, joka näyttää liikenteen jakautumisen useille verkkosovelluspalvelimen instansseille.

Se kuulostaa suoraviivaiselta, mutta juuri tässä pienemmät WordPress-ympäristöt muuttuvat hitaammiksi, hauraammiksi ja kalliimmiksi. Arkkitehtuuri auttaa vain, jos jokainen kerros ratkaisee todellisen pullonkaulan. Jos liikenne on yhä pääosin välimuistiin tallennettavaa ja yksi viritetty solmu pystyy käsittelemään sen, hajautettu infrastruktuuri lisää verkkohyppyjä, vikaantumiskohtia ja operatiivista työtä ilman merkittävää hyötyä.

Neljä olennaista osaa

Jokaisella komponentilla on oma tehtävänsä:

  • Kuormantasaaja tai käänteinen välityspalvelin ottaa vastaan saapuvan liikenteen, tarkistaa taustapalvelimien tilan ja ohjaa pyynnöt solmulle, joka pystyy palvelemaan ne.
  • WordPress-sovellussolmut ajavat PHP:tä, käsittelevät välimuistin ulkopuoliset pyynnöt ja niitä pitää kohdella vaihdettavina työyksikköinä eikä pitkäikäisinä ”lemmikkeinä”.
  • Jaettu tallennus tai median siirto ulkoiseen tallennukseen tuo lataukset jokaisen solmun saataville, joten tiedostot eivät riipu paikallisesta levystä.
  • Keskitetty objektivälimuisti antaa kaikille solmuille saman näkymän välimuistissa oleviin objekteihin ja transientteihin sen sijaan, että jokainen palvelin rakentaisi oman eristetyn välimuistinsa.

Viimeinen kohta jää usein huomaamatta. Tiimit lisäävät toisen tai kolmannen verkkosolmun mutta jättävät välimuistin ja tiedostojen käsittelyn paikalliseksi. Tuloksena on epäjohdonmukaista käytöstä, joka näkyy vain kuormituksessa. Yksi kävijä saa tuoreen merkinnän objektivälimuistista. Toinen osuu eri solmuun eikä löydä sitä. Toimittaja lataa tiedoston, ja yksi palvelin näkee sen ennen muita. WordPress voi toimia tällaisessa tilassa, mutta se ei toimi ennustettavasti.

Mitä kukin kerros oikeasti tekee

Käänteinen välityspalvelin tekee muutakin kuin jakaa liikennettä round-robin-periaatteella. Vakavasti otettavassa kokoonpanossa se hoitaa terveystarkistukset, säilyttää oikeat välitysotsakkeet, päättää TLS-yhteyden, jos se sopii suunnitelmaan, ja poistaa vialliset solmut ennen kuin käyttäjät huomaavat mitään. Nginx, HAProxy ja hallinnoidut pilven kuormantasaajat pystyvät kaikki tähän. Oikea valinta riippuu vähemmän ominaisuuslistoista ja enemmän siitä, kuka sitä ylläpitää kello kahdelta yöllä.

Sovellussolmut vaativat kurinalaisuutta. Niiden ei pidä säilyttää paikallisella levyllä mitään liiketoiminnalle kriittistä, eivätkä ne saa riippua solmuun sidotusta tilasta, ellette ole valinneet tätä kompromissia tietoisesti. Jos vikaantuneen solmun korvaaminen vaatii tiedostojen manuaalista synkronointia tai erityistä siivousta, arkkitehtuuri toimii jo teitä vastaan.

Tallennus on kohta, jossa kiireellä tehdyt toteutukset yleensä hajoavat. WordPress odottaa yhtenäistä näkymää hakemistoon wp-content/uploads, ja jotkin lisäosat olettavat yhä pääsyn paikalliseen tiedostojärjestelmään. Voitte ratkaista tämän jaetulla verkkotallennuksella tai siirtämällä median objektitallennukseen ja mukauttamalla pinon sen ympärille. Kumpikaan vaihtoehto ei ole ilmainen. Verkkotiedostojärjestelmät voivat lisätä viivettä ja lukitusongelmia. Median siirto ulkoiseen tallennukseen pienentää tätä riskiä, mutta lisäosien yhteensopivuus ja toimitukselliset työnkulut on testattava.

Sama kaava näkyy suuremmilla jaetuilla alustoilla, erityisesti WordPress Multisite -arkkitehtuureissa. Kun useat sivustot, toimittajat ja lisäosat riippuvat samasta alustasta, epäjohdonmukainen tiedostojen tila ja solmukohtaisesti eriytyvä välimuisti muuttuvat nopeasti tukipyynnöiksi.

Terve kuormantasattu WordPress-pino ei tarkoita niinkään palvelimien lisäämistä kuin paikallisten oletusten poistamista. Se on arkkitehtuurin muutos, jolla on merkitystä.

Kuormantasausarkkitehtuurin valinta

WordPressin kuormantasaukseen ei ole yhtä ”parasta” arkkitehtuuria. Päteviä malleja on useita, ja kukin painottaa hallintaa, kustannuksia ja ylläpitotyötä eri tavalla.

Väärä valinta johtuu yleensä siitä, että optimoidaan vain yhtä muuttujaa. Tiimit valitsevat halvimman kokoonpanon ja perivät raskaan operatiivisen kuorman. Tai ne valitsevat eniten hallinnoidun vaihtoehdon ja huomaavat myöhemmin, etteivät voi virittää reititystä tai havainnointia tarpeidensa mukaan. Oikea ratkaisu riippuu siitä, kuka sitä ajaa julkaisun jälkeen, ei vain siitä, kuka osaa rakentaa sen.

Kolme yleistä mallia

Useimmat yritystason WordPress-pinot päätyvät johonkin näistä luokista:

ArkkitehtuuriSopii parhaitenMonimutkaisuusKustannusHallinta
Hallinnoitu pilven kuormantasaajaTiimeille, jotka haluavat hallinnoidun infrastruktuurin ja helpomman skaalauksenKohtalainenKohtalaisesta korkeaanKohtalainen
Itse ylläpidetty välityspalvelin Nginxillä tai HAProxyllaTiimeille, joilla on vahva DevOps-osaaminen ja räätälöityjä reititystarpeitaKorkeaVaihtelevaKorkea
CDN-pohjainen liikenteen jakaminenSisältöpainotteisille sivustoille, jotka voivat siirtää suurimman osan liikenteestä reunaverkkoonMatalampi originissa, mutta rajallinen sovelluksen täydessä kuormantasauksessaVaihtelevaMatalampi originin käytöksen osalta

Hallinnoidut pilven kuormantasaajat

Hallinnoidut pilven kuormantasaajat ovat yleensä turvallisin oletusvalinta yritystiimeille. Ne tarjoavat terveystarkistukset, TLS-käsittelyn, taustapalvelinryhmät ja integraation automaattiseen skaalaukseen ilman, että tiiminne joutuu paimentamaan uutta kriittistä palvelua.

Ne ovat erityisen hyödyllisiä, kun infrastruktuurinne nojaa jo hallinnoituihin palveluihin tietokanta- ja tallennuskerroksessa. Etuna on pienempi operatiivinen kuorma. Haittana on vähemmän yksityiskohtainen viritys, etenkin jos tarvitsette hyvin tarkkaa reitityslogiikkaa, räätälöityä puskurointia tai epätavallista otsakkeiden käsittelyä.

Itse ylläpidetyt välityspalvelimet

Nginx ja HAProxy antavat syvällisen hallinnan. Jos tarvitsette omia upstream-sääntöjä, kehittynyttä vikasiirtoa tai tiettyä uudelleenkirjoitusten ja välimuistin yhteistoimintaa, itse ylläpidetty välityskerros antaa insinööreillenne tilaa muokata alustaa juuri haluamallaan tavalla.

Tähän hallintaan liittyy vastuuta:

  • Te vastaatte päivityksistä: Välityspalvelin on yksi tuotantopalvelu lisää, joka pitää päivittää ja suojata.
  • Te vastaatte havainnoinnista: Lokit, mittarit, hälytykset ja upstream-vianetsintä ovat teidän ongelmanne.
  • Te vastaatte vikasietoisuudesta: Jos välityskerros on alimitoitettu, siitä tulee yksittäinen vikaantumispiste.

Tiimeille, jotka jo pyörittävät konttialustoja tai omaa WordPress-hostingia, tämä voi olla oikea tie. Tiimeille, joilla ei ole omaa infrastruktuuritukea, siitä tulee usein kallis sivupolku.

CDN-pohjaiset lähestymistavat

CDN pystyy ottamaan vastaan valtavia määriä staattista ja välimuistiin tallennettavaa liikennettä, mikä tarkoittaa, että originiin päätyy paljon vähemmän pyyntöjä. Se on arvokasta, mutta se ei ole sama asia kuin sovelluksen täysi kuormantasaus.

CDN on vahvimmillaan, kun sivusto on sisältöpainotteinen, yleisö on maailmanlaajuinen ja sisältöä voi tallentaa välimuistiin aggressiivisesti. Se on heikompi, kun pyynnöt ovat dynaamisia, personoituja tai tiiviisti sidottuja kirjautuneisiin istuntoihin. Jos liikenteenne koostuu pääosin kirjautuneista WooCommerce-asiakkaista tai jäsenistä, CDN auttaa, mutta se ei korvaa hyvää origin-arkkitehtuuria.

Valitkaa arkkitehtuuri, jota tiiminne pystyy pyörittämään tavallisena tiistaina, ei vain lanseerausviikolla.

Istuntojen ja tietokannan tilan käsittely

Tilanhallinta on vikakohta, jonka näen useimmin WordPressin kuormantasausprojekteissa.

Yhden palvelimen WordPress-toteutus selviää oletuksilla, jotka lakkaavat toimimasta heti, kun lisäätte toisen sovellussolmun. Pyynnöt pomppivat palvelimelta toiselle. Yhdellä solmulla on käyttäjän istuntotiedot muistissa, toisella ei. Yksi solmu näkee hiljattain välimuistiin tallennetun objektin, toinen tarjoilee vanhentunutta dataa. Jos lataukset, välimuistimerkinnät tai istunnon kaltaiset tiedot ovat paikallisella levyllä tai paikallisessa muistissa, alusta lakkaa toimimasta yhtenä sovelluksena.

Kaavio, joka havainnollistaa, miten jaettu istuntotallennus ja keskitetty tietokanta ylläpitävät tilaa kuormantasatuissa WordPress-ympäristöissä.

Tästä syystä kuormantasaus on usein väärä ensimmäinen askel pienemmille WordPress-sivustoille. Uusien verkkosolmujen lisääminen ennen välimuististrategian, tietokannan tehokkuuden ja tiedostotallennuksen korjaamista lisää yleensä viivettä ja operatiivista riskiä ratkaisematta pääasiallista pullonkaulaa.

Miksi sticky sessions on väliaikainen kompromissi

Sticky sessions voivat vähentää käyttäjälle näkyviä häiriöitä ohjaamalla saman kävijän aina samalle taustasolmulle. Siitä voi olla apua kirjautuneiden käyttäjien liikenteessä, ostoskoreissa, jäsenyyteen liittyvissä työnkuluissa ja vanhemmissa lisäosissa, jotka olettavat paikallisen istuntotilan.

Se on silti kompromissi eikä siisti ratkaisu.

Haitat ovat ennustettavia:

  • Vikasiirto heikkenee: Jos määritetty solmu kaatuu, käyttäjä voi menettää ostoskorinsa tilan, kirjautumisensa jatkuvuuden tai keskeneräiset toimintonsa.
  • Liikenteen jakautuminen muuttuu epätasaiseksi: Aktiiviset käyttäjät pysyvät kiinnitettyinä tiettyihin solmuihin, mikä luo kuumia pisteitä.
  • Vianetsintä vaikeutuu: Ajoittaiset ongelmat muuttuvat solmukohtaisiksi ja vaikeammin toistettaviksi.
  • Skaalaus tehottomoituu: Palvelimien lisääminen ei juuri auta, jos suuri osa liikenteestä on yhä jumissa muutamassa solmussa.

Käytän sticky sessions -ratkaisua vain, kun sovellusta ei voi lyhyellä aikavälillä tehdä tilattomaksi. Siirron aikana siitä on hyötyä. Lopputila se ei ole.

Miltä siistimpi arkkitehtuuri näyttää

WordPressille, joka tarvitsee todellista vaakasuuntaista skaalausta, parempi malli on yksinkertainen. Pitäkää verkkosolmut tilattomina. Sijoittakaa pysyvä data jaettuihin järjestelmiin, jotka on suunniteltu siihen.

Käytännössä tämä tarkoittaa yleensä:

  1. Yhtä ensisijaista tietokantaa kirjoituksille, jotta artikkeleilla, tilauksilla, asetusmuutoksilla ja ylläpitotoimilla on yksi totuuden lähde.
  2. Lukukopioita siellä, missä ne auttavat, lukupainotteisiin kuormiin, jotka sietävät replikoinnin viivettä.
  3. Jaettua objektivälimuistia, kuten Redistä, jotta transienttien ja objektivälimuistin data on jokaisen sovellussolmun saatavilla.
  4. Jaettua mediatallennusta, jotta lataukset eivät ole sidottuja yhteen palvelimeen.

WP Farm esittää saman asian hostingin näkökulmasta. Jaettu välimuisti ja selkeä tietokantatopologia vähentävät houkutusta käyttää wp-content-hakemistoa tilakerroksena, mikä yleensä aiheuttaa enemmän I/O-painetta ja enemmän vikaantumistapoja kuin tiimit odottavat (WP Farm WordPress-hostingin kuormantasauksesta).

Lukukopioista on syytä esittää yksi varoitus. Ne auttavat sisältöpainotteisilla sivustoilla, joilla on paljon lukuja, mutta ne voivat haitata verkkokauppa- ja jäsenpalvelukuormia, jos kopion viive aiheuttaa vanhentuneita lukuja kirjoitusten jälkeen. Asiakas päivittää osoitteensa tai tekee tilauksen, ja seuraava pyyntö lukee viivästyneestä kopiosta ja näyttää vanhat tiedot. Kyse ei ole teoreettisesta reunatapauksesta. Se on yleinen syy oudoille WooCommerce-bugeille.

Verkkokaupoissa tietokantatyö pitää tehdä ennen kuormantasauksen käyttöönottoa tai sen rinnalla. WooCommercen tietokannan optimointi tuottaa yleensä mitattavampia hyötyjä kuin uusien PHP-solmujen lisääminen tehottoman kyselymallin päälle.

Tässä auttaa käytännön testi. Jos yhden sovelluspalvelimen sammuttaminen rikkoisi kirjautumiset, ostoskorit, lataukset tai ylläpidon työnkulut, alusta ei ole vielä valmis todelliseen kuormantasaukseen.

Nopea havainnollistus auttaa selventämään kulkua:

Jos yksi verkkosolmu kantaa yhä omaa istunto- tai sovellustilaansa, teillä on useita palvelimia mutta ei kunnolla hajautettua WordPress-sovellusta.

Käytännön toteutus ja konfigurointi

Kuormantasaus ei korjaa heikkoa WordPress-toteutusta. Se lisää uuden ohjauskerroksen, uuden vikaantumiskohdan ja lisää operatiivista työtä. Pienemmillä sivustoilla tämä ylimääräinen kerros voi lisätä viivettä ja vaikeuttaa vianetsintää ratkaisematta pääasiallista pullonkaulaa. Kun otatte sen käyttöön, pinon pitäisi olla jo niin tilaton, että solmun lisääminen tai poistaminen muuttaa kapasiteettia eikä käytöstä.

Työpöytä, jolla on suuri näyttö, jossa näkyy Nginx-konfiguraatiokoodia verkkopalvelimien kuormantasauksen määrittämiseen.

Yksinkertainen esimerkki Nginx-käänteisvälityspalvelimesta

Käänteisen välityspalvelimen pitää tehdä muutama asia hyvin: pitää julkinen isäntänimi vakaana, välittää alkuperäisen pyynnön tiedot upstreamiin ja epäonnistua hallitusti, kun solmu muuttuu epäterveeksi. Alla oleva syntaksi on tarkoituksella yksinkertainen, mutta se kuvaa perusmallia, jota monet tiimit käyttävät ennen kuin lisäävät TLS-päätön, aktiiviset terveystarkistukset ja tiukemmat aikakatkaisukäytännöt.

upstream wordpress_backend {
    server wordpress-app-1;
    server wordpress-app-2;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://wordpress_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Olennaista ei ole itse koodinpätkä. Välityspalvelimen on säilytettävä riittävästi kontekstia, jotta WordPress, PHP, lokit, tietoturvatyökalut ja upstream-välimuistit voivat tehdä oikeita päätöksiä. Jos Host tai X-Forwarded-Proto on väärin, WordPress alkaa tuottaa virheellisiä URL-osoitteita, uudelleenohjaukset jäävät silmukkaan ja sekasisältöongelmat ilmaantuvat nopeasti siirtymän jälkeen.

WordPress-asetukset, jotka tiimeiltä usein jäävät huomaamatta

Monisolmuinen WordPress-kokoonpano pettää yleensä tylsissä kohdissa.

Asettakaa sivuston URL ja kotisivun URL kuormantasaajan takana olevaan julkiseen verkkotunnukseen, ei yksittäiseen sovelluspalvelimeen tai pelkkään IP-osoitteeseen. Käytännössä monet tiimit määrittävät nämä arvot myös tiedostossa wp-config.php, jotta ne eivät pääse muuttumaan tietokannassa kiireisen siirron aikana. Tästä on erityistä hyötyä, kun useat ympäristöt jakavat saman käyttöönottoprosessin.

Lataukset eivät saa olla pelkästään paikallisella levyllä. Käyttäkää objektitallennusta tai jaettua tiedostojärjestelmää, johon luotatte operatiivisesti. Objektitallennus on yleensä siistimpi vaihtoehto, koska se poistaa tiedostojen synkronointitehtävät ja solmujen välisen eriytymisen, mutta se tuo myös riippuvuuksia lisäosiin ja muuttaa median URL-osoitteiden, välimuistiotsakkeiden ja kuvankäsittelyn käytöstä. Jaetut tiedostojärjestelmät voivat toimia, mutta kirjoituspainotteisissa kuormissa niistä tulee usein pinon hitain ja vähiten ennustettava osa.

Cron vaatii samaa kurinalaisuutta. Asettakaa define('DISABLE_WP_CRON', true); ja ajakaa ajastetut tehtävät yhdestä hallitusta ajastimesta. Jos jokainen verkkosolmu voi käynnistää cronin elävän liikenteen perusteella, päällekkäiset tehtävät ja kilpatilanteet muuttuvat rutiininomaiseksi tuotanto-ongelmaksi reunatapauksen sijaan.

Tiivis toimintamalli näyttää tältä:

Alue Käytännön valinta Miksi se auttaa
Lataukset S3 tai vastaava objektitallennus Pitää median yhtenäisenä kaikissa solmuissa
Tietokanta Hallinnoitu relaatiotietokantapalvelu Vähentää ylläpitotyötä ja parantaa palautettavuutta
Välimuisti Jaettu Redis-palvelu Estää objektitilan pirstoutumisen
Cron Ulkoinen järjestelmäajastin Estää tehtävien päällekkäisen suorituksen useissa solmuissa

Rakentakaa ja rikkokaa ennen tuotantoa

Ensimmäinen todellinen testi on vikaantuminen, ei sivun nopeus. Poistakaa yksi sovellussolmu kierrosta. Sammuttakaa PHP-FPM toisesta. Tyhjentäkää välimuisti kesken toimituksen julkaisuprosessin. Ajakaa lisäosan päivitys ja varmistakaa, että ylläpito, kirjautumiset, lataukset ja asynkroniset tehtävät toimivat edelleen samoin. Jos näitä testejä on vaikea ajaa, arkkitehtuuri on vielä liian hauras.

Kunnollinen WordPressin testiympäristö (staging) kuormantasausmuutosten testaamiseen antaa tiimeille paikan harjoitella siirtymän vaiheita, palautusta, välimuistin tyhjennyksen käytöstä ja solmujen vaihtoa vaarantamatta tuloja tai julkaisuprosesseja.

Käsitelkää käyttöönottoa konfiguraationhallintana, ei käsin viritettynä palvelintyönä. Leipokaa samat Nginx-, PHP-, WordPress- ja lisäosaversiot jokaiseen solmuun. Jos yksi palvelin tarvitsee manuaalisen korjauksen pysyäkseen kierrossa, klusteri on jo ajautumassa pois määrittelystään.

Suorituskyvyn, tietoturvan ja kustannusten optimointi

Kuormantasaus ei tee WordPress-pinosta tehokasta itsestään. Pienemmillä tai huonosti viritetyillä sivustoilla se voi lisätä verkkohyppyjä, välimuistin monimutkaisuutta ja käyttökustannuksia ennen kuin se korjaa pääasiallisen pullonkaulan.

Infografiikka otsikolla Optimizing Your Load-Balanced WordPress Site, joka esittelee keskeiset strategiat suorituskykyyn, tietoturvaan ja kustannusten hallintaan.

Suorituskykykuri

Kun klusteri on tuotannossa, suorituskyky riippuu yleensä vähemmän itse kuormantasaajasta ja enemmän välimuistin käytöksestä, PHP-workereiden varakapasiteetista ja tietokantakyselyjen malleista. Siksi kypsät tiimit määrittävät välimuistisäännöt eksplisiittisesti sen sijaan, että pitäisivät välimuistia lisäosan asetuksena.

Järkevä oletus on yksinkertainen. Tallentakaa staattiset tiedostot välimuistiin aggressiivisesti. Käyttäkää lyhyempiä TTL-arvoja sivuille, jotka muuttuvat usein. Tyhjentäkää välimuisti sisältöpäivitysten, tuotemuutosten ja keskeisten toimituksellisten tapahtumien yhteydessä. Tarkat ajat riippuvat sovelluksesta, mutta toimintaperiaate pysyy samana: vakaa sisältö pitää pitää poissa PHP:stä ja MySQL:stä mahdollisimman pitkään.

Valvonta vaatii samantasoista kurinalaisuutta. Seuratkaa yhdessä vasteaikaa, suorittimen kuormitusta, PHP-workereiden loppumista, välimuistin osumaprosenttia ja tietokannan viivettä. Pelkkä käytettävyys peittää paljon kipua. Sivusto voi pysyä teknisesti saatavilla, vaikka kassa hidastuu, ylläpitotoiminnot jumittuvat tai kirjautuneiden käyttäjien liikenne alkaa jonottaa välimuistin ulkopuolisten pyyntöjen takana.

Asettakaa hälytysrajat riittävän aikaisin, jotta tiimi ehtii toimia ennen kuin käyttäjät huomaavat ongelman. Monissa WordPress-ympäristöissä tämä tarkoittaa hälyttämistä jatkuvasta resurssipaineesta ja kasvavasta sovelluksen viiveestä sen sijaan, että odotettaisiin täydellistä katkosta.

Tietoturva-asetelma

Kuormantasatun WordPress-kokoonpanon pitäisi kaventaa hyökkäyspintaa. Julkinen sisäänkäynti on kuormantasaaja ja tietoturvakerros. Sovellussolmujen ei pidä ottaa vastaan suoraa internetliikennettä, ellei siihen ole erityistä operatiivista syytä ja korvaavia kontrolleja.

Pitäkää origin-instanssit yksityisinä aina kun mahdollista. Rajoittakaa hallintapääsyä. Päättäkää TLS hallitusti. Jos sivustolla on merkittävä altistumisprofiili, sijoittakaa WAF kuormantasaajan eteen ja varmistakaa, että originin pääsysäännöt luottavat vain tähän reittiin. Tämä on vielä tärkeämpää WooCommercessa, jäsenpalveluissa ja toimituksissa, jotka työskentelevät wp-adminissa monista eri paikoista.

Keskitetty sisääntulo selkeyttää myös poikkeamien hallintaa. Lokit, pyyntörajoitukset, IP-kontrollit ja bottien suodatus toimivat paremmin, kun liikenne tulee sisään yhtä hallittua reittiä.

Kustannusten hallinta

Tiimit ylimitoittavat usein. Kolmen solmun klusteri, jossa on hallinnoitu tietokanta, Redis, objektitallennus, CDN, WAF ja automaattinen skaalaus, voi olla oikea vastaus liiketoimintakriittiselle alustalle. Se on myös kallis vastaus ongelmaan, joka olisi ehkä ratkennut koko sivun välimuistilla, paremmalla kyselyjen virityksellä tai suuremmalla yksittäisen solmun kapasiteetilla.

Kustannusten hallinta alkaa arkkitehtuurin sovittamisesta kuormaan. Jos liikenne on piikikästä mutta pääosin anonyymiä, investoikaa ensin välimuistiin ja CDN:n avulla tehtävään kuorman siirtoon. Jos liikenne on jatkuvasti suurta ja tulee kirjautuneilta käyttäjiltä, kiinnittäkää enemmän huomiota PHP:n samanaikaisuuteen, objektivälimuistin tehokkuuteen ja tietokannan kapasiteettiin. Jos alustalla on tiukat käytettävyysvaatimukset, redundanssi voi oikeuttaa suuremmat kulut jo ennen kuin keskimääräinen käyttöaste näyttää korkealta.

Käytännöllinen toimintalista näyttää tältä:

  • Seuratkaa kuormitusta, ei pelkkää käytettävyyttä: Kasvava viive, täydet PHP-workerpoolit ja matala välimuistin osumaprosentti näkyvät yleensä ennen katkosta.
  • Käyttäkää hallinnoituja palveluita siellä, missä ne poistavat todellista raadantaa: Hallinnoidut tietokanta- ja välimuistikerrokset ovat usein lisähintansa arvoisia, jos tiimi ei halua vastata varmuuskopioista, vikasiirrosta, päivityksistä ja palautuksesta.
  • Pitäkää arkkitehtuuri rehellisenä: Jos jaettu tallennus, solmujen välinen liikenne tai välimuistihudit nostavat viivettä, uusien sovellussolmujen lisääminen kasvattaa yleensä kustannuksia nopeammin kuin suorituskykyä.
  • Tarkistakaa automaattisen skaalauksen käytös säännöllisesti: Huonot raja-arvot voivat skaalata liian myöhään liikennepiikkien aikana tai liian usein, koska sovellus on tehoton.

Parhaat kuormantasatut WordPress-alustat eivät ole suurimpia. Ne ovat niitä, joissa jokaisella lisätyllä kerroksella on selkeä tehtävä, mitattava hyöty ja käyttökustannus, jonka tiimi ymmärtää.

Siirtymäpolkunne skaalautuvaan arkkitehtuuriin

Käsitelkää siirtoa vaiheittaisena insinööriprojektina, ei hostingin vaihtona.

Aloittakaa nykyisen alustan suorituskykymittauksella, jotta tiedätte, onko perimmäinen ongelma suorittimessa, PHP-workereissa, tietokannan kilpailutilanteissa, välimuistihuteissa vai tiedostojen I/O:ssa. Rakentakaa sitten kohdeympäristö testiympäristöön ja varmistakaa ensin vaikeat osat: kirjautumisen toiminta, median yhtenäisyys, ylläpidon työnkulut, ajastetut tehtävät ja välimuistin mitätöinti.

Sen jälkeen ajakaa hallittuja testejä uutta pinoa vastaan ja harjoitelkaa vikaantumista. Poistakaa solmu kierrosta. Varmistakaa, että sivusto pysyy kunnossa. Testatkaa sisällön julkaisu sekä kaikki kassa- ja jäsenyystyönkulut realistisissa olosuhteissa. Vasta sitten kannattaa suunnitella siirtymä.

Siisteimmissä siirroissa käytetään vaiheittaista julkaisua ja tiivistä valvontaa heti liikenteen siirtämisen jälkeen. Se antaa tiimille aikaa havaita tilaan, välimuistiin tai reititykseen liittyvät ongelmat ennen kuin niistä tulee liiketoimintaa haittaavia häiriöitä.

WordPressin kuormantasaus kannattaa, kun alusta on kasvanut yhden solmun kapasiteetin yli. Se on virhe, kun sitä käytetään korvaamaan suorituskyvyn perusinsinöörityötä. Eron tekee arkkitehtuurinen kurinalaisuus.


Jos tiiminne suunnittelee siirtymistä klusteroituun WordPressiin, suuren liikenteen WooCommerceen tai vikasietoisempaan yritystason pinoon, IMADO voi auttaa suunnittelemaan arkkitehtuurin, varmistamaan siirtymäpolun ja rakentamaan alustan, jota toimittajanne ja insinöörinne pystyvät ylläpitämään.