Izstrāde & sistēmas

Servera slodzes testēšana un FastCGI mikrokešatmiņa apmeklējuma pīķu izturēšanai

AA Aigars Armanovs
• 10.10.25. • 5 min lasīšana

Lielākais murgs jebkuram uzņēmējam ir situācija, kad dārgi apmaksātā reklāmas kampaņa beidzot sāk nest tūkstošiem apmeklētāju, bet mājaslapa pēc piecām minūtēm kļūst nepieejama un rāda "504 Gateway Timeout" vai "502 Bad Gateway" kļūdas paziņojumu. Katra dīkstāves minūte šādā brīdī nozīmē simtiem vai tūkstošiem eiro negūtu ieņēmumu un neatgriezeniski zaudētu pircēju uzticību.

Daudzi uzņēmumi kļūdaini uzskata, ka risinājums ir vienkārši dārgāks serveris ar vairāk procesora kodoliem. Tomēr praksē pat 32 kodolu serveris bez pareizas kešatmiņas arhitektūras sabrūk jau pie 100 vienlaicīgiem dinamiskiem PHP pieprasījumiem. Šajā tehniskajā pamācībā parādīsim, kā ar atvērtā koda rīkiem veikt reālu slodzes testēšanu un ieviest Nginx FastCGI mikrokešatmiņu, kas ļauj parastam virtuālajam serverim bez piepūles apkalpot tūkstošiem pieprasījumu sekundē.

1. Solis: Reālistiska slodzes testa izveide ar k6

Vienkārša vienas lapas pingēšana nesniedz patiesu priekšstatu par to, kā vietne uzvedīsies, kad reāli lietotāji meklēs produktus, pievienos preces grozam un pārlūkos kategorijas. Slodzes testam ir jābūt daudzpakāpju scenārijam. Rīks k6 ir ideāli piemērots, jo tas ļauj rakstīt scenārijus modernā JavaScript sintaksē.

import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '1m', target: 50 },  // Iesildīšanās līdz 50 lietotājiem
    { duration: '3m', target: 200 }, // Pīķa slodze: 200 vienlaicīgi lietotāji
    { duration: '1m', target: 0 },   // Atslābums
  ],
  thresholds: {
    http_req_duration: ['p(95)<400'], // 95% atbilžu jābūt zem 400ms
    http_req_failed: ['rate<0.01'],    // Kļūdu skaits zem 1%
  },
};

export default function () {
  // 1. Apmeklē sākumlapu
  let res1 = http.get('https://marketmenow.eu/');
  check(res1, { 'status ir 200': (r) => r.status === 200 });
  sleep(1);

  // 2. Pārlūko pakalpojumu sadaļu
  let res2 = http.get('https://marketmenow.eu/majaslapu-izstrade/');
  check(res2, { 'pakalpojumu lapa ielādēta': (r) => r.status === 200 });
  sleep(2);
}

Šādu testu izpildot no ārēja servera, jūs redzēsiet precīzu punktu, kurā servera CPU noslogojums sasniedz 100% un atbildes laiki sāk nekontrolējami pieaugt.

Aigars Armanovs
Aigars Armanovs Galvenais Arhitekts & Dibinātājs

"Katrs dinamisks WordPress lapas pieprasījums prasa 50 līdz 150 datubāzes vaicājumus un simtiem PHP failu interpretāciju. Ja jums vienā minūtē atnāk 1,000 apmeklētāju, tas nozīmē 100,000 datubāzes vaicājumu. Nginx FastCGI mikrokešatmiņa saglabā gatavu HTML atbildi uz 5 līdz 60 sekundēm RAM atmiņā. Rezultātā PHP un MySQL netiek lieki darbināti vispār, un lapas atbildes laiks krītas no 800ms uz 8ms."

2. Solis: Nginx FastCGI mikrokešatmiņas ieviešana

Mikrokešatmiņas (microcaching) noslēpums ir ļoti īss kešatmiņas laiks (piemēram, 10 sekundes statiskajām lapām un emuāram). Tas nozīmē, ka saturs apmeklētājiem vienmēr ir svaigs, bet pēkšņos pīķos visi 500 apmeklētāji saņem vienu un to pašu iepriekš uzģenerēto HTML failu tieši no Nginx atmiņas.

# 1. Definē kešatmiņas ceļu Nginx konfigurācijas sākumā (ārpus server bloka)
fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m max_size=1g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503;

# 2. Servera blokā definē izņēmumus (Grozi, kases, autorizēti lietotāji)
set $skip_cache 0;

if ($request_method = POST) {
    set $skip_cache 1;
}
if ($query_string != "") {
    set $skip_cache 1;
}
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/cart/|/checkout/|/my-account/") {
    set $skip_cache 1;
}
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
    set $skip_cache 1;
}

# 3. PHP lokācijā pieslēdz kešatmiņu
location ~ \.php$ {
    fastcgi_cache WORDPRESS;
    fastcgi_cache_valid 200 301 302 10s;
    fastcgi_cache_bypass $skip_cache;
    fastcgi_no_cache $skip_cache;
    add_header X-FastCGI-Cache $upstream_cache_status;
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}

3. Solis: Veiktspējas salīdzinājums pirms un pēc

Zemāk redzami reāli rādītāji, testējot standarta VPS serveri (4 vCPU, 8 GB RAM) ar 200 vienlaicīgiem aktīviem lietotājiem:

Metrika Standarta PHP-FPM bez kešatmiņas Nginx FastCGI mikrokešatmiņa
Pieprasījumi sekundē (RPS) 18 RPS (sistēma nosmok) 1,450+ RPS (brīva jauda)
Servera atbildes laiks (TTFB) 1,850 ms (kavēšanās) 12 ms (zibenīgs)
CPU noslodze pīķa brīdī 100% (bloķēti procesi) 14% (optimāls režīms)
Kļūdu biežums (502 / 504) 34.2% kļūdu 0.00% kļūdu
✓

Servera pārbaudes soļi pirms lielajām izpārdošanām

1
Slodzes audits: Izpildiet k6 slodzes testu vismaz 3 reizes virs prognozētās maksimālās satiksmes.
2
FastCGI galvene: Pārbaudiet pārlūkā atbildes galveni X-FastCGI-Cache: HIT publiskajām lapām.
3
Groza neaizskaramība: Pārliecinieties, ka ieliekot preci grozā, galvene pārslēdzas uz BYPASS.
4
Žurnālfailu uzraudzība: Pārbaudiet Nginx un PHP-FPM kļūdu žurnālus pirms kampaņu oficiālā starta.
Noderīgs saturs?

Padalies ar šo rakstu ar kolēģiem vai partneriem

Palīdzi citiem atklāt praktiskas digitālā mārketinga, SEO un AI automatizācijas stratēģijas.

Aigars Armanovs

Aigars Armanovs

SEO arhitekts & AI procesu vadītājs | MMN dibinātājs

MMN vadītājs Aigars mārketingā pirmo pieredzi guvis mārketinga speciālista amatā veikalu tīklā Drogas 2005. gadā, vēlāk attīstot privātus interneta projektus un vadot vadošu digitālā mārketinga aģentūru Latvijā ar fokusu uz Google produktiem. Šobrīd specializējas digitālā mārketinga, SEO un biznesa procesu automatizācijā ar mākslīgā intelekta risinājumiem, palīdzot uzņēmumiem mērogot rezultātus.

Visi autora raksti • SEO pakalpojumi • LinkedIn profils
← Iepriekšējais raksts

Melnās Piektdienas mārketinga kampaņu tehniskā plānošana un sagatavošanās soļi

Nākamais raksts →

TOP 7 kļūdas Google Ads reklāmu tekstos un piedāvājuma formulējumā

Atgriezties uz visiem rakstiem

Vēlaties pārrunāt sava biznesa digitālo izaugsmi?

Piesakiet 30 minūšu stratēģijas sarunu. Kopā izskatīsim jūsu digitālā mārketinga, SEO un AI automatizācijas potenciālu.

Pieteikt bezmaksas sarunu
Scroll to Top