Všetko začína otázkou: čo títo používatelia robia? Tisíc ľudí pripojených k aplikácii neposiela tisíc požiadaviek za sekundu a stránka obslúžená z cache si vyžaduje stokrát menej výpočtu než stránka, ktorá sa počíta pri každej návšteve. Tento sprievodca prevedie používateľov na požiadavky, požiadavky na procesor a pamäť a potom ukáže, ako to overiť záťažovým testom.
„Súčasní používatelia“ označujú tri rôzne veličiny podľa toho, kto hovorí:
Z jednej na druhú sa prechádza Littleovým zákonom: počet rozpracovaných požiadaviek sa rovná priepustnosti v požiadavkách za sekundu vynásobenej priemerným trvaním jednej požiadavky.
Príklad. 600 používateľov aktívnych v rovnakom čase, z ktorých každý spustí požiadavku každých 20 sekúnd, vytvorí 30 požiadaviek za sekundu. Ak každá požiadavka trvá 100 ms, server má v priemere rozpracované len 3 požiadavky. Podstatné je inde: v špičkách a v pomalých požiadavkách.
Požiadavka zamestná procesor počas svojho výpočtu: vykonanie kódu, dopyt do databázy, zostavenie odpovede. Jeden vCPU teda spracuje najviac 1 000 ÷ t požiadaviek za sekundu, kde t je čas výpočtu jednej požiadavky v milisekundách. Čas strávený čakaním (na externé API, na disk) procesor nezamestnáva, ale zamestnáva worker.
| Typ požiadavky | Typický čas výpočtu | Na jeden vCPU, rádovo |
|---|---|---|
| Statický súbor alebo stránka z cache | Menej ako 1 ms | Niekoľko tisíc požiadaviek za sekundu |
| Stránka WordPressu obslúžená z cache stránok | 1 až 5 ms | Niekoľko stoviek za sekundu |
| API v JSON (Node.js, Go, FastAPI) s indexovaným dopytom SQL | 5 až 20 ms | 50 až 200 za sekundu |
| Stránka WordPressu alebo Laravelu počítaná pri každej návšteve | 100 až 300 ms | 3 až 10 za sekundu |
| Report, export, generovanie PDF | 500 ms až niekoľko sekúnd | Menej ako 2 za sekundu |
S týmito rádovými hodnotami zamestná 30 požiadaviek API za sekundu s 10 ms výpočtu 30 % jediného vCPU. Rovnakých 30 požiadaviek za sekundu na stránky WordPressu bez cache si vyžiada 3 až 9 vCPU. Cache stránok slúži práve na to, aby sa stránka presunula zo štvrtého riadku tabuľky na druhý.
Každú rozpracovanú požiadavku obsluhuje worker a workery zaberajú pamäť, či práve pracujú, alebo nie. Počet paralelne spracúvaných požiadaviek často určuje skôr pamäť než procesor:
pm.max_children: 20 procesov znamená 800 MB až 1,6 GB.max_connections.Trvalé pripojenia (websockety, notifikácie v reálnom čase) sa počítajú zvlášť: sú otvorené nepretržite, zaberajú málo procesora a každé niekoľko desiatok kilobajtov pamäte. Server Node.js ich udrží tisíce v niekoľkých stovkách MB.
V reálnej aplikácii sa server zriedka zahltí tam, kde by ste to čakali. Najčastejšie príčiny, v poradí, v akom ich hľadať:
pg_stat_statements, na MySQL log pomalých dopytov.Rádové hodnoty dajú prvú veľkosť; záťažový test dá tú skutočnú. Princíp: simulovať stále viac používateľov na kópii aplikácie a zaznamenať okamih, keď sa čas odozvy prudko zhorší.
wrk -t2 -c50 -d30s --latency https://preprod.vas-web.com/
Pre celý používateľský scenár (prihlásenie, prechádzanie, vyhľadávanie) opíše k6 postup v JavaScripte a zvyšuje záťaž po stupňoch:
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.vas-web.com/');
sleep(15);
}
htop pre procesor, free -h pre pamäť, logy pre chyby.Poradie, ktoré stojí najmenej a prinesie najviac:
Prvé tri kroky pokryjú veľkú väčšinu podnikových aplikácií, webov a API: niekoľko stoviek používateľov aktívnych v rovnakom čase sa zmestí na jediný dobre nastavený server.
VPS Pro sa ponúka v šiestich veľkostiach, na procesoroch Intel Xeon, pamäti ECC a zrkadlených SSD NVMe, a na vyššiu veľkosť prejde kedykoľvek, bez reinštalácie. Komplexná podpora je v cene: povedzte nám, koľko používateľov očakávate pri spustení a o rok, a odporučíme vám veľkosť; a keď sa niektorá stránka spomalí, stanovíme diagnózu a povieme vám, čo urobiť, od systému až po kód vašej aplikácie.
Pri API alebo aplikácii, ktorej požiadavky trvajú 10 až 20 ms výpočtu, niekoľko stoviek používateľov aktívnych v rovnakom čase. Pri webe na WordPresse bez cache stránok približne sto. Rozdiel spočíva v čase výpočtu každej požiadavky a v cache, a preto sa oplatí záťažový test.
Počet návštevníkov za deň sám osebe veľa nepovie: rozhoduje špička. Na prepočet vydeľte denné návštevy počtom hodín aktivity, vynásobte počtom zobrazených stránok na návštevu a potom faktorom špičky 3 až 5. 10 000 návštev za 10 hodín, každá so 4 stránkami, dá v priemere približne 1 stránku za sekundu a v špičke 3 až 5.
Tri znaky: čas odozvy rastie s návštevnosťou, procesor zostáva v špičke nad 80 % alebo dostupná pamäť klesá takmer na nulu. Logy webového servera potom ukazujú chyby 502 alebo 504 a požiadavky čakajú na voľný worker.
Áno: pripojenie cez websocket zostáva otvorené nepretržite. Spotrebúva málo procesora a niekoľko desiatok kilobajtov pamäte. Server Node.js ich udrží tisíce; procesor zaťažujú skôr odosielané správy než otvorené pripojenia.
Simafri
Porozprávajme sa o vašom zámere
Povedzte nám v pár slovách, čo potrebujete: rýchlo sa vám ozveme.
Ďakujeme! Vaša žiadosť bola odoslaná. Čoskoro sa vám ozveme.
Máte radšej e-mail? Napíšte nám na support@simafri.com.