Un magazin online poate părea perfect normal atunci când îl vizitezi. Paginile se încarcă, produsele apar, coșul funcționează și comenzile pot fi plasate fără probleme.

În spatele site-ului însă, lucrurile pot arăta cu totul diferit.

Recent am analizat un magazin WordPress cu WooCommerce al cărui server era încărcat aproape permanent. Procesorul era ocupat în jur de 80%, deși numărul vizitatorilor reali nu justifica nici pe departe un asemenea consum de resurse.

Primul gând într-o astfel de situație este, de obicei, că site-ul are nevoie de un server mai puternic.

Dar înainte să adăugăm resurse, am vrut să vedem cine le consumă.

Vizitatorii care nu cumpără nimic

Analizând traficul și cererile procesate de WooCommerce, am găsit un comportament interesant.

O parte importantă din resurse era consumată de roboți care parcurgeau automat magazinul. Printre ei se aflau crawlere obișnuite, dar și crawlere folosite de diferite servicii bazate pe inteligență artificială.

Faptul că un robot citește paginile unui magazin nu este, în sine, o problemă. Motoarele de căutare fac acest lucru de foarte mult timp, iar indexarea produselor este chiar utilă.

Problema era ce făceau acești roboți după ce ajungeau pe pagina produsului.

Nu se limitau la citirea paginii. Urmau linkuri și declanșau diferite acțiuni disponibile în magazin: adăugau produse în coș, le comparau sau le puneau în lista de favorite.

Într-unul dintre cazurile observate, un singur robot a generat peste 380 de adăugări în coș în aproximativ cinci minute.

Evident, nu avea nicio intenție să finalizeze comanda.

De ce 380 de accesări pot conta atât de mult

Aici apare o diferență importantă între o pagină obișnuită și o acțiune WooCommerce.

O pagină de produs poate fi servită din cache. În acest caz, serverul poate răspunde foarte repede, fără să reconstruiască pagina de fiecare dată.

„Adaugă în coș” este însă o operațiune dinamică.

WooCommerce trebuie să pornească PHP, să inițializeze WordPress și pluginurile necesare, să gestioneze sesiunea și coșul și să execute operațiunile asociate cererii. Cache-ul unei pagini nu poate elimina pur și simplu această muncă.

O cerere nu reprezintă o problemă.

Nici zece.

Dar atunci când mai mulți roboți generează continuu sute sau mii de astfel de cereri, serverul ajunge să muncească pentru niște „clienți” care nu vor cumpăra niciodată nimic.

În cazul analizat de noi, aproape trei sferturi din timpul de procesare al aplicației ajunsese să fie consumat de asemenea acțiuni. Restul venea, în bună parte, tot de la roboți: pagini cu parametri în adresă, care ocolesc cache-ul și obligă serverul să le reconstruiască de fiecare dată.

Nu am vrut să blocăm roboții

Soluția simplă ar fi fost să blocăm complet traficul automat.

Nu am făcut asta.

Unele crawlere sunt importante pentru indexarea magazinului, iar apariția serviciilor AI schimbă și modul în care oamenii descoperă informații și produse pe Internet. Nu are sens să consumăm resurse inutil, dar nici să blocăm fără discernământ orice robot care vizitează site-ul.

Așa că am separat indexarea conținutului de acțiunile specifice unui cumpărător.

Un robot poate citi pagina unui produs.

Nu are însă niciun motiv real să adauge același produs în coș, să-l pună la favorite sau să compare automat sute de produse prin funcțiile interactive ale magazinului.

Pentru roboții care se identifică drept crawlere, asemenea cereri sunt acum oprite înainte să ajungă la WordPress și WooCommerce. Serverul răspunde imediat, fără să mai pornească întreaga aplicație doar pentru a construi un coș de cumpărături pe care nimeni nu îl va folosi.

Dar roboții nu spun întotdeauna că sunt roboți

Doar identificarea crawlerelor cunoscute nu este suficientă.

User-Agent-ul poate fi schimbat foarte ușor, iar unele sisteme automate pot arăta, din perspectiva serverului, aproape la fel ca un browser obișnuit.

Din acest motiv am adăugat și o a doua protecție, bazată pe comportament.

Un client poate adăuga câteva produse în coș într-un interval scurt. Este perfect normal.

Un „client” care încearcă să adauge zeci sau sute de produse într-un minut este însă foarte probabil un sistem automat.

În asemenea situații, cererile care depășesc limita stabilită sunt oprite rapid, înainte să consume resursele necesare procesării complete în WordPress și WooCommerce.

Pentru cumpărătorii reali nu se schimbă nimic. Magazinul, coșul, comparațiile și listele de favorite continuă să funcționeze normal.

De la aproximativ 80% la sub 10%

Încărcarea procesorului generată de aplicație a coborât de la aproximativ 80% la sub 10% în medie, cu minime de aproximativ 3%.

Scăderea procesorului a venit din regulile pentru roboți. Ele nu opresc doar acțiunile din magazin, ci limitează și paginile cu parametri pe care aceiași roboți le cereau în rest, așa că a dispărut aproape toată munca inutilă, nu doar cele trei sferturi.

Separat, am ajustat configurația PHP, a bazei de date și a serverului web la resursele reale ale magazinului. Aici câștigul a fost la memorie: memoria utilizată a scăzut cu aproximativ 35%.

Mai important însă este ce reprezintă aceste cifre.

Serverul are acum o rezervă mult mai mare pentru momentele în care magazinul chiar are nevoie de resurse: mai mulți vizitatori, campanii, procesarea comenzilor sau alte vârfuri reale de trafic.

Cu alte cuvinte, resursele serverului sunt disponibile pentru clienți, nu pentru sute de coșuri de cumpărături create de roboți.

Un server mai puternic nu este întotdeauna soluția

Este foarte ușor ca un site lent sau un server încărcat să conducă la aceeași concluzie:

„Avem nevoie de mai multe resurse.”

Uneori chiar așa este. Dar alteori serverul are suficiente resurse, iar problema este felul în care acestea sunt consumate.

Poți dubla numărul de procesoare sau memoria și problema va dispărea temporar. Dacă însă cauza rămâne acolo, ai obținut doar un server mai scump care face mai repede muncă inutilă.

De aceea, pentru noi, administrarea unui server nu înseamnă doar să fie pornit și să aibă suficient procesor, memorie și spațiu pe disc.

Înseamnă să vedem ce se întâmplă cu el, să înțelegem cum este folosit și să intervenim atunci când ceva nu funcționează așa cum ar trebui.

Mai ales în cazul WordPress și WooCommerce, unde diferența dintre un site care funcționează și unul care funcționează bine nu este întotdeauna dată de cât de puternic este serverul.

Uneori diferența o fac câteva sute de coșuri de cumpărături pe care nimeni nu intenționa să le cumpere.

Găzduire WordPress și WooCommerce administrată

La ServerHost nu oferim doar spațiu pe un server. Configurăm și administrăm infrastructura pe care rulează site-ul, monitorizăm resursele și intervenim atunci când apar probleme de performanță sau trafic anormal.

Pentru un magazin online, scopul este simplu: resursele serverului trebuie folosite pentru vizitatorii și clienții tăi, nu irosite pe procese inutile.

Tu te ocupi de magazin. Noi ne ocupăm de infrastructura pe care funcționează.