Viss sākas ar jautājumu: ko šie lietotāji dara? Tūkstotis cilvēku, kas pieslēgušies lietojumprogrammai, neveic tūkstoti pieprasījumu sekundē, un no kešatmiņas apkalpota lapa prasa simtreiz mazāk resursu nekā lapa, ko aprēķina katrā apmeklējumā. Šajā ceļvedī lietotāji pārvērsti pieprasījumos, pieprasījumi procesora laikā un atmiņā, un parādīts, kā to pārbaudīt ar slodzes testu.
«Vienlaicīgi lietotāji» apzīmē trīs dažādus lielumus atkarībā no tā, kurš runā:
No viena lieluma uz otru pāriet ar Litla likumu: apstrādē esošo pieprasījumu skaits ir vienāds ar caurlaidspēju pieprasījumos sekundē, kas reizināta ar pieprasījuma vidējo ilgumu.
Piemērs. 600 vienlaikus aktīvi lietotāji, no kuriem katrs izraisa pieprasījumu reizi 20 sekundēs, rada 30 pieprasījumus sekundē. Ja katrs pieprasījums ilgst 100 ms, serverim vidēji apstrādē ir tikai 3 pieprasījumi. Īstais izaicinājums ir citur: maksimumos un lēnajos pieprasījumos.
Pieprasījums aizņem procesoru, kamēr tas skaitļo: izpilda kodu, vaicā datubāzi, veido atbildi. Tāpēc viens vCPU apstrādā ne vairāk kā 1000 ÷ t pieprasījumu sekundē, kur t ir viena pieprasījuma skaitļošanas laiks milisekundēs. Gaidīšanas laiks (ārējs API, disks) procesoru neaizņem, bet aizņem darba procesu.
| Pieprasījuma veids | Tipiskais skaitļošanas laiks | Uz vienu vCPU, aptuveni |
|---|---|---|
| Statisks fails vai lapa no kešatmiņas | Mazāk par 1 ms | Vairāki tūkstoši pieprasījumu sekundē |
| WordPress lapa, ko apkalpo lapu kešatmiņa | 1 līdz 5 ms | Vairāki simti sekundē |
| JSON API (Node.js, Go, FastAPI) ar indeksētu SQL vaicājumu | 5 līdz 20 ms | 50 līdz 200 sekundē |
| WordPress vai Laravel lapa, ko aprēķina katrā apmeklējumā | 100 līdz 300 ms | 3 līdz 10 sekundē |
| Atskaite, eksports, PDF ģenerēšana | No 500 ms līdz vairākām sekundēm | Mazāk par 2 sekundē |
Ar šiem lielumiem 30 API pieprasījumi sekundē ar 10 ms skaitļošanas aizņem 30 % no viena vCPU. Tie paši 30 pieprasījumi sekundē uz WordPress lapām bez kešatmiņas prasa 3 līdz 9 vCPU. Lapu kešatmiņa kalpo tieši tam, lai lapu pārceltu no tabulas ceturtās rindas uz otro.
Katru apstrādē esošu pieprasījumu apkalpo darba process (worker), un darba procesi aizņem atmiņu neatkarīgi no tā, vai tie strādā. Bieži tieši atmiņa, vairāk nekā procesors, nosaka paralēli apstrādājamo pieprasījumu skaitu:
pm.max_children nosaka griestus: 20 procesi ir 800 MB līdz 1,6 GB.max_connections palielināšana.Pastāvīgos savienojumus (websockets, reāllaika paziņojumi) skaita atsevišķi: tie ir atvērti visu laiku, patērē maz procesora un katrs dažus desmitus kilobaitu atmiņas. Node.js serveris tur tūkstošiem tādu dažos simtos MB.
Reālā lietojumprogrammā serveris reti sasniedz robežu tur, kur to gaida. Biežākie cēloņi tādā secībā, kādā tos meklēt:
pg_stat_statements, MySQL vidē lēno vaicājumu žurnāls.Aptuvenie lielumi dod pirmo izmēru; slodzes tests dod īsto. Princips: lietojumprogrammas kopijā simulēt arvien vairāk lietotāju un konstatēt brīdi, kad atbildes laiks strauji pasliktinās.
wrk -t2 -c50 -d30s --latency https://preprod.jusu-vietne.com/
Pilnam lietotāja ceļam (pieslēgšanās, pārlūkošana, meklēšana) k6 apraksta scenāriju JavaScript valodā un palielina slodzi pakāpeniski:
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.jusu-vietne.com/');
sleep(15);
}
htop procesoram, free -h atmiņai, žurnālus kļūdām.Secība, kas prasa vismazāk un dod visvairāk:
Pirmie trīs soļi sedz lielāko daļu biznesa lietojumprogrammu, vietņu un API: vairāki simti vienlaikus aktīvu lietotāju ietilpst vienā labi noregulētā serverī.
VPS Pro ir pieejams sešos izmēros uz Intel Xeon procesoriem, ECC atmiņas un spoguļotiem NVMe SSD, un jebkurā brīdī pāriet uz lielāku izmēru bez pārinstalēšanas. Visaptverošais atbalsts ir iekļauts: pastāstiet, cik lietotāju gaidāt palaišanas brīdī un pēc gada, un mēs ieteiksim izmēru; un, kad kāda lapa palēninās, mēs diagnosticējam un pasakām, kas jādara, no sistēmas līdz pat jūsu lietojumprogrammas kodam.
API vai lietojumprogrammai, kuras pieprasījumiem vajag 10 līdz 20 ms skaitļošanas, vairākus simtus vienlaikus aktīvu lietotāju. WordPress vietnei bez lapu kešatmiņas aptuveni simtu. Atšķirību nosaka katra pieprasījuma skaitļošanas laiks un kešatmiņa, tāpēc slodzes tests ir tā vērts.
Apmeklētāju skaits dienā pats par sevi pasaka maz: svarīgs ir maksimums. Lai pārietu no viena uz otru, izdaliet dienas apmeklējumus ar aktīvajām stundām, reiziniet ar skatīto lapu skaitu vienā apmeklējumā un pēc tam ar maksimuma koeficientu 3 līdz 5. 10 000 apmeklējumu 10 stundās, katrā 4 lapas, dod vidēji aptuveni 1 lapu sekundē un maksimumā 3 līdz 5.
Trīs pazīmes: atbildes laiks pieaug līdz ar datplūsmu, procesora noslodze maksimālās slodzes stundās paliek virs 80 %, vai pieejamā atmiņa nokrītas tuvu nullei. Tīmekļa servera žurnālos tad parādās kļūdas 502 vai 504, un pieprasījumi gaida brīvu darba procesu.
Jā: websocket savienojums ir atvērts visu laiku. Tas patērē maz procesora un dažus desmitus kilobaitu atmiņas. Node.js serveris tur tūkstošiem tādu; procesoru noslogo nosūtītie ziņojumi, vairāk nekā atvērtie savienojumi.
Simafri
Parunāsim par jūsu ieceri
Pasakiet mums dažos vārdos, kas jums vajadzīgs: mēs jums ātri atbildam.
Paldies! Jūsu pieprasījums ir nosūtīts. Drīzumā ar jums sazināsimies.
Labāk e-pastu? Rakstiet mums uz support@simafri.com.