Magento 2 - automatycznie skalowalny klaster z CDN
Last updated
Last updated
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.
Zaloguj się do Panelu Usług Cloudlets.Zone i wykonaj kolejne kroki.
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.
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:
Następnie sprawdź, czy nastąpiło rozpropagowanie nowego wpisu używając na przykład DNS Checker.
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
wklejamy CDN Endpoint URL, w naszym przykładzie to: https://Magento2-chmur.cdn.jelastic.net/
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ę.
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:
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.
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:
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.
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.
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!
6. Po wygenerowaniu danych należy ręcznie uruchomić indeksowanie.
7. Na zakończenie, czyścimy pamięć podręczną następującą komendą:
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.
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.
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.
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