Magento 2 - automatycznie skalowalny klaster z CDN
Magento 2 to bardzo popularny system e-commerce wybierany zwykle dla wymagających projektów. Magento jest projektem open-source, za którym stoi spory ekosystem twórców i dostawców. Dzięki temu, użytkując platformę możemy korzystać z szerokiej gamy wbudowanych funkcji, takich jak zarządzanie katalogiem danych, narzędzia marketingowe, analityka, optymalizacja SEO, raportowanie i wiele innych.
Magento w wersji 2 wymaga odpowiednio przygotowanej architektury, aby obsłużyć wielu jednoczesnych użytkowników i zapewnić wysoką dostępność sklepu. Bardzo ważne jest również automatyczne skalowanie pionowe i poziome, co przygotowuje e-commerce na obsłużenie pików ruchu. Ciągłość działania Magento 2 realizowana jest poprzez architekturę klastrową, gdzie kluczowe warstwy są zdublowane.

Poniżej znajduje się opis głównych składowych oraz warstw klastra Magento 2.
- Premium CDN - integracja z siecią Edgecast CDN zapewnia błyskawiczne ładowanie sklepu bez względu na lokalizację geograficzną dzięki zaawansowanym mechanizmom buforowania i akceleracji, ogromnej przepustowości, obsłudze protokołu HTTP/3.
- Let's Encrypt SSL dodatek zapewnia automatyzację operacji zarządzania certyfikatami SSL - wydawanie zaufanych certyfikatów, weryfikację niestandardowej domeny, automatyczne odnawianie certyfikatów.
- LiteSpeed Web ADC równoważy obciążenia dzięki elastycznym algorytmom dystrybucji ruchu (w celu optymalizacji wydajności), obsłudze nowoczesnego protokołu HTTP/3 i dynamicznej pamięci podręcznej ESI (do obsługi żądań dynamicznych bezpośrednio redukujących liczbę żądań do serwerów).
- LiteSpeed Web Server - wysokowydajny serwer WWW z szerokim zestawem funkcji, takich jak obsługa HTTP/3, pamięć podręczna ESI, optymalizacja CSS i JavaScript, optymalizacja obrazu, obsługa pami ęci podręcznej przeglądarki i obiektów, obsługa CDN, wbudowany WAF, Geo-DNS, CAPTCHA, dławienie IP, ochrona anty-DDoS, itp.
- Web Application Firewall (WAF) funkcja bezpieczeństwa dla stosu LiteSpeed Web Server, która zawiera filtrowanie anty-DDoS w warstwie 7, przepustowość na poziomie IP i ograniczanie szybkości żądań.
- Klaster MariaDB - topologia replikacji podstawowa-podstawowa zapewnia lepszą wydajność przechowywania zawartości dynamicznej i prostszą procedurę przełączania awaryjnego.
- Redis to wysokowydajne rozwiązanie buforujące działające w pamięci RAM, które działa w kontenerze LiteSpeed Web Server, aby przechowywać już załadowane wyniki zapytań do bazy danych i wyświetlać je szybciej na żądanie.
- OpenSearch - napędzana przez społeczność wyszukiwarka typu open-source, która zapewnia rozproszone wyszukiwanie pełnotekstowe z obsługą wielu użytkowników.
- Shared storage - węzeł przechowywania danych dla plików multimedialnych.
1. Wybierz z menu Marketplace, wyszukaj pakiet Auto-Scalable Magento Cluster i naciśnij Instaluj. Pamiętaj, że rozwiązanie klastrowe jest dostępne tylko dla kont pełnych, a więc nie zainstaluje się na koncie próbnym.

2. Na podstawie oczekiwanego poziomu obciążenia klastra, wybierz strategię skalowania (Scaling Strategy), aby określić opcje automatycznego skalowania poziomego (można to później modyfikować z poziomu: Ustawienia / Automatyczne Skalowanie Poziome).
Low Load (Niskie obciążenie)
- dodaje 1 węzeł serwera aplikacji, jeśli obciążenie jest wyższe niż 70%
- usuwa 1 węzeł serwera aplikacji, jeżeli obciążenie spadnie poniżej 20%
Medium Load (Średnie obciążenie)
- dodaje 1 węzeł serwera aplikacji, jeśli obciążenie jest większe niż 50%
- usuwa 1 węzeł serwera aplikacji, jeżeli obciążenie spadnie poniżej 20%
High Load (Wysokie obciążenie)
- dodaje 2 węzły serwera aplikacji, jeśli obciążenie jest wyższe niż 30%
- usuwa 1 węzeł serwera aplikacji, jeżeli obciążenie spadnie poniżej 10%
3. Instalacja środowiska i konfiguracja klastra potrwają kilka minut, zanim zobaczysz okienko wyświetlające Twój bezpośredni link do panelu administracyjnego Magento z danymi uwierzytelniającymi, aby uzyskać do niego dostęp za pośrednictwem przeglądarki internetowej.

4. Naciśnij Otwórz w przeglądarce, aby przejść do strony docelowej wstępnie skonfigurowanego motywu Magento LUMA, który umożliwia korzystanie z systemu Magento e-commerce zaraz po instalacji.

Z tego samego okienka możesz uzyskać dostęp do panelu administracyjnego Magento 2.


5. Zweryfikuj przydzielone domyślnie limity skalowania pionowego (cloudlety) dla warstw z pojedynczym kontenerem (np.: Load, Balancer, NFS), tak aby upewnić się, że stworzona dla Magento 2 topologia, odpowiada prognozowanym obciążeniom.

Obecnie tylko LiteSpeed Web Server obsługuje protokół HTTP/3. W przypadku serwera WWW NGINX ten nowoczesny protokół jest wciąż w fazie rozwoju . Aby więc zapewnić najwyższą możliwą wydajność dla CDN zintegrowanego ze środowiskiem, w tej instrukcji omówimy konfigurację Magento 2 opartego na LiteSpeed Web Server.
Jeżeli w podczas instalacji klastra Magento 2 nie została zaznaczona opcja: Install Lightning-Fast Premium CDN należy zainstalować specjalny dodatek. Jeżeli opcja była zaznaczona, a więc masz już zainstalowany CDN, wówczas przejdź od razu do konfiguracji, a więc kroku 3.
- 1.Po zalogowaniu do Panelu Usług Cloudlets.Zone, otwórz Marketplace, znajdź dodatek HTTP/3 Premium CDN i kliknij Zainstaluj .

2. W otwartym oknie wybierz środowisko (w naszym przypadku: Auto-Scalable Magento Cluster v2), w którym ma być włączony CDN, preferowaną warstwę węzłów (Load Balancer) i naciśnij Zainstaluj.

Po zakończeniu instalacji pojawi się wyskakujące okienko z adresem URL CDN w następującym formacie:
nazwaśrodowiska-chmur.cdn.edgeport.net
w naszym przypadku: https://Magento2-chmur.cdn.jelastic.net CDN Endpoint URL zostanie także przesłany na skrzynkę e-mail konta.
W ciągu pierwszej godziny może wystąpić błąd 404, ponieważ rozpropagowanie nowego środowiska w sieci CDN zajmuje trochę czasu.
3. Jeżeli chcesz skonfigurować własną domenę dodaj odpowiedni rekord A. W naszym przykładzie będzie to:
A | magento2 | 212.127.94.81 | 1800

4. Jeśli rozwiązywanie nazw dla Twojej domeny jest prawidłowe możesz zmienić konfigurację dodatku Let's Encrypt, a więc nadpisać domenę domyślną i wygenerować certyfikat SSL dla domeny docelowej. Z poziomu warstwy Load Balancer wybierz ikonę Dodatki, a następnie Configure przy dodatku Let's Encrypt Free SSL.

Wpisz właściwą domenę i kliknij przycisk Zastosuj.

5. Pozostaje jeszcze zmiana bazowego adresu URL dla Magento. Robimy to z menu kontekstowego dla warstwy aplikacji klikając ikonę Dodatki.

A następnie wpisujemy naszą domenę wcześniej zdefiniowaną w DNS. W naszym przypadku będzie to: https://magento2.produkcjachmur.pl

Od teraz sklep będzie już pod naszą własną nazwą domeny. Uwzględnij to przy logowaniu do panelu administracyjnego.

6. Na koniec sprawimy, że statyczna zawartość strony będzie dostępna do pobrania z sieci CDN. W tym celu logujemy się do Magento 2 jako administrator. Wchodzimy do STORES / Configuration / Web / Base URLs (Secure). W pola:
- Secure Base URL for Static View Files
- Secure Base URL for User Media Files
Ustawiamy też protokół SSL jako obowiązujący dla sklepu i panelu administracyjnego modyfikując (wizualizacja na grafice):
--- Secure Base Link URL
--- Use Secure URLs on Storefront
--- Use Secure URLs in Admin

7. Robimy to też dla zakładki Base URLs i zapisujemy zmiany - Save Config.

Zrobione. Od tego momentu cała statyczna zawartość sklepu udostępniana będzie z sieci CDN Edgeport, z punktów geograficznie najbliższych dla odwiedzającego Twoją witrynę.
- 1.Możesz zamienić wygenerowany domyślnie URL dla CDN. W tym celu do DNS domeny należy najpierw dodać CNAME do serwera DNS domeny głównej. W naszym przykładzie wygląda to tak:
CNAME | cdn.magento2 | cdn.magento2.produkcjachmur.pl | 1800

2. Wybierz rodzaj metodę równoważenia obciążenia, aby zapewnić tryb wysokiej dostępności.
- Round Robin - równomierne rozłożenie żądań pomiędzy dostępne węzły.
- Primary Failover - wszystkie żądania są wysyłane do pierwszego węzła, jeśli stanie się niedostępny, żądania są przekierowywane do następnego i tak dalej.

Zatwierdź przyciskiem Apply i poczekaj około godziny, aż zmiana zostanie wprowadzona do sieci CDN.
Podczas skalowania poziomego węzłów w warstwie serwera aplikacji, platforma automatycznie aktualizuje rekordy dostępnych węzłów wewnątrz usługi CDN. Eliminuje to konieczność wykonywania ręcznych modyfikacji podczas skalowania.
Do czyszczenia pamięci podręcznej zasobów statycznych w sieci CDN możemy użyć akcji Purge lub Purge All. Po usunięciu zasobów CDN zaczyna pobierać ich nowe kopie z serwera źródłowego. Obsługa funkcji odbywa się na poziomie dodatku HTTP/3 Premium CDN w warstwie Load Balancera.

A. Purge (Przeczyść) usuwa określone zasoby w określonej ścieżce.

B. Tymczasem Purge All (Przeczyść wszystko) usuwa wszelkie statyczne zasoby w sieci CDN, prosząc uprzednio użytkownika o potwierdzenie operacji. Proces odnawiania pamięci podręcznej jest znacznie szybszy w porównaniu z inicjalną (pierwszą) dystrybucją zasobów statycznych po instalacji dodatku.
Dobrą praktyką przed dokonaniem wyboru hostingu pod Magento 2 jest sprawdzenie jak środowisko reaguje na określony ruch. Poniższa instrukcja przedstawia jak przygotować sklep oraz narzędzie testowe. JMeter możesz uruchomić na Cloudlets.Zone by przetestować hosting Magento 2 innego dostawcy. Zaczynamy!
Benchmark Magento 2 za pomocą JMeter realizowany mo że być wyłącznie na środowisku developerskim lub testowym, gdyż związany jest z generowaniem i nadpisaniem kategorii produktowych.
- 1.Skorzystamy z tego, że Magento zapewnia wewnętrzną funkcjonalność do generowania danych testowych za pośrednictwem profili ładowania. Każdy profil generuje następujące kategorie:
Element | SMALL | MEDIUM | LARGE | EXTRA LARGE |
---|---|---|---|---|
websites | 1 | 3 | 5 | 5 |
store_groups | 1 | 3 | 5 | 5 |
store_views | 1 | 3 | 5 | 5 |
simple_products | 800 | 24 000 | 300 000 | 600 000 |
configurable_products | 16 z 24 opcjami | 640 z 24 opcjami | 8 000 z 24 opcjami | 16 000 z 24 opcjami |
product_images | 100 obrazów/3 na produkt | 1 000 obrazów/3 na produkt | 2 000 obrazów/3 na produkt | 2 000 obrazów/3 na produkt |
categories | 300 | 3 000 | 3 000 | 6 000 |
categories_nesting_level | 3 | 3 | 5 | 5 |
catalog_price_rules | 20 | 20 | 20 | 20 |
catalog_target_rules | 5 | 5 | 5 | 5 |
cart_price_rules | 20 | 20 | 20 | 20 |
cart_price_rules_floor | 2 | 2 | 2 | 2 |
customers | 200 | 2 000 | 5 000 | 10 000 |
tax rates | 130 | 40 000 | 40 000 | 40 000 |
orders | 80 | 50 000 | 100 000 | 150 000 |
2. Jako, że pracujemy na świeżej instalacji Magento 2, dlatego trzeba wygenerować dane testowe. Zrobimy to z poziomu linii komend. Zaczynamy od ustawienia parametru globalnego w bazie danych. UWAGA, w tym celu otwórz dostęp Web SSH na warstwie BAZY DANYCH.

3. Wpisz poniższą komendę uzupełniając właściwe dane w miejscach {db_user} i {db_pass}. Zwróć uwagę na brak spacji między parametrem "-u" i "-p", a ciągiem znaków definiujących użytkownika i hasło.
mysql -u{db_user} -p{db_pass} -e "SET GLOBAL log_bin_trust_function_creators = 1;"
4. Aby upewnić się, że wszystkie cytaty są puste, uruchom następujące zapytanie MySQL przed każdym uruchomieniem scenariusza, wstawiając w miejsce magento_dbnamen właściwą nazwę bazy danych Magento 2, którą znajdziesz w phpMyAdmin.
mysql -u{db_user} -p{db_pass} -e "USE magento_dbname; UPDATE quote SET is_active = 0 WHERE is_active = 1;"
5. Teraz wygenerujemy dane produktów za pomocą poniższego polecenia, uwzględniając parametr "-s", aby pominąć początkowe indeksowanie. Polecenie wydajemy z linii komend otwierając Web SSH na poziomie WARSTWY APLIKACJI!

php /var/www/webroot/ROOT/bin/magento setup:performance:generate-fixtures -s /var/www/webroot/ROOT/setup/performance-toolkit/profiles/ce/small.xml
.png?alt=media&token=95de9b68-7134-4925-a522-4ad1b9692f9d)
6. Po wygenerowaniu danych należy ręcznie uruchomić indeksowanie.
php /var/www/webroot/ROOT/bin/magento indexer:reindex
7. Na zakończenie, czyścimy pamięć podręczną następującą komendą:
php /var/www/webroot/ROOT/bin/magento cache:flush
.png?alt=media&token=3f047092-ee31-448a-b637-14aa18f54c7e)
i sprawdzamy, czy są teraz ogólne kategorie z prostymi produktami zastępczymi na witrynie testowej, jak na obrazku poniżej.

8. Logujemy się do Magento 2 jako administrator, w tym naszym przykładzie będzie to adres: http://magento2.produkcjachmur.pl/admin/ i zmieniamy hasło dla konta admin, na: 123123q

9. Włącz przepisywanie serwera WWW. Otwórz stronę administratora swojej witryny i zaloguj się, a następnie przejdź do menu: Stores / Configuration / General / Web / Search Engine Optimization. Odznaczamy "Use system value" i wybieramy z menu "Use Web Server Rewrites - YES" i zapisujemy.

10. Wejdź do menu System / Index Management i ustaw wszystko w trybie „Update by Schedule”, zaznaczając z użyciem funkcji Mass Action i klikając przycisk Submit.

11. Sprawdź stronę zarządzania pamięcią podręczną witryny i zaktualizuj wszelkie nieprawidłowe dane --> System / Cache Management. Wybierz wszystkie typy skrzynek i odśwież je, klikając przycisk Submit.

Uff, faza przygotowania danych sklepu zakończona.
Do wygenerowania obciążenia wykorzystamy pakiet JMeter-cluster. Topologia obejmuje następujące komponenty:
- Web - do wizualizacji procesu generowania obciążeń i dostarczania wyników przez przeglądarkę,
- Workers - rozproszone serwery JMeter do generowania obciążenia,
- Master - używany do konfiguracji planu testów i zarządzania warstwą Workers.

- 1.Instalację JMeter cluster zrealizować można za pomocą manifestu JPS, który wklejamy w oknie importu w zakładce URL: https://raw.githubusercontent.com/sych74/jmeter/master/manifest.jps

2. Następnie, parametryzujemy test domyślnego scenariusza przeznaczonego dla Magento. Kluczowe parametry planu testów dostępne w oknie instalacji to:
- Protocol and Domain. Lista obsługiwanych protokołów znajduje się w dokumentacji JMeter.
- Virtual Users (VU). Jest to liczba współbieżnych wątków, których JMeter będzie używał do testowania.
- Test Duration, min. Czas trwania testu obciążeniowego w minutach.
- Ramp-up Period, min. Przedział czasu, w którym wszyscy użytkownicy wirtualni (VU) stają się aktywni. Na przykład, dla 120 VU i czasu aktywacji 1 minuta - co sekundę będą dodawane 2 nowe VU. Zakres wartości od 0 do 60 minut. Aby natychmiast uruchomić wszystkich wirtualnych użytkowników, ustaw okres rozruchu na 0.

Po zakończeniu instalacji okno dialogowe z linkami do panelu testów i Grafany.

3. Przed uruchomieniem testu sprawdź, czy konfiguracja testu odpowiada wcześniejszym ustawieniom. Z poziomu warstwy Master, należy uruchomić dodatek JMeter Cluster Settings - Configure.

Dla naszego przykładu, konfiguracja powinna wyglądać tak jak poniżej:

4. Aby uruchomić test wejdź wybierz dodatek JMeter Cluster Settings z warstwy Master i wciśnij przycisk Run test.

Test obciążeniowy się rozpoczął, co system potwierdzi oknem dialogowym zawierającym URL do panelu testu:

5. W panelu testu obserwować można postępy, wejść do statystyk testu zwizualizowanych w Grafanie oraz na koniec pobrać rezultaty - RESULTS DIR.

Panel testów obciążeniowych - JMeter

Podgląd testu obciążeniowego Magento 2 z Grafany

Magento udostępnia scenariusz do testowania wydajności, który imituje aktywność użytkowników. Magento udostępnia scenariusz testowy dla JMeter do sprawdzania wydajności, który imituje aktywność użytkowników. W rezultacie, otrzymujesz zestaw wskaźników, których możesz użyć do oceny, w jaki sposób zmiany parametrów i ustawień oraz przydzielonych zasobów dla Magento wpływają na wydajność, a więc szybkość ładowania sklepu.
Gotowy skrypt emuluje typowe scenariusze użycia witryny e-commerce, takie jak:
- Przeglądanie katalogu, w tym odwiedzanie strony głównej, strony katalogu, strony produktu, konfigurowalną stronę produktu oraz prostą stronę produktu;
- Dodanie do koszyka zarówno prostego, jak i konfigurowalnego produktu;
- Dokończenie pełnego procesu płatności (wszystkie kroki) jako gość i zarejestrowany klient;
- Czynności administracyjne.
Scenariusz wykorzystuje następujące wzorce ruchu w witrynie dla działań użytkowników:
90% użytkowników puli frontendu, gdzie:
--- 80% - czynności związane z przeglądaniem katalogu przez gości.
--- 20% - obsługa koszyka przez klienta.
10% użytkowników do puli administracyjnej, gdzie:
--- 10% - działania związane z przeglądaniem siatki produktów administratora.
--- 90% - administracja działań związanych z tworzeniem produktów.
Do testów obciążeniowych wykorzystano nasze rozwiązania Magento o profilu MEDIUM:
500, 1000, 1500 użytkowników dla Klastra Magento 2.