Andrei Chira

Blog personal

Cum sa rezisti traficului de Black Friday

Se apropie Black Friday 2014, eMag a anuntat deja ca anul asta va fi pe 21 noiembrie.

Daca esti publisher online sau blogger si vrei sa faci bani din afiliere de Black Friday trebuie sa te asiguri ca site-ul tau va putea sustine cu brio varful de trafic din ziua respectiva.

Textul de mai jos este in mare parte ceea ce am prezentat la Lumea SEO PPC joia trecuta.

Cum putem sustine traficul de Black Friday?

  • optimizarea aplicatiei
  • optimizarea serverului
  • implementare cdn
  • load balancing

Optimizarea aplicatiei

spike-ursan
Spike gabrielursan.ro

O sa ma refer in special la WordPress acum (ca asta e specializarea mea) insa orice aplicatie poate fi optimizata. O aplicatie reprezinta un ecosistem, ecosistem format din anumite elemente si modul in care interactioneaza aceste elemente unele cu altele (tema, pluginuri, cod php, baza de date, etc).

Optimizarea asta nu se refera la SEO, la imbunatatirea clasarii in motoarele de cautare, ci la imbunatatirea performantei aplicatiei, la cresterea vitezei de incarcare a site-ului si la obtinerea unei scalabilitati ridicate.

Obiectivele acestei optimizari sunt:

  • identificarea si eliminarea elementelor inutile
  • identificarea consumatorilor de resurse in exces
  • reducerea numarului de requesturi http

Rezultatele sunt obtinerea unei viteze mai mari de incarcare a site-ului si un consum mai mic de resurse ale serverului ceea ce duce la posibilitate de a sustine mai mult trafic.

Audit performanta tema

Exista foarte multe teme WordPress si greseala pe care o fac multi proprietari de site-uri este sa isi aleaga tema dupa frumusete. Creatorii de teme stiu asta si se concentreaza foarte mult pe aspect si optiuni usor de configurat si mai putin pe partea de performanta.

Am intalnit cazuri in care o tema WordPress facea aproape 800 de interogari in baza de date si consuma in jur de 100 MB memorie RAM la fiecare afisare de pagina. La un varf mic de trafic, chiar si putin peste 1000 afisari zilnice, site-ul consuma toate resursele alocate contului de hosting. Si proprietarul pierdea bani.

Audit performanta pluginuri

Am intalnit si aici cazuri in care un plugin consuma aproape 200MB RAM la fiecare afisare de pagina. Site-ul respectiv avea in jur de 7-8000 afisari zilnice deci nu a fost de mirare ca firma de hosting unde era il punea sa faca upgrade la VPS-uri cu mai mult RAM. Odata rezolvata problema cu pluginul, site-ul sta linistit pe un hosting shared, n-are nevoie de VPS.

Optimizare imagini

Aceasta optimizare are ca efect reducerea marimii in KB a imaginilor fara a afecta calitatea.

De multe ori am intalnit, in special in cazul ziarelor sau a revistelor online, cazuri in care editorii incarca poze la dimensiuni foarte mari, unele direct din aparatul foto la 4-5 MB. 10 poze asa mari pe o pagina inseamna un timp de incarcare mare si consum de resurse. Daca hostul nu iti ofera trafic necontorizat poti sa-ti depasesti usor limita de banda si sa le apara vizitatorilor o pagina de eroare cu „bandwidth limit exceeded”. Si pierzi trafic si bani.

Pozele ar trebui incarcate pe site exact la dimensiunea la care ar trebui sa fie afisate si aceste poze sa fie optimizate pentru web.

Optimizarea pentru web se poate face manual din Photoshop (Save for web, calitate 60-80%, proggressive) sau cu ajutorul unor unelte cum ar fi jpegmini.com, un serviciu online unde se incarca imagini, serverul lor le optimizeaza dupa care le descarcati optimizate. Pentru VPS-uri exista scripturi ce se pot instala pe server si care lucreaza impreuna cu un plugin WordPress ca sa optimizeze imaginile automat la incarcarea pe site.

Un alt lucru care se poate face este setarea ca imaginile sa fie servite de pe un subdomeniu de genul img.domeniu.ro.

Al treilea pas este implementarea unui sistem de incarcare graduala a imaginilor, pe masura ce vizitatorii fac scroll. Acest lucru se numeste Lazy Load.

Implementare cache

Implementarea unui plugin care sa faca page cache este cel mai simplu si cel mai de impact lucru care se poate face pentru a imbunatati viteza si scalabilitatea unui site.

Pluginul generează fisiere HTML statice pentru fiecare pagina accesata de un vizitator iar după ce este generat un fisier html serverul web va servi acest fisier static in loc sa consume resurse procesand tot scriptul PHP WordPress.

Optimizare server

spike-ariel
Spike arielu.ro

Majoritatea solutiilor de hosting folosesc Apache ca si webserver.

Apache nu e cel mai popular pentru ca e cel mai bun ci pentru ca e cel mai vechi, e gratuit (open-source) si se instaleaza default cu cPanel.

Problema Apache apare la trafic mare, consuma din ce in ce mai multe resurse si poate ajunge sa blocheze tot serverul.

O solutie este migrarea catre un furnizor de hosting care foloseste Litespeed.

LiteSpeed

Litespeed este probabil cel mai bun webserver generalist. E 100% compatibil cu toate aplicatiile, poate sa inlocuiasca Apache fara nicio problema.

Litespeed e cu 50% mai rapid decat Apache la procesarea scripturilor PHP si serveste cu pana la 600% mai rapid elementele statice.

Spre deosebire de Apache, Litespeed nu e un webserver process-based ci event-driven, o metoda mai eficienta de a gestiona conexiunile si asta inseamna ca poate sustine trafic mai mare cu resurse mai putine.

Singura problema este ca nu e open-source, este un webserver comercial, cu licenta, si solutiile de hosting cu Litespeed costa putin mai mult.

Nginx + PHP-FPM

Nginx poate fi folosit si ca un webserver de sine statator, nu doar ca reverse proxy in fata Apache.

Setup-uri cu Nginx sunt folosite de site-uri cu trafic foarte mare: Facebook, Instagram, Netflix, WordPress.com, Zappos, Intel.com. CNN.com.

Chiar si un VPS cu resurse destul de mici, 512 MB RAM, 1 core CPU, intr-o configuratie cu Nginx/PHP-FPM, o aplicatie optimizata si un caching pe toate planurile (si in aplicatie si pe server) poate sustine varfuri de trafic de 50 – 60.000 afisari zilnice si chiar mai mult. Recordul meu personal e undeva la 100.000 de unici si in jur de 300.000 afisari zilnice.

Problema Nginx este ca nu e compatibil cu .htaccess si ca nu prea exista panouri de control compatibile cu el ceea ce inseamna ca vor exista costuri mai mari cu specialistii care sa gestioneze serverul.

Server MySQL

Majoritatea firmelor de hosting folosesc MySQL, care nu e rau, insa exista si alte 2 servere de baze de date: MariaDB si Percona.

Amandoua sunt 100% compatibile cu MySQL deci pot inlocui MySQL fara probleme si amandoua ofera un uptime mai bun, scalabilitate, performanta si fiabilitate superioare serverului clasic de baze de date MySQL, in special pe VPS-uri sau servere dedicate.

Implementare cache

Pentru cei care au un VPS sau un server dedicat se poate implementa un cache direct pe server – ZendOPCache, Memcached, Varnish.

Si Nginx are un cache propriu, fastcgi_cache care poate inlocui cu succes folosirea unui plugin WordPress de cache.

Panou de control

Tot pentru cine are un VPS sau server dedicat, un pas in plus pentru optimizarea serverului poate fi si renuntarea la panoul de control. Multa lume s-a obisnuit cu cPanel, care este foarte bun pentru un hosting shared, dar consuma destule resurse si preia controlul asupra serverului, limitand posibilitatile de optimizare si personalizare.

Pentru web hosting avem nevoie doar de 2 lucruri esentiale: acces la fisiere (prin FTP sau sFTP) si acces la baza de date (prin phpmyadmin), in rest functionalitatile din cPanel sunt in plus deci se poate renunta la panou.

Impartirea serviciilor

Pentru majoritatea utilizatorilor serviciul de hosting pare a fi un tot unitar insa de fapt serviciile de hosting se impart in 3 mari categorii:

  • web hosting
  • dns hosting
  • email hosting

Pentru a asigura o performanta si o scalabilitate ridicata, precum si o disponibilitate a serviciilor care sa se apropie de 100% aceste 3 servicii pot fi separate si de fiecare sa se ocupe o firma specializata.

De exemplu, partea de web hosting poate fi un VPS cu un stack personalizat, axat pe performanta, cu Nginx + PHP-FPM, fara panou de control, fara server de mail, fara server dns, fara niciun proces in plus care sa ruleze pe server in afara de procesele necesare pentru web hosting + evident procesele de securitate.

Partea de DNS hosting poate fi externalizata catre Amazon Web Services sau catre Cloudflare iar partea de email hosting poate fi sustinuta de un provider specializat pe email hosting sau de un serviciu cum ar fi Google Apps, Zohomail.

In felul asta, toate serviciile sunt separate si se obtine performanta si un uptime mai bun.

Implementare CDN

In cazul implementarii unui CDN elementele statice ale site-ului vor fi servite de pe un alt server, iar serverul pe care e gazduit site-ul se va ocupa doar de procesarea scripturilor php.

Este o solutie buna pentru ca se poate activa doar la nevoie, pastrand astfel costurile scazute.

Printre cele mai populare CDN-uri sunt : maxCDN, CDN77, Cloudflare. Exista si posibilitatea sa iti construiesti propriul CDN pe un VPS. O sa scriu un tutorial, daca reusesc sa am timp, pe blogul Simplenet, despre cum sa-ti construiesti un CDN pentru WordPress pe un droplet de 5$ de la Digital Ocean.

Load Balancing

Aceasta este solutia suprema atunci cand este nevoie de scalabilitate si disponibilitate ridicata. Nu o sa vorbesc prea mult despre asta pentru ca e o solutie tehnica destul de complexa si costurile sunt destul de mari. In esenta, se poate face si pe 3 dropleturi de 5$ de la Digital Ocean dar costurile mari sunt legate de design si implementare.

In esenta, se folosesc mai multe masini virtuale (VPS-uri) si prin utilizarea unor tehnologii de tip load-balancing se distribuie traficul catre aceste servere virtuale, oferind astfel o incarcare egala a tuturor sistemelor. Se pot adauga oricand masini virtuale, in functie de nevoi.

Concluzii

  • Alegeti un furnizor de hosting care sa foloseasca Litespeed, diskuri SSD, eventual cloud.
  • Fiti disciplinati in administrarea site-ului (atentie la tema, pluginuri, pozele pe care le incarcati).
  • Oamenii sunt mai importanti decat specificatiile tehnice.

BONUS:

Pentru cine vrea sa ne pregatim impreuna de Black Friday 2014 am un cod de discount – BFREADY14 – 50% pentru primul an la orice pachet de hosting Simplenet:

  • stack premium – Cloudlinux, Litespeed, Percona, SSD, cloud
  • optimizare WordPress inclusa
  • solutii personalizate (VPS cu Nginx, CDN, etc)

Succes la facut bani de Black Friday 2014!

trafic vps simplenet

11 răspunsuri

  1. Avatar Znuff

    Pentru cei cu dedicate as mai oferi o sugestie: varnish

    1. Avatar Andrei Chira
      Andrei Chira

      Da, se poate face un setup cu Nginx (pt elemente statice), Varnish (pt cache continut dinamic), Apache (eventual setat cu PHP-FPM) si MySQL (sau Percona) + Memcached, ZendOPCache. Am testat un astfel de stack cu Blitz.io si iese ok dar mai slab decat un stack simplu cu Nginx + PHP-FPM. Poate se vede impactul in altfel de conditii.

  2. Avatar VASI le R
    VASI le R

    Foarte util articol! De optimizarea imaginilor ştiam, de restul mai puţin.

  3. Avatar George

    Problema exacta a lor e baza de date. MySQL e o solutie foarte bun cu conditia sa-l clusterizeze, sa faca sharding si sa memcacheuisaca. Pot sa faca memcache non volatil cu Couch Base sau sa construiasca un Dcocument Base NoSQl doar cu CouchBase care face si MapReduce.

    Avand in vedere ca e vorba de un peak nu ai vorbit nimic scalare automata pe orizontala, Kubernetes, CoreOS, Vagrant, Dockers, NodeJs. Ai zis ceva de load balancing da foarte non profesionala ideea pentru anul 2014.

    Cu tot respectul mi se par sfaturi slabute.

    1. Avatar Andrei Chira
      Andrei Chira

      Vorbim despre publisheri si bloggeri de nivel mediu, nu despre eMag. Ma bucur ca stii sa faci si chestii mai complexe, poate colaboram daca o sa am vreun client atat de mare incat sa aiba nevoie de load balancing sau clustering.

    2. Avatar Csaba

      Platforma wordpress nu ofera suport pentru NoSQL, comentariul tau George, este complet inutil in acest sens.

      La nivel de MySQL in functie de marimea bazei de date, o partitionare pe tabele wp_postmeta, wp_term_relationships, wp_posts reprezinta cea mai simpla metoda de a creste performanta query-urilor.

      https://www.mindblaze.net/partitioning-tables-improve-wordpress-performance/

      Daca clientul isi permite financiar un load balancing impreuna cu o replicare master slave a bazei de date poate ajuta si mai mult.

      https://www.digitalocean.com/community/tutorials/how-to-optimize-wordpress-performance-with-mysql-replication-on-ubuntu-14-04

      In rest mi se pare un articol util.

    3. Avatar George

      Atunci imi cer scuze, eu am crezut ca e vorba chiar de emag si cei de dimensiunea lor care an de an patesc la fel.

      Nu sunt la curent cu subiectul asta, dar de ce emag pateste an de an aceasta treaba ? Cat IOPS are nevoie emag de blackfriday de o da in bara ? Eu fara prea multa stradanie din 8 instante locate in Silicon Valey si Amsterdam am reusit 800.000 IOPS. Is curios cam cat IOPS are nevoie Emag de nu reuseste niciodata sa faca fata, la ce valoare incepe sa cada ?

      Sfat pentru cei ce vor sa maximizeze IOPS. Alegeti instante cu optimizate pentru RAM nu SSD, cat mai mult ram, comunici doar cu RAMul pentru ca RAMul are mereu mai mult IOPS decat SSD, SSDul are timp sa faca persisitenta mai tarziu.

  4. Avatar Catalin
    Catalin

    Interesant acest articol. Unele chestii daca le stiam, nu le-am aplicat..

    1. Avatar Catalin
      Catalin

      Oricum eu am pus toate acestea in seama CloudFlare.. inclusiv certificatul SSL gratis de la ei, plus cel cumparat de mine.

    2. Avatar Andrei Chira
      Andrei Chira

      E ok Cloudflare desi cateodata am avut senzatia ca merge mai bine fara.

  5. Avatar gabriel

    Foarte interesant articolul si blogul in general.M-am uitat putin peste fiecare post si am gasit o gramada de informatii utile,fiind si eu un „wordpress magician” :).Spune-mi cum verifici fiecare tema cat de bine e optimizata?SAlut,toate cele bune

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *