HTTP keep-alive on yksi niistä verkkoteknologian perusominaisuuksista, jotka ovat lähes näkymättömiä käyttäjälle mutta ratkaisevan tärkeitä suorituskyvylle. WordPressin kaltaisessa dynaamisessa järjestelmässä keep-alive vaikuttaa suoraan siihen, kuinka nopeasti sivut latautuvat ja kuinka paljon kuormaa palvelin kestää.
Kyse ei ole WordPressin omasta ominaisuudesta, vaan HTTP-protokollan käyttäytymisestä palvelimen ja selaimen välillä. Silti sen vaikutus näkyy selvästi WordPress-sivuston vasteajoissa, resurssien käytössä ja skaalautuvuudessa.
Mitä HTTP keep-alive tarkoittaa
Normaalissa HTTP/1.0-mallissa jokainen pyyntö toimi näin:
-
Selain avaa TCP-yhteyden
-
Pyyntö lähetetään
-
Vastaus saadaan
-
Yhteys suljetaan
Jos sivu sisälsi:
– HTML:n
– CSS:n
– JavaScriptin
– kuvia
jokainen tiedosto vaati oman yhteyden.
HTTP keep-alive muuttaa tämän mallin. Yhteys:
– pidetään avoinna useita pyyntöjä varten
– käytetään uudelleen
– suljetaan vasta myöhemmin
Yksi TCP-yhteys voi siis palvella useita resursseja.
Miksi yhteyden avaaminen on kallista
TCP-yhteyden avaaminen ei ole ilmainen operaatio. Se sisältää:
– kolmen vaiheen handshake-prosessin
– mahdollisen TLS-kättelyn
– verkon viiveen
TLS-yhteydessä tämä voi tarkoittaa:
– useita RTT-kierroksia
– kymmeniä millisekunteja viivettä
Jos jokainen resurssi avaa uuden yhteyden, viive kasvaa nopeasti.
WordPress-sivun resurssimäärä
Tyypillinen WordPress-sivu lataa:
– HTML-dokumentin
– useita CSS-tiedostoja
– useita JavaScript-tiedostoja
– fontteja
– kuvia
Helposti:
– 30–80 HTTP-pyyntöä
– joskus yli 100
Ilman keep-alivea tämä tarkoittaisi:
– kymmeniä TCP-yhteyksiä
– valtavaa viivekuormaa
Keep-aliven vaikutus vasteaikaan
Kun keep-alive on käytössä:
– sama yhteys palvelee useita resursseja
– handshake tehdään vain kerran
– verkon viive pienenee
Tuloksena:
– nopeampi first paint
– lyhyempi sivun latausaika
– parempi käyttäjäkokemus
Tämä vaikutus korostuu erityisesti:
– mobiiliverkoissa
– korkean latenssin yhteyksissä
– kansainvälisessä liikenteessä
Vaikutus palvelimen kuormaan
Keep-alive ei auta vain käyttäjää. Se vaikuttaa myös palvelimen resurssien käyttöön.
Ilman keep-alivea:
– jokainen pyyntö avaa uuden yhteyden
– TCP-stack kuormittuu
– context switchien määrä kasvaa
Keep-aliven kanssa:
– vähemmän yhteydenavausoperaatioita
– vähemmän CPU-kuormaa
– parempi yhteyksien hyötysuhde
Tämä on erityisen tärkeää high-traffic WordPress-sivustoissa.
Keep-aliven varjopuolet
Keep-alive ei ole pelkkä ilmainen optimointi. Se tuo mukanaan myös kompromisseja.
Yhteydet jäävät auki
Kun yhteys pidetään avoinna:
– se varaa muistia
– se varaa socket-resursseja
– se vie yhteyskapasiteettia
Jos keep-alive timeout on liian pitkä:
– palvelin täyttyy idle-yhteyksistä
– uusia yhteyksiä ei voida avata
– vasteajat kasvavat
WordPressin hitaat pyynnöt
Jos WordPress-pyyntö:
– kestää pitkään
– odottaa tietokantaa
– tekee ulkoisia API-kutsuja
keep-alive-yhteys pysyy varattuna koko ajan. Tämä voi:
– vähentää samanaikaisten pyyntöjen määrää
– heikentää skaalautuvuutta
HTTP/2 ja HTTP/3 muuttavat tilannetta
Modernit protokollat:
– HTTP/2
– HTTP/3
rakentuvat keep-alive-ajattelun päälle. Ne:
– käyttävät yhtä yhteyttä
– multiplexaavat useita pyyntöjä
– vähentävät latenssia entisestään
WordPress-sivusto, joka käyttää HTTP/2:ta CDN:n tai modernin palvelimen kautta, hyötyy tästä automaattisesti.
Keep-alive ja CDN
Kun CDN on käytössä:
– käyttäjän ja CDN:n välinen keep-alive on nopea
– CDN pitää yhteydet origin-palvelimeen
– origin-kuorma pienenee
Tämä tekee keep-alivesta entistä tärkeämmän osan kokonaisarkkitehtuuria.
Yleiset virhekonfiguraatiot
Keep-alive pois päältä
Joissakin ympäristöissä:
– keep-alive on vahingossa pois käytöstä
– vanhat konfiguraatiot estävät sen
Tämä näkyy:
– hitaana sivulatauksena
– korkeana TCP-yhteysmääränä
Liian pitkä timeout
Jos keep-alive timeout on:
– kymmeniä sekunteja
– tai jopa minuutteja
palvelin voi täyttyä idle-yhteyksistä.
Yhteenveto
HTTP keep-alive on keskeinen tekijä WordPressin suorituskyvyssä, vaikka se ei olekaan WordPressin oma ominaisuus. Se:
– vähentää TCP-yhteyksien määrää
– pienentää latenssia
– parantaa sivun latausaikaa
– vähentää palvelimen kuormaa
Samalla se vaatii:
– oikein säädetyt timeout-arvot
– riittävät palvelinresurssit
– tasapainon yhteyksien määrän ja keston välillä
Ilman keep-alivea moderni WordPress-sivusto olisi kuin ravintola, jossa jokainen asiakas pakotetaan poistumaan ulos ja palaamaan takaisin jokaista suupalaa varten. Teknologisesti mahdollista, mutta käytännössä täysin järjetöntä.
