Skalowanie sklepu WooCommerce o dużej objętości za pomocą wyszukiwania korporacyjnego

Opublikowany: 2022-04-06

Słyszeliśmy szepty. „WordPress i rozwiązania handlowe, takie jak WooCommerce, po prostu nie zostały stworzone dla dużych sklepów z obszernymi katalogami produktów”.

Ale czy ta rzeczywistość, czy tylko przestarzała percepcja nie jest warta zwrócenia uwagi?

Wierzymy, że to drugie. Kluczem dla marek handlowych, które chcą szybko wprowadzać innowacje, oszczędzać czas i pieniądze klientów oraz odblokowywać łatwe w użyciu rozwiązania handlowe, takie jak WooCommerce na dużą skalę — powiedzmy, na skalę 1 miliona produktów w magazynie — jest opracowane przez wyszukiwarkę korporacyjną przez WordPressa VIP.

Aby to udowodnić, podjęliśmy wyzwanie w laboratorium WordPress VIP, projektując i przeprowadzając testy obciążeniowe sklepu WooCommerce o dużej objętości z zapasami w wielu językach, kategoriach i dziesiątkach atrybutów. Sprawdź, czego się dowiedzieliśmy.

Wyzwania dla sklepów WooCommerce o dużej objętości

Z naszego doświadczenia wynika, że ​​im więcej danych trafia do bazy danych MySQL, tym trudniej jest je wyszukać. Z pewnością wyświetlanie katalogu zawierającego ponad 1 milion produktów – i ułatwienie klientom nawigacji – jest poważnym wyzwaniem.

Na początek postanowiliśmy wykorzystać wewnętrzne metody WooCommerce do generowania produktów z wystarczającą ilością relacji taksonomii i terminów, aby przypominały prawdziwy sklep e-commerce.

Jednym z pakietów, który pomógł, był WooCommerce Smooth Generator. Pozwoliło nam to wykorzystać skalowalną architekturę WordPress VIP Cron, która pomogła nam dziesięciokrotnie przyspieszyć generowanie produktów WooCommerce. Dobra wiadomość: w ciągu zaledwie 48 godzin mieliśmy sklep z dużymi ilościami danych — i milionem produktów — do testowania.


Wskazówka techniczna: aby przyspieszyć początkowy proces importowania, wyłączyliśmy proces ponownego przeliczania warunków i uruchomiliśmy go ponownie dopiero na ostatnim etapie:

 add_filter('woocommerce_product_recount_terms', '__return_false');

W tym teście użyliśmy najnowszego WooCommerce (wersja 6.1.1) i domyślnego motywu Storefront.

Oceniając frontend, zaczęliśmy zauważać duże opóźnienia w renderowaniu stron — główną przyczyną były wolne zapytania MySQL. Główne obszary dotknięte chorobą dotyczyły:

  • Wyszukiwarka produktów Wyszukiwarka produktów
  • Strony z listą produktów kategorii
  • Filtrowane wyszukiwanie

Wejdź do wyszukiwania korporacyjnego — szybkie, łatwe, bezpieczne

Było jasne, że jeden z naszych najnowszych produktów, Enterprise Search, będzie niezbędny do rozwiązania tych problemów w skalowalny sposób. Odkryliśmy, że pomogło to naszemu sklepowi WooCommerce o dużej objętości bez większych zmian w kodzie lub schemacie bazy danych.

Po pierwsze, trochę tła: wyszukiwanie korporacyjne zostało zaprojektowane od podstaw z myślą o potrzebach klientów korporacyjnych. Działa błyskawicznie, nawet przy skalowaniu bazy danych i wolumenu witryny. Zbudowany na Elasticsearch, daje dokładne, niemal natychmiastowe wyniki nawet w milionach fragmentów treści.

Ponieważ jest bezpośrednio zintegrowany z chmurą VIP bez konieczności korzystania z usług zewnętrznych, Enterprise Search natychmiast indeksuje nowe fragmenty treści, szybko wyświetlając najnowsze i najbardziej odpowiednie wyniki.

Włączyliśmy Enterprise Search i przeprowadziliśmy wstępny indeks danych produktów, które posiadaliśmy, co pozwoliło nam przechowywać dane z naszej bazy danych w poziomie.


Wskazówka techniczna: włączenie wyszukiwania dla przedsiębiorstw jest tak proste, jak:

 define( 'VIP_ENABLE_VIP_SEARCH', true ); // Enables Enterprise Search. define( 'VIP_ENABLE_VIP_SEARCH_QUERY_INTEGRATION', true ); // Integrates search queries with Enterprise Search.

Zmniejszenie obciążenia poprzez przeniesienie zapytań do Enterprise Search

Wiedząc, że każde WP_Query można przenieść do Enterprise Search, zaczęliśmy sprawdzać odpowiednie filtry, które pozwoliły nam wstrzyknąć podstawowe es => true do powolnych zapytań MySQL znalezionych w interfejsie witryny. Zamiast odpytywać bazę danych, wynik każdego zapytania jest pobierany z wyszukiwarki Enterprise Search za pomocą szybkiego wywołania API.

Dzięki tej metodzie czas odpowiedzi na wyszukiwanie produktów, strony z listą produktów kategorii i filtrowane wyszukiwanie poprawił się dziesięciokrotnie. Tak, 10x!

Przykładowy kod pokazujący, w jaki sposób zapytania frontendowe produktu związane z WP_Query zostały przeniesione do wyszukiwania korporacyjnego, znajduje się poniżej:

 add_action( 'pre_get_posts', 'offload_query_to_ES' ); function offload_query_to_ES( $query ) { // Avoid unintentional query offloading for backend queries. if ( is_admin() ) { return; } if ( ! $query->is_main_query() ) { return; } if( 'product' !== $query->get( 'post_type' ) ) { return; } // Offloading query to Enterprise Search. $query->set( 'es', true ); }

Rezultatem, osiągniętym w krótkim czasie, była szybka i skalowalna witryna WooCommerce o dużej objętości, która w połączeniu z istniejącą architekturą VIP Cloud pozwoliła na obsłużenie dużego ruchu.

Ponadto poprawiono również szybkość backendu WooCommerce poprzez przeniesienie kosztownych zapytań MySQL do Enterprise Search, co zapewnia bardziej zoptymalizowane środowisko dla właścicieli sklepów.


Wskazówka techniczna: wszystkie zapytania wysyłane do Enterprise Search można w pełni dostosować, ponieważ są one tłumaczone na JSON ElasticSearch Query DSL przy użyciu następującego filtra:

 ep_pre_request_args

Rozwijamy przetwarzanie zamówień

Naszym kolejnym krokiem w testowaniu było wygenerowanie dużej liczby zamówień i powiązanych danych klientów.

Stosując podobne kroki, jak wspomniano powyżej, udało nam się stworzyć ~ 1 milion zamówień i powiązanych danych klientów.

Podczas naszych testów stwierdziliśmy, że większość optymalizacji była związana z wolnymi zapytaniami zaplecza MySQL. Oznaczało to ponownie przeniesienie droższych zapytań do wyszukiwania korporacyjnego i indeksowanie powiązanych danych.

Uwaga: zamówienia WooCommerce są przechowywane jako niestandardowe typy postów w WooCommerce, więc muszą być zarejestrowane w dozwolonych typach postów Enterprise Search wraz z ich niestandardowymi statusami postów. Przykładowy kod znajduje się poniżej:

 // The `shop_order` post type is not public, so we need to add this to get them to index. add_filter( 'ep_indexable_post_types', function( $post_types ) { $post_types['shop_order'] = 'shop_order'; return $post_types; } ); // Adding the custom order statuses to the index. add_filter( 'ep_indexable_post_status', function( $statuses ) { return array_merge( $statuses, array_keys(wc_get_order_statuses()) ); });

Na marginesie, zespół WooCommerce pracuje nad wprowadzeniem nowej tabeli niestandardowych zamówień, aby pomóc w szybszym i bardziej skalowalnym zapytaniu o dane. Pomoże to wyszukiwarce korporacyjnej w dalszym zwiększaniu skalowalności i wydajności aplikacji e-commerce.

Mówiąc o opcjach wielojęzycznych…

Jednym z podejść, które dobrze się skaluje podczas konfigurowania dużej, wielojęzycznej witryny e-commerce, jest tworzenie oddzielnych witryn w ramach instalacji sieciowej WordPress i umożliwianie oddzielnego połączenia każdej z nich z wyszukiwarką korporacyjną.

Na przykład Inpsyde, partner technologiczny WPVIP, oferuje wtyczkę MultilingualPress, która ułatwia tworzenie podobnej konfiguracji sieciowej, która obsługuje nieograniczoną liczbę języków w witrynach o dużej objętości.

Stwarza to jednak wyzwania związane z synchronizacją zapasów między witrynami. Istnieje wiele rozwiązań, aby rozwiązać ten problem, w tym wtyczka Central Stock for WooCommerce, również od Inpsyde.

Ostatnie słowo przy kasie

Oprócz usuwania droższych zapytań MySQL, Enterprise Search oferuje również nowe funkcje wyszukiwania — w tym rozmycie wyszukiwanych haseł, synonimy i ważenie — które mogą pomóc w jeszcze wydajniejszym wyszukiwaniu w sklepach WooCommerce o dużej objętości.

Czy możesz powiedzieć, że kochamy wyszukiwanie dla przedsiębiorstw? Szczerze mówiąc, to realne rozwiązanie zwiększające skalowalność Twojego biznesu, obniżające koszty związane z czasem rozwoju i wdrażania oraz otwierające drogę do nowych wdrożeń e-commerce.

Widzimy już, jak istniejący klienci WordPress VIP i WooCommerce z powodzeniem i z zyskiem przesuwają granice masowego e-commerce. Oto bardziej skalowalna przyszłość!

Autor

Ovidiu Liuta, główny inżynier, WordPress VIP