Kõik algab küsimusest: mida need kasutajad teevad? Tuhat rakendusse sisse loginud inimest ei tee tuhat päringut sekundis ja vahemälust serveeritud leht nõuab sada korda vähem tööd kui arvutatud leht. See juhend teisendab kasutajad päringuteks, päringud protsessoriks ja mäluks ning näitab, kuidas seda koormustestiga kontrollida.
«Samaaegsed kasutajad» tähistab olenevalt rääkijast kolme eri suurust:
Ühelt teisele liigutakse Little'i seaduse abil: käimasolevate päringute arv võrdub läbilaskevõimega päringutes sekundis, korrutatud päringu keskmise kestusega.
Näide. 600 korraga aktiivset kasutajat, kellest igaüks käivitab päringu iga 20 sekundi järel, teevad 30 päringut sekundis. Kui iga päring kestab 100 ms, on serveril keskmiselt ainult 3 käimasolevat päringut. Tegelik küsimus on mujal: tippudes ja aeglastes päringutes.
Päring hõivab protsessorit oma arvutuse ajaks: koodi täitmine, andmebaasi pärimine, vastuse koostamine. Üks vCPU töötleb seega kõige rohkem 1 000 ÷ t päringut sekundis, kus t on päringu arvutusaeg millisekundites. Ootamisele kuluv aeg (väline API, ketas) protsessorit ei hõiva, kuid hõivab workeri.
| Päringu tüüp | Tüüpiline arvutusaeg | vCPU kohta, suurusjärk |
|---|---|---|
| Staatiline fail või vahemälust serveeritud leht | Alla 1 ms | Mitu tuhat päringut sekundis |
| Lehevahemälust serveeritud WordPressi leht | 1 kuni 5 ms | Mitusada sekundis |
| JSON API (Node.js, Go, FastAPI) indekseeritud SQL-päringuga | 5 kuni 20 ms | 50 kuni 200 sekundis |
| Igal külastusel arvutatav WordPressi või Laraveli leht | 100 kuni 300 ms | 3 kuni 10 sekundis |
| Aruanne, eksport, PDF-i genereerimine | 500 ms kuni mitu sekundit | Alla 2 sekundis |
Nende suurusjärkude järgi hõivavad 30 API-päringut sekundis 10 ms arvutusajaga 30 % ühest vCPU-st. Samad 30 päringut sekundis vahemäluta WordPressi lehtedel nõuavad 3 kuni 9 vCPU-d. Lehevahemälu ülesanne ongi viia leht tabeli neljandalt realt teisele.
Iga käimasolevat päringut käsitleb worker ja workerid hõivavad mälu, olgu nad tööga hõivatud või mitte. Sageli määrab paralleelselt töödeldavate päringute arvu pigem mälu kui protsessor:
pm.max_children seab ülempiiri: 20 protsessi teeb 800 MB kuni 1,6 GB.max_connections tõstmine.Püsiühendusi (websocketid, reaalajas teavitused) arvestatakse eraldi: pidevalt avatuna hõivavad need vähe protsessorit ja igaüks mõnikümmend kilobaiti mälu. Node.js-server hoiab neid tuhandeid mõnesaja megabaidi sees.
Päris rakenduses küllastub server harva seal, kus seda oodatakse. Kõige sagedasemad põhjused, järjekorras, milles neid otsida:
pg_stat_statements, MySQL-is aeglaste päringute logi.Suurusjärgud annavad esimese suuruse; koormustest annab tegeliku. Põhimõte: simuleerida rakenduse koopial üha rohkem kasutajaid ja märkida hetk, mil vastamisaeg järsult halveneb.
wrk -t2 -c50 -d30s --latency https://preprod.teie-sait.com/
Tervikliku kasutajateekonna jaoks (sisselogimine, sirvimine, otsing) kirjeldab k6 stsenaariumi JavaScriptis ja tõstab koormust astmeti:
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://preprod.teie-sait.com/');
sleep(15);
}
htop protsessori jaoks, free -h mälu jaoks, logid vigade jaoks.Järjekord, mis nõuab kõige vähem ja annab kõige rohkem:
Esimesed kolm sammu katavad valdava enamiku äritarkvarast, saitidest ja API-dest: mitusada korraga aktiivset kasutajat mahub ühte hästi häälestatud serverisse.
VPS Pro on saadaval kuues suuruses, Intel Xeon protsessoritel, ECC-mälu ja peegeldatud NVMe SSD-dega, ning läheb igal ajal suuremale suurusele ilma uuesti paigaldamata. Terviklik tugi sisaldub: öelge meile, mitut kasutajat ootate käivitamisel ja aasta pärast, ja me soovitame teile suuruse; kui mõni leht aeglustub, diagnoosime ja ütleme teile, mida teha, süsteemist kuni teie rakenduse koodini.
API või rakenduse puhul, mille päringud vajavad 10 kuni 20 ms arvutusaega, mitusada korraga aktiivset kasutajat. Lehevahemäluta WordPressi saidi puhul umbes sada. Erinevus tuleneb iga päringu arvutusajast ja vahemälust, seepärast tasub teha koormustest.
Külastajate arv päevas ütleb vähe: loeb tipp. Ühelt teisele jõudmiseks jagage päeva külastused aktiivsete tundide arvuga, korrutage külastuse kohta vaadatud lehtede arvuga ja seejärel tiputeguriga 3 kuni 5. 10 000 külastust 10 tunni jooksul, igaüks 4 lehte, annavad keskmiselt umbes 1 lehe sekundis ja tipus 3 kuni 5.
Kolm märki: vastamisaeg kasvab koos liiklusega, protsessor püsib tipptundidel üle 80 % või saadaolev mälu langeb nulli lähedale. Veebiserveri logid näitavad siis vigu 502 või 504 ja päringud ootavad vaba workerit.
Jah: websocketi ühendus jääb pidevalt avatuks. See tarbib vähe protsessorit ja mõnikümmend kilobaiti mälu. Node.js-server hoiab neid tuhandeid; protsessorit koormavad pigem saadetud sõnumid kui avatud ühendused.
Simafri
Räägime teie kavatsusest
Öelge meile paari sõnaga, mida vajate: vastame teile kiiresti.
Aitäh! Teie päring on saadetud. Võtame teiega peagi ühendust.
Eelistate e-posti? Kirjutage meile aadressil support@simafri.com.