Масштабирование крупного магазина WooCommerce с помощью корпоративного поиска

Опубликовано: 2022-04-06

Мы слышали шепот. «WordPress и коммерческие решения, такие как WooCommerce, просто не были созданы для крупных мегамагазинов с обширными каталогами товаров».

Но на эту реальность или просто устаревшее восприятие не стоит обращать внимание?

Мы считаем, что последнее. Ключ для торговых брендов, которые хотят быстро внедрять инновации, экономить время и деньги клиентов и открывать простые в использовании коммерческие решения, такие как WooCommerce в масштабе — скажем, в масштабе 1 миллион товаров на складе — через корпоративный поиск, разработанный WordPress VIP.

Чтобы доказать это, мы взяли на себя задачу в VIP-лаборатории WordPress, разработав и проведя стресс-тестирование крупномасштабного магазина WooCommerce с ассортиментом на нескольких языках, в разных категориях и с десятками атрибутов. Проверьте, что мы узнали.

Проблемы с крупным магазином WooCommerce

По нашему опыту, чем больше данных поступает в базу данных MySQL, тем сложнее их найти. Конечно, отображение каталога из более чем 1 миллиона товаров и упрощение навигации для клиентов — это серьезная задача.

Для начала мы решили использовать внутренние методы WooCommerce для создания продуктов с достаточным количеством таксономий и взаимосвязей терминов, чтобы они напоминали настоящий магазин электронной коммерции.

Одним из пакетов, который помог, был WooCommerce Smooth Generator. Это позволило нам использовать масштабируемую архитектуру WordPress VIP Cron, которая помогла нам ускорить создание продуктов WooCommerce в десять раз. Хорошие новости: всего за 48 часов у нас был магазин с большими объемами данных — и этим 1 миллионом продуктов — для тестирования.


Технический совет: чтобы ускорить первоначальный процесс импорта, мы отключили процесс пересчета терминов и запустили его снова только на последнем этапе:

 add_filter('woocommerce_product_recount_terms', '__return_false');

Для этого теста мы использовали последнюю версию WooCommerce (версия 6.1.1) и тему Storefront по умолчанию.

Оценивая внешний интерфейс, мы начали замечать большие задержки в рендеринге страниц — основной причиной были медленные запросы MySQL. Основные затронутые области были связаны с:

  • поиск продукта поиск продукта
  • Страницы со списком продуктов категории
  • Отфильтрованный поиск

Войдите в корпоративный поиск — быстро, легко, безопасно

Было ясно, что один из наших новейших продуктов, корпоративный поиск, будет необходим для масштабируемого решения этих проблем. Мы обнаружили, что это помогло нашему магазину WooCommerce с большими объемами работать без серьезных изменений кода или схемы базы данных.

Во-первых, немного предыстории: корпоративный поиск был разработан с нуля для нужд корпоративных клиентов. Это молниеносно, даже при масштабировании базы данных и сайта. Основанный на Elasticsearch, он дает точные и почти мгновенные результаты даже для миллионов фрагментов контента.

Поскольку он напрямую интегрирован с VIP Cloud и не требует внешних служб, корпоративный поиск немедленно индексирует новые фрагменты контента, быстро выявляя самые новые и наиболее релевантные результаты.

Мы включили корпоративный поиск и запустили первоначальный индекс имеющихся у нас данных о продуктах, что позволило нам горизонтально хранить данные из нашей базы данных.


Технический совет. Включить корпоративный поиск очень просто:

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

Снижение нагрузки за счет переноса запросов в корпоративный поиск

Зная, что любой WP_Query можно выгрузить в корпоративный поиск, мы начали проверять подходящие фильтры, которые позволили нам внедрить базовый es => true в медленные запросы MySQL, обнаруженные во внешнем интерфейсе сайта. Вместо запроса к базе данных результат каждого запроса извлекается из поисковой системы предприятия с помощью быстрого вызова API.

Используя этот метод, время отклика для поиска продуктов, страниц со списками продуктов по категориям и поиска с фильтрами улучшилось в десять раз. Да, в 10 раз!

Пример кода того, как запросы внешнего интерфейса продукта, связанные с WP_Query , были выгружены в корпоративный поиск, приведен ниже:

 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 ); }

Результатом, достигнутым в короткие сроки, стал быстрый и масштабируемый сайт WooCommerce с большим объемом, который в сочетании с существующей архитектурой VIP Cloud позволил ему обрабатывать большие объемы трафика.

Кроме того, скорость серверной части WooCommerce также была улучшена за счет разгрузки дорогостоящих запросов MySQL в корпоративный поиск, что позволило владельцам магазинов более оптимизировать работу.


Технический совет. Все запросы, отправляемые в корпоративный поиск, полностью настраиваются, поскольку они переводятся в JSON ElasticSearch Query DSL с использованием следующего фильтра:

 ep_pre_request_args

Успех в обработке заказов

Следующим шагом в тестировании было создание большого количества заказов и связанных с ними данных о клиентах.

Используя аналогичные шаги, как указано выше, нам удалось создать около 1 миллиона заказов и связанных с ними данных о клиентах.

Во время нашего тестирования мы обнаружили, что большинство оптимизаций были связаны с медленными серверными запросами MySQL. Это опять же означало разгрузку более дорогих запросов в поисковую систему предприятия и индексирование связанных данных.

Примечание. Заказы WooCommerce хранятся в WooCommerce как настраиваемый тип сообщений, поэтому их необходимо зарегистрировать в разрешенных типах сообщений корпоративного поиска вместе с их пользовательскими статусами сообщений. Пример кода ниже:

 // 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()) ); });

Кроме того, команда WooCommerce работает над введением новой таблицы пользовательских заказов, чтобы помочь запрашивать связанные данные быстрее и более масштабируемым способом. Это поможет корпоративному поиску продолжать повышать масштабируемость и производительность приложения электронной коммерции.

Говоря о многоязычных опциях…

Один из подходов, который хорошо масштабируется при настройке многоязычного сайта электронной коммерции большого объема, — это создание отдельных сайтов в рамках сетевой установки WordPress и возможность отдельного подключения каждого из них к корпоративному поиску.

Inpsyde, технологический партнер WPVIP, например, предлагает плагин MultilingualPress, который облегчает создание аналогичной настройки сети, поддерживающей неограниченное количество языков на сайтах с большим объемом.

Однако это создает проблемы, связанные с синхронизацией акций между сайтами. Для решения этой проблемы существует несколько решений, в том числе плагин Central Stock for WooCommerce, также от Inpsyde.

Последнее слово на кассе

Помимо разгрузки более дорогих запросов MySQL, корпоративный поиск также предлагает новые функции поиска, в том числе нечеткость условий поиска, синонимы и взвешивание, которые могут помочь сделать поиск в магазине WooCommerce в больших объемах еще более эффективным.

Можете ли вы сказать, что мы любим корпоративный поиск? Откровенно говоря, это реальное решение для повышения масштабируемости вашего бизнеса, сокращения затрат, связанных со временем разработки и внедрения, и открытия пути для новых реализаций электронной коммерции.

Мы уже видим, как существующие клиенты WordPress VIP и WooCommerce успешно и прибыльно расширяют границы крупномасштабной электронной коммерции. За более масштабируемое будущее!

Автор

Овидиу Люта, главный инженер, WordPress VIP