Alles fänkt mat enger Fro un: wat maachen dës Benotzer? Dausend Leit, déi an enger Applikatioun ugemellt sinn, maachen net dausend Ufroe pro Sekonn, an eng Säit aus engem Cache kascht honnertmol manner wéi eng Säit, déi berechent gëtt. Dëse Guide rechent Benotzer an Ufroen ëm, Ufroen a Prozessor an Aarbechtsspäicher, a weist dann, wéi Dir dat mat engem Laaschttest iwwerpréift.
„Gläichzäiteg Benotzer“ bezeechent dräi verschidde Gréissten, jee nodeem, wien et seet:
Vun enger zur anerer kommt Dir mam Gesetz vu Little: d’Zuel vun den Ufroen, déi lafen, ass gläich dem Duerchsaz, an Ufroe pro Sekonn, multiplizéiert mat der duerchschnëttlecher Dauer vun enger Ufro.
Beispill. 600 aktiv Benotzer zur selwechter Zäit, déi jidderee all 20 Sekonnen eng Ufro ausléisen, maachen 30 Ufroe pro Sekonn. Wann all Ufro 100 ms dauert, huet de Server am Duerchschnëtt nëmmen 3 Ufroen, déi lafen. D’Erausfuerderung läit anzwousch anescht: an de Spëtzten an an de luese Ufroen.
Eng Ufro hält de Prozessor fir d’Zäit vun hirem Calcul besat: de Code ausféieren, d’Datebank ofroen, d’Äntwert opbauen. E vCPU veraarbecht also héchstens 1.000 ÷ t Ufroe pro Sekonn, wou t d’Rechenzäit vun enger Ufro a Millisekonnen ass. D’Zäit, déi mat Waarde vergeet (eng extern API, en Disk), hält de Prozessor net besat, awer se hält e Worker besat.
| Aart vun Ufro | Typesch Rechenzäit | Pro vCPU, Gréisstenuerdnung |
|---|---|---|
| Statesche Fichier, oder Säit aus engem Cache | Manner wéi 1 ms | E puer dausend Ufroe pro Sekonn |
| WordPress-Säit aus engem Säitecache | 1 bis 5 ms | E puer honnert pro Sekonn |
| JSON-API (Node.js, Go, FastAPI) mat enger indexéierter SQL-Ufro | 5 bis 20 ms | 50 bis 200 pro Sekonn |
| WordPress- oder Laravel-Säit, déi bei all Besuch berechent gëtt | 100 bis 300 ms | 3 bis 10 pro Sekonn |
| Bericht, Export, PDF-Generatioun | 500 ms bis e puer Sekonnen | Manner wéi 2 pro Sekonn |
Mat dëse Gréisstenuerdnungen halen 30 API-Ufroe pro Sekonn mat 10 ms Calcul 30 % vun engem eenzege vCPU besat. Déi selwecht 30 Ufroe pro Sekonn op WordPress-Säiten ouni Cache brauchen 3 bis 9 vCPU. De Säitecache déngt genee dofir, eng Säit vun der véierter Zeil vun der Tabell op déi zweet ze bréngen.
All Ufro, déi leeft, gëtt vun engem Worker iwwerholl, an d’Worker huelen Aarbechtsspäicher, egal ob se schaffen oder net. Et ass dacks den Aarbechtsspäicher, méi wéi de Prozessor, deen d’Zuel vun den Ufroe festleet, déi parallel veraarbecht ginn:
pm.max_children leet de Plafong fest: 20 Prozesser, dat sinn 800 MB bis 1,6 GB.max_connections.Déi persistent Verbindungen (Websockets, Notifikatiounen an Echtzäit) ginn apaart gezielt: si bleiwe permanent op, huele wéineg Prozessor a just e Brochdeel vun engem Megabyte Aarbechtsspäicher pro Verbindung. En Node.js-Server hält der Dausende mat e puer honnert MB.
Op enger realer Applikatioun kënnt de Server selten do u seng Grenz, wou een et erwaart. Déi heefegst Ursaachen, an der Reiefolleg, an där Dir se sicht:
pg_stat_statements op PostgreSQL, oder de Log vun de luese Ufroe vu MySQL, weist se.D’Gréisstenuerdnunge ginn eng éischt Gréisst; e Laaschttest gëtt déi richteg. De Prinzip: ëmmer méi Benotzer op enger Kopie vun der Applikatioun simuléieren, a feststellen, wéini d’Äntwertzäit an d’Luucht geet.
wrk -t2 -c50 -d30s --latency https://preprod.meng-websait.com/
Fir e komplette Parcours (Umeldung, Navigatioun, Sich) beschreift k6 e Szenario a JavaScript a setzt d’Laascht a Stufen erop:
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.meng-websait.com/');
sleep(15);
}
htop fir de Prozessor, free -h fir den Aarbechtsspäicher, d’Logs fir d’Feeler.D’Reiefolleg, déi am mannste kascht an am meeschte bréngt:
Déi éischt dräi Etappen decken déi grouss Majoritéit vun de Geschäftsapplikatiounen, Websäiten an APIen of: e puer honnert aktiv Benotzer zur selwechter Zäit lafen op engem eenzege Server, deen gutt agestallt ass.
De VPS Pro gëtt et a sechs Gréissten, op Intel-Xeon-Prozessoren, ECC-Späicher a gespigelten NVMe-SSD, an e wiesselt zu all Moment op déi nächst Gréisst, ouni Neiinstallatioun. De Full-Stack-Support ass abegraff: sot eis, wéivill Benotzer Dir beim Start an an engem Joer erwaart, mir beroden Iech bei der Gréisst; a wann eng Säit méi lues gëtt, stelle mir d’Diagnos a soen Iech, wat ze maachen ass, vum System bis zum Code vun Ärer Applikatioun.
Fir eng API oder eng Applikatioun, deenen hir Ufroen 10 bis 20 ms Calcul brauchen, e puer honnert aktiv Benotzer zur selwechter Zäit. Fir eng WordPress-Websäit ouni Säitecache, ongeféier honnert. Den Ënnerscheed kënnt vun der Rechenzäit vun all Ufro a vum Cache, dofir lount sech e Laaschttest.
D’Zuel vu Besicher pro Dag seet wéineg: wat zielt, ass d’Spëtzt. Fir vun deem engen op dat anert ze kommen, deelt Dir d’Visitte vum Dag duerch d’Stonnen, an deenen Aktivitéit ass, multiplizéiert mat de Säiten, déi pro Visitt gekuckt ginn, an dann mat engem Spëtzefacteur vun 3 bis 5. 10.000 Visitten op 10 Stonnen, mat 4 Säiten all Kéier, ginn am Duerchschnëtt ongeféier 1 Säit pro Sekonn, an 3 bis 5 an der Spëtzt.
Dräi Zeechen: d’Äntwertzäit klëmmt mam Traffic, de Prozessor bleift an de Spëtzestonnen iwwer 80 %, oder de disponibele Späicher fält bal op null. D’Logs vum Webserver weisen dann Feeler 502 oder 504, an d’Ufroe waarden op e fräie Worker.
Jo: eng Websocket-Verbindung bleift permanent op. Si verbraucht wéineg Prozessor a just e Brochdeel vun engem Megabyte Aarbechtsspäicher. En Node.js-Server hält der Dausende; et sinn d’Messagen, déi verschéckt ginn, méi wéi déi oppe Verbindungen, déi de Prozessor belaaschten.
Simafri
Loosst eis iwwer Är Websäit schwätzen
Erzielt eis vun Ärem Projet a wéinege Wierder: mir mellen eis séier bei Iech.
Merci! Är Ufro gouf geschéckt. Mir mellen eis séier bei Iech.
Léiwer per E-Mail? Schreift eis op support@simafri.com.