Kaikki alkaa kysymyksestä: mitä nämä käyttäjät tekevät? Tuhat sovellukseen kirjautunutta henkilöä ei tee tuhatta pyyntöä sekunnissa, ja välimuistista palveltu sivu vie sata kertaa vähemmän resursseja kuin joka kerta laskettu sivu. Tämä opas muuntaa käyttäjät pyynnöiksi ja pyynnöt suoritinajaksi ja muistiksi ja näyttää sitten, miten tulos varmistetaan kuormitustestillä.
”Samanaikaiset käyttäjät” tarkoittaa kolmea eri suuretta sen mukaan, kuka puhuu:
Suureesta toiseen päästään Littlen lailla: käsittelyssä olevien pyyntöjen määrä on läpäisy (pyyntöä sekunnissa) kerrottuna pyynnön keskimääräisellä kestolla.
Esimerkki. 600 yhtä aikaa aktiivista käyttäjää, joista kukin tekee pyynnön 20 sekunnin välein, tuottaa 30 pyyntöä sekunnissa. Jos kukin pyyntö kestää 100 ms, palvelimella on käsittelyssä keskimäärin vain 3 pyyntöä. Ratkaiseva kysymys on muualla: piikeissä ja hitaissa pyynnöissä.
Pyyntö varaa suorittimen laskentansa ajaksi: koodin suoritus, tietokantakysely, vastauksen muodostaminen. Yksi vCPU käsittelee siis enintään 1 000 ÷ t pyyntöä sekunnissa, missä t on yhden pyynnön laskenta-aika millisekunteina. Odottamiseen kuluva aika (ulkoinen rajapinta, levy) ei varaa suoritinta, mutta se varaa workerin.
| Pyynnön tyyppi | Tyypillinen laskenta-aika | vCPU:ta kohden, suuruusluokka |
|---|---|---|
| Staattinen tiedosto tai välimuistista palveltu sivu | Alle 1 ms | Useita tuhansia pyyntöjä sekunnissa |
| Sivuvälimuistista palveltu WordPress-sivu | 1 ja 5 ms:n välillä | Useita satoja sekunnissa |
| JSON-rajapinta (Node.js, Go, FastAPI) ja indeksoitu SQL-kysely | 5 ja 20 ms:n välillä | 50 ja 200 pyynnön välillä sekunnissa |
| WordPress- tai Laravel-sivu, joka lasketaan joka käynnillä | 100 ja 300 ms:n välillä | 3 ja 10 pyynnön välillä sekunnissa |
| Raportti, vienti, PDF-tiedoston luonti | 500 ms:sta useisiin sekunteihin | Alle 2 pyyntöä sekunnissa |
Näillä suuruusluokilla 30 rajapintapyyntöä sekunnissa 10 ms:n laskenta-ajalla vie 30 % yhdestä vCPU:sta. Samat 30 pyyntöä sekunnissa WordPress-sivuihin ilman välimuistia vaativat 3 ja 9 vCPU:n välillä. Sivuvälimuistin tehtävä on juuri siirtää sivu taulukon neljänneltä riviltä toiselle.
Jokaisen käsittelyssä olevan pyynnön hoitaa worker, ja workerit vievät muistia, tekivät ne työtä tai eivät. Usein juuri muisti, enemmän kuin suoritin, ratkaisee rinnakkain käsiteltävien pyyntöjen määrän:
pm.max_children asettaa ylärajan: 20 prosessia vie 800 MB:n ja 1,6 GB:n välillä.max_connections-arvon nostaminen.Pysyvät yhteydet (websocketit, reaaliaikaiset ilmoitukset) lasketaan erikseen: jatkuvasti avoimina ne vievät vähän suoritinta ja kukin muutamia kymmeniä kilotavuja muistia. Node.js-palvelin pitää niitä tuhansia muutamassa sadassa megatavussa.
Todellisessa sovelluksessa palvelin ruuhkautuu harvoin siellä, missä sitä odottaa. Yleisimmät syyt siinä järjestyksessä, jossa niitä kannattaa etsiä:
pg_stat_statements tai MySQL:n hitaiden kyselyjen loki osoittaa sen.Suuruusluokat antavat ensimmäisen koon; kuormitustesti antaa todellisen. Periaate: simuloidaan yhä useampia käyttäjiä sovelluksen kopiota vastaan ja kirjataan hetki, jolloin vasteaika romahtaa.
wrk -t2 -c50 -d30s --latency https://testi.sivustonne.com/
Kokonaiselle käyttöpolulle (kirjautuminen, selaus, haku) k6 kuvaa skenaarion JavaScriptillä ja kasvattaa kuormaa porrastetusti:
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://testi.sivustonne.com/');
sleep(15);
}
htop suorittimelle, free -h muistille ja lokit virheille.Järjestys, joka vaatii vähiten työtä ja tuottaa eniten:
Kolme ensimmäistä vaihetta kattavat valtaosan liiketoimintasovelluksista, sivustoista ja rajapinnoista: useita satoja yhtä aikaa aktiivisia käyttäjiä mahtuu yhdelle hyvin säädetylle palvelimelle.
VPS Pro on saatavana kuutena kokona Intel Xeon -suorittimilla, ECC-muistilla ja peilatuilla NVMe-SSD-levyillä, ja se siirtyy suurempaan kokoon milloin tahansa ilman uudelleenasennusta. Kokonaistuki sisältyy: kertokaa meille, montako käyttäjää odotatte julkaisussa ja vuoden päästä, niin suosittelemme sopivan koon; ja kun jokin sivu hidastuu, teemme diagnoosin ja kerromme, mitä tehdä, järjestelmästä sovelluksenne koodiin asti.
Rajapinnalle tai sovellukselle, jonka pyynnöt vievät 10 ja 20 ms:n välillä laskenta-aikaa, useita satoja yhtä aikaa aktiivisia käyttäjiä. WordPress-sivustolle ilman sivuvälimuistia noin sata. Ero johtuu kunkin pyynnön laskenta-ajasta ja välimuistista, ja siksi kuormitustesti kannattaa.
Kävijöiden määrä päivässä kertoo vähän: ratkaisevaa on huippu. Muuntaaksenne luvun jakakaa päivän käynnit aktiivisten tuntien määrällä, kertokaa käyntiä kohden katsottujen sivujen määrällä ja sitten huippukertoimella, joka on 3:n ja 5:n välillä. 10 000 käyntiä 10 tunnin aikana, kukin 4 sivua, tekee keskimäärin noin 1 sivun sekunnissa ja huipussa 3 ja 5 sivun välillä sekunnissa.
Kolme merkkiä: vasteaika kasvaa liikenteen mukana, suoritin pysyy ruuhka-aikoina yli 80 %:ssa tai käytettävissä oleva muisti laskee lähelle nollaa. Verkkopalvelimen lokeissa näkyy silloin 502- tai 504-virheitä, ja pyynnöt odottavat vapaata workeria.
Kyllä: websocket-yhteys pysyy avoinna jatkuvasti. Se kuluttaa vähän suoritinta ja muutamia kymmeniä kilotavuja muistia. Node.js-palvelin pitää niitä tuhansia; suoritinta kuormittavat lähetetyt viestit enemmän kuin avoimet yhteydet.
Simafri
Jutellaan hankkeestasi
Kerro meille muutamalla sanalla, mitä tarvitset: vastaamme sinulle nopeasti.
Kiitos! Pyyntösi on lähetetty. Vastaamme sinulle pian.
Suositko sähköpostia? Kirjoita meille osoitteeseen support@simafri.com.