Gastrokuchyne.sk je obchod s gastro zariadením a doplnkami pre profesionálov v oblasti gastronómie a stravovania.
Zvýšenie návštevnosti po reklame v televízii
Po tom ako sa Gastrokuchyne stali partnerom televíznej šou Na nože, zaznamenal web www.gastrokuchyne.sk veľkú návštevnosť.
Aj keď si zákazník u nás zriadil menežované VPS s výkonom 10 CPU a 10GB RAM, stalo sa, že serveru chýbal výkon a počas dňa bol preťažený až tak, že neprijímal ďalšie požiadavky.
Ako vyriešiť obrovský nárast návštevnosti?
Riešením bolo znova navýšiť výkon, alebo sa pozrieť na web hlbšie a nájsť iné riešenie pre zlepšenie výkonu.
Web využíval LiteSpeed Cache plugin a aj Redis objektovú cache, takže tieto najľahšie "tromfy" už boli použité. Tak sme si teda "vysúkali rukávy" a začali sme dôkladne sledovať aktivitu na webe.
Analýza wordpress-u a následná optimalizácia
Identifikovali a opravili sme nasledovné nedostatky:
1. Zlé riešnie cron úloh vo wordpress-e
WordPress spúšťa pravideľné naplánované úlohy prostredníctvom wp-cron.php súboru. Keďže len málo bežných užívateľov vie, čo je Cron a ako si ho v hostingu nastaviť, vývojári WordPressu sa rozhodli, že tento krok spravia za užívateľov a starajú sa o spustenie tohto súboru oni. To znamená, že počas toho, ako návštevníci prechádzajú po webe, sa v určitých intervaloch spustí na pozadí týchto požiadaviek aj wp-cron.php.
Nehospodárne spúšťanie WP-CRON
Avšak deje sa to veľmi nehospodárne, pretože sa spustí nový request na pozadí a teda celý mechanizmus webserver + php proces. Toto samozrejme predĺži vykonávanie toho prvého requestu, ktorý spravil užívateľ.
Pri malých weboch to nie je problém ale pri weboch s veľkým množstvom podstránok to už problém je a treba s tým niečo robiť. V tomto prípade sme teda zakázali vykonávanie wp-cron.php počas bežných requestov a presunuli sme túto funkčnosť do skutočných Cron úloh domény.
Vtedy sa PHP spúšťa priamo v systémovom príkazovom riadku a teda neblokuje web server ani PHP vlákna vyhradené pre návštevníkov webu. Mimochodom, toto sa dá spraviť jedným klikom v našom WebAdmine.
2. Zablokovanie nežiaducich requestov
Všimli sme si, že väčšinu requestov na web tvoria boty, konkrétne Yandex a AmazonBot. Tieto sme blokli pomocou robots.txt a aj cez .htaccess na základe User-Agent hlavičky.
3. Zabudnuté Cron úlohy od starého poskytovateľa webhostingu
Web bol k nám premigrovaný od iného webhostingového poskytovateľa. Všimli sme si ale, že z IP adries tohto poskytovateľa stále smerujú requesty aj k nám. Išlo o zabudnuté Cron úlohy, ktoré dokonca ani neboli aktuálne. Niektoré z nich trvali až 90 sekúnd, čo pri takomto webe nie je nič nezvyčajné, avšak počas tejto doby je blokované jedno PHP vlákno. Tak isto ako pri wp-cron.php, tak aj tu je efektívnejšie použiť systémový Cron a php spúšťať ako z príkazového riadku.
Posúďte sami, na nasledovných grafoch vidno pokles spotrebovaného výkonu na serveri a tiež pokles používaných PHP vlákien. Toto všetko spôsobilo to, že má server dostatočnú rezervu na nárazovú návštevnosť, čo sa pri tomto webe očakáva.