• vývoj
  • e-commerce

Magento – úskalí v produkčním provozu

Autor Damir Špoljarič
Jak zajistit, aby Váš e-commerce projekt v Magento běžel, jak má.

Magento je výkonná e-commerce platforma, která zahrnuje vše, co je třeba pro prodej online. Kromě samotného e-shopu dokáže řešit i sklad, marketing, fakturace a účetnictví. V současné době Magento přichází ve dvou verzích: Magento Open Source (dříve Magento Community Edition) a Magento Commerce (který je určen pro vetší společnosti s vlastními vývojáři).

Magento je jednou z nejvíce využívaných e-commerce platforem a v hodnocení uživatelů získává konzistentně vysoké hodnocení. Ke správnému fungování Magenta je nicméně třeba mít zkušeného vývojáře samotné aplikace a také zkušeného poskytovatele hostingu, který ví, jak servery pro Magento optimalizovat.

Potřeba výkonného hostingu

Jak jsme již zmínili, u Magenta nelze podcenit hosting. Platforma je náročná na výkon a tomu musí odpovídat i parametry hostingu. Pokud se oprostíme od problémů a chyb samotné aplikace, tak je většina problémů v Magento způsobena malým výkonem webového serveru, resp. prostředím, kde je Magento provozováno. Magento je pomalejší a má mnohem více requestů než ostatní systémy, ale existuje několik způsobů jak platformu urychlit.

Zrychlení Magenta

Magento obvykle nelze provozovat přímo na webovém serveru, ale je nutné využívat cachovací proxy (aktuálně je podporovaný pouze Varnish).
Pokud chcete, a v dnešní době je to už standard, provozovat SSL verzi, je nutné před Varnish proxy předsadit Nginx nebo jiný SSL terminátor. Co se týká samotného webového serveru, je možné použít Apache s PHP modulem nebo Nginx s PHP-FPM. Jedním z nejúčinnějších způsobů, jak dál urychlit Magento, je použití akcelerátorů PHP. U základních instalací je APC prohlašována za nejlepší řešení.

Možná jsou tedy dvě řešení:

  • NGINX → VARNISH → APACHE (PHP-MODUL + APC, Memcache, Redis) → MariaDB
  • NGINX → VARNISH → NGINX (PHP-FPM + APC, Memcache, Redis) → MariaDB

V případě větších instalací je pak vhodné využívat Redis pro cache i jako session handler.
Pokud se rozhodnete provozovat celou instalaci na jednom serveru, je nutné mít výkonný hardware nebo hosting, který Magento přímo podporuje. O paměť, CPU a IOPS budou soupeřit hlavně PHP, MySQL a Varnish.

Provoz Magenta v clusteru

Pokud se rozhodnete provozovat Magento v nějakém clusterovém režimu (buď kvůli výkonu nebo kvůli vysoké dostupnosti), Magento s tímto nastavením nativně nepočítá. Existuje několik možností, jak cluster sestavit:

  • Složitější varianta je používat za load balancerem Varnish na každém backendu, ale pak je nutné se správně vypořádat s disvalidací cache a s podobnými dalšími problémy.
  • Jednodušší způsob je nechat balancing na Varnish cache, která je sama o sobě dostatečně výkonná, aby dokázala zvládnout předávat požadavky na mnoho backendů.

Při clusterových instalacích se zároveň doporučuje počítat s dedikovaným serverem pro admin backend, u kterého paradoxně cachovaní není úplně žádoucí. U verzí 2 a méně se doporučuje povolit funkci Magento Compilation pro urychlení úložiště Magento.

Z naší zkušenosti vyplývá, že nejčastěji dochází ke zpomalování vlivem následujících chyb v aplikaci:

44 % SQL dotazů uvnitř smyčky
25 % načítání stejného modelu několikrát
14 % využití redundantního datového souboru
10 % výpočet velikosti pole na každé iteraci smyčky
7 % neefektivní využití paměti

Závěr: Zkušený hosting a zkušený programátor vyladí fungování Magenta

Mezi výhody Magenta patří robustnost a to, že je univerzální. Na druhou stranu je těžké zajistit, aby fungovalo optimálně. Pokud uvažujete o využití Magenta pro váš e-shop, ujistěte se, že:

  • programátor aplikace má s Magentem zkušenosti,
  • hosting, který jste si vybrali ví, jak server pro Magento vyladit tak, aby vše perfektně fungovalo a neztrácela se rychlost.