Det hele starter med et spørgsmål: hvad laver brugerne? Tusind personer, der er logget ind i en applikation, sender ikke tusind forespørgsler i sekundet, og en side, der leveres fra en cache, koster hundrede gange mindre end en side, der beregnes. Denne guide oversætter brugere til forespørgsler og forespørgsler til processor og hukommelse, og viser derefter, hvordan du kontrollerer det med en belastningstest.
«Samtidige brugere» betegner tre forskellige størrelser, alt efter hvem der taler:
Man går fra den ene til den anden med Littles lov: antallet af igangværende forespørgsler er lig med gennemstrømningen i forespørgsler pr. sekund ganget med den gennemsnitlige varighed af en forespørgsel.
Eksempel. 600 brugere, der er aktive på samme tid og hver udløser en forespørgsel hvert 20. sekund, giver 30 forespørgsler i sekundet. Varer hver forespørgsel 100 ms, har serveren i gennemsnit kun 3 forespørgsler i gang. Udfordringen ligger et andet sted: i spidsbelastningerne og i de langsomme forespørgsler.
En forespørgsel optager processoren, så længe den beregnes: koden kører, databasen forespørges, svaret bygges. En vCPU behandler derfor højst 1.000 ÷ t forespørgsler i sekundet, hvor t er en forespørgsels beregningstid i millisekunder. Den tid, der går med at vente (på et eksternt API, en disk), optager ikke processoren, men den optager en worker.
| Type forespørgsel | Typisk beregningstid | Pr. vCPU, størrelsesorden |
|---|---|---|
| Statisk fil eller side leveret fra en cache | Under 1 ms | Flere tusinde forespørgsler i sekundet |
| WordPress-side leveret af en sidecache | 1 til 5 ms | Flere hundrede i sekundet |
| JSON-API (Node.js, Go, FastAPI) med en indekseret SQL-forespørgsel | 5 til 20 ms | 50 til 200 i sekundet |
| WordPress- eller Laravel-side beregnet ved hvert besøg | 100 til 300 ms | 3 til 10 i sekundet |
| Rapport, eksport, generering af PDF | 500 ms til flere sekunder | Under 2 i sekundet |
Med disse størrelsesordener optager 30 API-forespørgsler i sekundet med 10 ms beregning 30 % af en enkelt vCPU. De samme 30 forespørgsler i sekundet på WordPress-sider uden cache kræver 3 til 9 vCPU. Sidecachen er netop til for at flytte en side fra tabellens fjerde linje til den anden.
Hver igangværende forespørgsel håndteres af en worker, og workers optager hukommelse, hvad enten de arbejder eller ej. Det er ofte hukommelsen, mere end processoren, der bestemmer, hvor mange forespørgsler der behandles parallelt:
pm.max_children sætter loftet: 20 processer svarer til 800 MB til 1,6 GB.max_connections.Vedvarende forbindelser (websockets, notifikationer i realtid) tælles for sig: de er åbne hele tiden og bruger lidt processor og nogle titals kilobyte hukommelse hver. En Node.js-server kan klare tusindvis af dem på nogle hundrede MB.
I en rigtig applikation bliver serveren sjældent overbelastet dér, hvor man venter det. De hyppigste årsager, i den rækkefølge du skal lede efter dem:
pg_stat_statements i PostgreSQL eller MySQL's log over langsomme forespørgsler peger den ud.Størrelsesordenerne giver en første størrelse; en belastningstest giver den rigtige. Princippet: simulér flere og flere brugere på en kopi af applikationen, og notér det øjeblik, hvor svartiden knækker.
wrk -t2 -c50 -d30s --latency https://staging.din-hjemmeside.com/
Til et komplet forløb (login, navigation, søgning) beskriver k6 et scenarie i JavaScript og øger belastningen trinvis:
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 100 },
{ duration: '5m', target: 100 },
{ duration: '2m', target: 300 },
{ duration: '5m', target: 300 },
{ duration: '2m', target: 0 },
],
thresholds: { http_req_duration: ['p(95)<500'] },
};
export default function () {
http.get('https://staging.din-hjemmeside.com/');
sleep(15);
}
htop for processoren, free -h for hukommelsen, logfilerne for fejl.Den rækkefølge, der koster mindst og giver mest:
De tre første trin dækker langt de fleste forretningsapplikationer, hjemmesider og API'er: flere hundrede brugere, der er aktive på samme tid, kan klares af en enkelt velindstillet server.
VPS Pro fås i seks størrelser, på Intel Xeon-processorer, ECC-hukommelse og spejlede NVMe-SSD'er, og skifter til en større størrelse når som helst, uden geninstallation. Totalsupport er inkluderet: fortæl os, hvor mange brugere du forventer ved lanceringen og om et år, så anbefaler vi størrelsen; og når en side bliver langsom, stiller vi diagnosen og fortæller dig, hvad du skal gøre, fra systemet til din applikations kode.
For et API eller en applikation, hvis forespørgsler tager 10 til 20 ms at beregne, flere hundrede brugere, der er aktive på samme tid. For en WordPress-hjemmeside uden sidecache omkring hundrede. Forskellen skyldes hver forespørgsels beregningstid og cachen, og derfor giver en belastningstest mening.
Antallet af besøgende om dagen siger ikke meget: det, der tæller, er spidsbelastningen. For at gå fra det ene til det andet dividerer du dagens besøg med antallet af aktive timer, ganger med antallet af sidevisninger pr. besøg og derefter med en spidsfaktor på 3 til 5. 10.000 besøg over 10 timer med 4 sider hver giver omkring 1 side i sekundet i gennemsnit og 3 til 5 ved spidsbelastning.
Tre tegn: svartiden stiger med trafikken, processoren ligger over 80 % i myldretiden, eller den tilgængelige hukommelse falder til tæt på nul. Webserverens logfiler viser så 502- eller 504-fejl, og forespørgslerne venter på en ledig worker.
Ja: en websocket-forbindelse forbliver åben hele tiden. Den bruger lidt processor og nogle titals kilobyte hukommelse. En Node.js-server kan klare tusindvis af dem; det er de sendte beskeder, mere end de åbne forbindelser, der belaster processoren.
Simafri
Lad os tale om din hjemmeside
Fortæl os om dit projekt med få ord: vi vender hurtigt tilbage til dig.
Tak! Din forespørgsel er sendt. Vi vender tilbage til dig hurtigst muligt.
Foretrækker du e-mail? Skriv til os på support@simafri.com.