Grundsystemet för e-handeln utbyggt

Efter en tids testande, mätande och analyserande av prestandan på grundsystemet för vår e-handel så fattade vi ett beslut om att bygga ut grundsystemet redan nu.

Varför vi valde att bygga ut grundsystemet för e-handeln

Ända sedan vi öppnade vår e-handel Smycken För Alla så har vi kontinuerligt testat, mätt och analyserat prestandan på vårt system. Det har sett relativt bra ut men kanske inte riktigt så bra som ville att det skulle vara.

I grundsystemet vi startade med körde vi MySQL-databasen på samma server som webbapplikationerna Nginx och PHP5-fpm. Till att börja med rullade det här på bra, men ju fler produkter vi lade in i butiken så märkte vi att det gick tyngre ju fler produkter vi lade in. Produkterna importerar vi från en CSV via WP All Import med add-on för Woocommerce. Ju fler produkter det blev i butiken desto mer resurser krävde både PHP och MySql. Det var inte bara under själva importen av produkter som det gick tyngre, även i backend blev de längre laddningstider, framför allt när man skulle redigera en produkt eller vid massredigering av ett antal produkter. Vi var nu uppe i cirka 500 produkter, blandat enkla produkter och produkter med variationer.Detta kändes inte riktigt bra då vi siktar på att ha cirka 2-3 000 produkter i sortimentet i slutändan. Responstiden på servern låg mellan 800-1000 ms på ”tomgång” i det här läget med peakar på upp till 30k ms vid uppdatering av lagersaldo via cron.

Separera webbaplikationer och databas

DO_SSD_Power_Badge_BlueAtt separera databasen från webbapplikationerna kändes som det kunde vara ett bra första steg i det här läget. Jag skapade en ny droplet hos DigitalOcean med 1 CPU på 1 Ghz, 512 MB RAM och 20 GB SSD-disk. Jag valde att köra Ubuntu 14.04 även på databasservern. När servern sedan var konfigurerad och klar kopierade jag över databasen till den nya servern och ändrade i WordPress config-fil att använda den nya databasservern. Ganska omgående kunde jag konstatera att servern med webbapplikationerna fick markant kortare responstider som nu ligger på 200-300 ms, likväl som användning av CPU och minne minskade kraftigt. Även databasserven snurrade på bra utan att kräva särskilt mycket resurser. Det visade sig också att WordPress och Woocommerce blev betydligt snabbare i backend, likväl som tiden och resursåtgången vid import av produkter och vid uppdateringar av till exempel lagersaldo via WP All Import med pekar på endast 10k ms. Detta kändes riktigt bra att få en så pass bra prestandaförbättring med så pass enkla medel och utan kostnaden skenar iväg.

Snabbare laddningstider för webbsidorna

Nu har bara pratat om de förbättringar detta har medfört i backend, men vad har detta get ur ett användarperspektiv undrar ni säkert. Som tidigare använder vi även nu Zend OPCache och CloudFlare för viss cachning. Det vi kunde se var en klar förbättring av laddningstiderna på webbplatsen som nu låg på cirka 1,5-2 sekunder enligt Pingdom Tools.
Pingdom_Logo_Yellow Dock var performance grade inte riktigt vad man kunde önska sig. Den låg på cirka 70 av 100 möjliga poäng. Mycket av detta berodde på ett större antal CSS-filer och JS-script som inte var minifierade. Jag har hittills dragit mig för att använda någon form av plug-in för cachning, men började nu titta på vad som fanns tillgängligt. Efter att ha gjort en research så föll valet på att testa W3 Total Cache. Det fanns dock en viss tveksamhet hos mig om hur detta skulle fungera med Woocommerce. Jag hittade dock en bra och testad guide hos FS-data som jag använde mig av och med de inställningar som föreslogs där så fungerade Woocommerce lika bra som innan. Efter att testat detta på min egen testsajt kände jag mig säker på att använda detta i produktion för Smycken För Alla, och det blev en stor skillnad kan jag säga. I bilden här under kan ni se hur laddningstiderna gick ner efter att W3 Total Cache började användas. Likaså fick jag en betydligt bättre performance grade då jag aktiverat Minify av CSS, JS och HTML via CloudFlare.

smyckenforalla-laddningstester

För att få ytterligare en bild av optimeringen av webbplatsen och av laddningstiderna så har jag gjort tester med hjälp av GT Metrix också. Resultaten av de testet ser du i bilden här nedanför.

performance-report-smyckenforalla

Med dessa testresultat känns det definitivt som att det var en god idé att genomföra de åtgärder vi gjort. Dessutom har vi nu ett grundsystem som är enkelt att skala upp eller ner efter behov. Nu återstår det att göra lasttester på systemet för att ta reda på hur mycket det orkar innan det kroknar, men det får bli i en egen artikel om det.

 

Facebooktwittergoogle_plusredditpinterestlinkedintumblrmail

, , ,

3 Responses to Grundsystemet för e-handeln utbyggt

  1. Mikael 20 april, 2015 at 22:57 #

    Hallo.

    Mycket intressant artikel. Håller på att göra om min webb för mitt företag här i Spanien. Använder nu WordPress istället för min gamla som var i Joomla. Mallen jag valt är inte direkt den snabbaste för att ladda, i mitt fall är jag mer intresserad av det estetiska. Men kör alla webs som jag har hand om via Cloudflare. Har testat w3 cache med Ok resultat. Är intressanta hur du delar upp database och kör den på en annan server. Har en VPS hos Cubenode i Madrid. Ligger CentOs 6 och ovanpå det kör jag Cpanel /whm.

    • Stefan Johansson 20 april, 2015 at 23:30 #

      Hej Mikael!

      Kul att du gillar artikeln!

      Jag kör mina VPS:er på Ubuntu 14.04 och det gör jag även med den som jag kör MySQL på. DigitalOcean har så du kan köra ”Private Network” på dina VPS:er (Droplets) och de kan då kommunicera med varandra över det privata nätverket. Jag har konfigurerat applikationsservern och MySQL-servern så de kommunicerar enbart över det privata nätverket. MySQL-servern är alltså inte åtkomlig från det publika nätet. På MySQL-servern har jag sedan skapat en användare som enbart kan ansluta från applikationsservern och dennes IP-nummer. Applikationsservern ansluter sedan till MySQL-servern över SSH på det privata nätverket. Det enda jag då behövde ändra i wp-config var att jag bytte ut localhost till MySQL-serverns interna IP-nummer efter att jag kopierat över databasen till MySQL-servern. Sedan har jag även genomfört en del andra åtgärder för att säkra upp servrarna ordentligt men detta är i grova drag det jag gjort.

      Jag har aldrig använt CentOS men det borde gå att göra på liknande sätt med det tycker jag.

      Edit: Jag hade lite för bråttom när jag skrev. Applikationsservern ansluter inte över SSH, utan bara över det privata nätverket.

Trackbacks/Pingbacks

  1. Raketsnabb e-handel med nytt utseende | SEO & E-handel - 8 maj, 2015

    […] kommer en uppdatering på vad som är gjort sedan jag skrev det senaste inlägget. I korta drag handlar det om två saker. Nytt utseende på vår e-handel och vad det nya temat har […]

Kommentera