fbpx
Wiedza dedykowana Tobie
Magento

Optymalizacja konfiguracji serwera dedykowanego pod wymagania Magento 2

14 października 2020

Prowadzisz sklep zbudowany na Magento, ale Twój obecny hosting nie radzi sobie z nim najlepiej, a może przechodzisz na Magento 2? Zobacz jak wygląda przykładowy serwer zoptymalizowany pod Magento w oparciu o realizację dla jednego z naszych Klientów.

Magento to potężna platforma e-commerce, z której korzysta już ponad 250.000 sklepów na całym świecie, co daje jej 12% udziału w rynku platform sprzedażowych. Wśród najważniejszych przewag Magento nad innymi silnikami wymienia się łatwość optymalizacji pod wyszukiwarki, bogactwo funkcjonalności, elastyczną ścieżkę zakupową, szybką wyszukiwarkę czy zdolność do udźwignięcia naprawdę dużej (500.000+) ilości produktów.
Magento jest wymagające jeśli chodzi o wykorzystanie zasobów systemowych. Sprawia to, że hosting wirtualny – z ograniczeniami pamięci i procesora – jest zwyczajnie niewystarczający. Z tego powodu pod Magento wybierane są serwery dedykowane.

Wymagania Magento 2

Zacznijmy od wymogów jakie Magento stawia wobec serwera i software’u [1].

  • Linux
  • do 2 GB RAM pamięci
  • serwer nginx 1.x lub Apache 2.4
  • baza danych MySQL 5.7.9 i 8.0
  • PHP 7.3, 7.4 (inne niż 7.4.2)
  • rozszerzenia PHP: ext-bcmath, ext-ctype, ext-curl, ext-dom, ext-gd, ext-hash, ext-iconv, ext-intl, ext-mbstring, ext-openssl, ext-pdo_mysql, ext-simplexml, ext-soap, ext-xsl, ext-zip, lib-libxml
  • PHP OPcache
  • Elasticsearch 7.6.x.
  • SSL, TLS
  • Mail Transfer Agent (MTA) lub serwer SMTP
  • PHP-FPM

W przypadku wdrożeń na wielu serwerach lub dla sprzedawców planujących skalowanie działalności zalecane są dodatkowo [2]:

  • Varnish
  • Redis 2.0.6+ na osobnej instancji niż cache strony.

Serwer dedykowany zoptymalizowany pod Magento oferowany przez Kei.pl spełnia wszystkie te wymagania. Przed wdrożeniem prowadzone są konsultacje z Klientem dotyczące podanych parametrów. Przykładowo niewiele firm zdecydowałoby się dziś uruchomić Magento na tak nowym PHP jak 7.4. Ale na tym nie koniec.

Optymalizacja konfiguracji pod Magento

Magento 2, ze wszystkimi swoimi przydatnymi funkcjami, może być bardzo wymagający względem zasobów. Dlatego tak ważna jest nie tylko zgodność z wymaganiami, ale też zoptymalizowana konfiguracja. W tym celu w Kei.pl wykorzystujemy kontenery z następującymi komponentami:

  • Varnish – cache HTTP, technologia służąca jako full page cache Magento 2,
  • NGINX PHP – serwery aplikacji do obsługi samego silnika Magento,
  • Redis Cache – pamięć podręczna Magento, pomaga skrócić czas reakcji aplikacji, wpływając na szybsze ładowanie strony,
  • Serwery baz danych MySQL.

Przykładowa konfiguracja

Rozwiązanie podstawowe w Kei.pl
Magento. Konfiguracja podstawowa.

Co dają osobne kontenery?

Wykorzystanie kontenerów z komponentami pozwala na:

Skalowanie

Opisane konfiguracja pozwala na rozbudowę rozwiązania podstawowego, gdzie wszystkie komponenty znajdują się na jednym serwerze, poprzez przeniesienie elementów na odrębne dedykowane serwery.

Architektura jest tak zaplanowana, że wspiera rozwiązanie skalowania horyzontalnego (ang. horizontal scaling). Jest to metoda podziału obciążenia pomiędzy kilka serwerów, na których działają instancje serwera WWW nginx oraz PHP-FPM. Dzięki jej zastosowaniu ruch na aplikacjach webowych jest rozkładany równomiernie pomiędzy kontenery, których zasoby są skalowalne.

Wysoka dostępność (HA)

Rozwiązanie pozwala na wdrożenie High Availability, czyli zdolności systemu do ciągłej, bezawaryjnej pracy przez pożądany długi okres czasu, poprzez:

  • wdrożenie klastra bazy danych (galera);
  • uruchomienie kolejnych serwerów aplikacji.

Wdrożenie High Availability jest opcjonalne i co istotne może zostać wykonane częściowo. Klienci, którzy zdecydują się na konfigurację HA samej aplikacji Magento 2 zyskują możliwość bezprzerwowych aktualizacji.
– Jarosław Dyląg, administrator Kei.pl

Dlaczego agencje wdrażające Magento zalecają HA?

Dzięki wdrożeniu HA obciążenie aplikacji rozkłada się na dwa serwery, a przez to

  • więcej klientów jednocześnie może zostać obsłużonych bez spowolnienia działania sklepu;
  • jeżeli jeden z serwerów przestanie działać (np. zepsuje się sprzęt), sklep dalej będzie dostępny;
  • właściciele sklepów mogą dokonywać aktualizacji Magento bez przerw w działaniu serwisu.

Rozwiązanie pozwala odłączyć jeden z dwóch nodów przestawiając go w tryb Maintenance, przeprowadzić aktualizację, przełączyć na niego cały ruch i dopiero wtedy zaktualizować drugi node aplikacji.

Przyspieszamy sklep Magento. Soft

Łatwo spotkać się z opinią, że Magento jest powolne. Mając to na uwadze tworzymy odpowiednią, opisaną wcześniej architekturę, ale też uruchamiamy software, który wyraźnie przyspiesza ładowanie się stron, produktów – całego sklepu na Magento.

Varnish: 2x szybszy sklep

Aby szybko wyświetlać strony kategorii i produktu, Magento używa na serwerze buforowania całostronicowego (full-page caching). Skraca to czas odpowiedzi i zmniejsza obciążenie serwera, gdyż stronę w pełni wygenerowaną można odczytać bezpośrednio z pamięci podręcznej [3].
Do full-page cache wykorzystujemy w Kei.pl wymagany [4] przy Magento 2 Varnish – akcelerator HTTP przeznaczony do dynamicznych witryn internetowych o dużej zawartości i interfejsów API. Wedle słów dostawcy pozwala on przyspieszyć dostarczanie informacji nawet 300 – 1000x [5].

Testujemy Varnish

Jak pokazują testy na oficjalnej stronie Magento [6] strona główna sklepu korzystająca z Varnish ładuje się 2 razy szybciej.


Dane z inspektora przeglądarki.

Podobne wyniki przeprowadzone w tym wypadku za pomocą Pingdom i Locust na nginx – przed i po włączeniu Varnish – prezentują testy zaprezentowane na sitepoint.com [7].

Pingdom

ttfb nginx + Varnishnginx
Load time 400 ms: TTFB 0,26 s

nginx + Varnish
Load time 202 ms: TTFB 0,12 s

 

 

Locust
nginx
Average Response Time (Śr. czas odpowiedzi serwera): 8,000 s

nginx + Varnish
Average Response Time: 1,500 s

Redis Cache. 2x krótszy TTFB

Redis to open source’owy magazyn struktur danych, wykorzystywany jako baza danych, pamięć podręczna i broker komunikatów. Obsługuje struktury danych, takie jak ciągi, skróty, listy, zestawy, zestawy posortowane z zapytaniami o zakres, bitmapami, hiperlogami, indeksami geoprzestrzennymi z zapytaniami o promienie i strumieniami.

Zarówno Varnish, jak i Redis używane są do poprawy wydajności sklepów na Magento 2. Podczas gdy Varnish jest doskonałym narzędziem do przyspieszenia witryny poprzez buforowanie zawartości statycznej, Redis to serwer bazy danych, który obsługuje często zadawane pytania w pamięci podręcznej, pomagając użytkownikom zaoszczędzić czas w sklepie [8].

Redis Cache 2x krótszy TTFB

domyślny cache Magento 2
TTFB: 357+ ms

Redis
TTFB: 134-158 ms

Jak pokazują testy [9], uruchomienie Redis pozwala skrócić TTFB ponad dwukrotnie.

 

ElasticSearch. Szybkie wyszukiwanie

Na serwerach dedykowanych Magento [10] uruchamianych w Kei.pl funkcjonuje również rekomendowany przez Magento potężny i bardzo szybki [11] silnik wyszukiwania pełnotekstowego ElasticSearch. Pozwala on na wygodne i kompleksowe przeszukiwanie informacji z wykorzystywaniem mechanizmów zaawansowanego grupowania czy też filtrowania. Dzięki zastosowaniu rozproszonego modelu pracy i API opartego o standard REST otrzymujemy narzędzie o bardzo dużych możliwościach, pozwalających nam decydować jak frazy wpisywane przez użytkownika będą rozumiane i przekładane na zapytania do bazy danych sklepu.

New Relic. Wydajność pod kontrolą

Kolejną usługą dostępną na tych serwerach jest New Relic. Pomaga ona w zarządzaniu wydajnością aplikacji poprzez udostępnienie narzędzi pozwalających na analizowanie oddziaływań zachodzących w aplikacji, a finalnie poprawiania jej osiągów.

New Relic | Deliver more perfect software

New Relic zapewnia poniższe funkcjonalności:

  • Możliwość monitorowania kluczowych akcji podejmowanych przez użytkownika jak dodawanie produktów do koszyka, potwierdzenie transakcji lub przetwarzanie płatności.
  • Monitorowanie zapytań bazo-danowych pozwalających na zlokalizowanie i monitorowanie tych, które oddziałują na wydajność aplikacji.
  • Mapa aplikacji umożliwiająca badanie zależności wewnątrz strony opartej o Magento, rozszerzeń i zewnętrznych usług.
  • Punktacja Apdex – dzięki niej możemy oceniać wydajność strony i stworzyć powiadomienia, które zidentyfikują problemy i poinformują o ich zajściu, takie jak wydajność aplikacji, na którą wpływ ma np. wyprzedaż czy promocja.
  • Zasady powiadomień Adobe (ang. Adobe-generated alert policies) – monitorowanie aplikacji i wydajności infrastruktury za pomocą powiadomień konfigurowanych na bazie zasad i polityk. Śledzą one działanie kluczowych wskaźników wydajnościowych jak apdex score, dostępną przestrzeń dyskową oraz współczynnik błędów wzorowany na najlepszych praktykach w branży.

New Relic wymaga do działania wykupienia klucza licencji u producenta tego produktu.

Zamiast podsumowania. Pora na Magento 2

Mimo że Magento 1 od 30 czerwca 2020 nie jest już wspierane na Magento 2 działa obecnie jedynie 11.000 z 250.000 sklepów. Całą globalną społeczność Magento czeka więc wielka migracja. To dobra okazja by przemyśleć wybór dostawcy serwerów dedykowanych. Specjaliści zwracają uwagę, że co prawda Magento 2 jest szybsze, ale wciąż wymaga aktywnego podejścia do optymalizacji szybkości ładowania. Jeśli masz pytania, skontaktuj się z nami pisząc do Działu Technicznego na bok@kei.pl

Źródła
[1] https://devdocs.magento.com/guides/v2.4/install-gde/system-requirements-tech.html
[2] https://devdocs.magento.com/guides/v2.4/performance-best-practices/software.html
[3] https://docs.magento.com/user-guide/system/cache-full-page.html
[4] https://www.varnish-software.com/wiki/content/tutorials/magento2/index.html
[5] https://varnish-cache.org/intro/
[6] https://devdocs.magento.com/guides/v2.3/config-guide/varnish/use-varnish-cache-how.html
[7] https://www.sitepoint.com/how-to-boost-your-server-performance-with-varnish/
[8] https://magehit.com/blog/magento-2-varnish-and-redis-configuration/
[9] https://community.magento.com/t5/Magento-2-x-Hosting-Performance/Redis-cache-vs-File-cached-Magento-2-2-2-Benchmarks/td-p/89664
[10] https://devdocs.magento.com/guides/v2.4/performance-best-practices/software.html
[11] https://www.elastic.co/elasticsearch/