Enterprise Search로 대용량 WooCommerce 매장 확장하기

게시 됨: 2022-04-06

우리는 속삭임을 들었습니다. "WordPress 및 WooCommerce와 같은 상거래 솔루션은 심층 제품 카탈로그가 있는 대규모 대형 매장을 위해 구축되지 않았습니다."

그러나 그 현실이나 단지 구시대적인 인식은 관심을 기울일 가치가 없는 것입니까?

우리는 그것이 후자라고 믿습니다. 신속하게 혁신하고, 고객의 시간과 비용을 절약하고, WooCommerce와 같은 사용하기 쉬운 상거래 솔루션을 대규모(예 : 재고가 100만 개 )로 확장하려는 커머스 브랜드의 핵심은 개발된 Enterprise Search를 통한 것입니다. 워드프레스 VIP로.

이를 증명하기 위해 우리는 WordPress VIP 랩에서 여러 언어, 카테고리 및 수십 가지 속성에 걸쳐 재고가 있는 대량 WooCommerce 상점을 설계하고 스트레스 테스트를 수행했습니다. 우리가 배운 것을 확인하십시오.

대용량 WooCommerce 매장 과제

우리의 경험에 따르면 MySQL 데이터베이스에 들어가는 데이터가 많을수록 검색하기가 더 어려워집니다. 확실히, 100만 개 이상의 제품 카탈로그를 표시하고 고객이 쉽게 탐색할 수 있도록 하는 것은 심각한 과제입니다.

시작하기 위해 WooCommerce 내부 방법을 사용하여 실제 전자 상거래 상점과 유사하도록 충분한 분류 및 용어 관계를 가진 제품을 생성하기로 결정했습니다.

도움이 된 패키지 중 하나는 WooCommerce Smooth Generator였습니다. 확장 가능한 WordPress VIP Cron 아키텍처를 사용하여 WooCommerce 제품 생성을 10배 가속화할 수 있었습니다. 좋은 소식: 단 48시간 만에 테스트할 대용량 데이터와 100만 개의 제품이 있는 매장이 생겼습니다.


기술 팁: 초기 가져오기 프로세스를 빠르게 유지하기 위해 용어 재계산 프로세스를 비활성화하고 마지막 단계에서만 다시 실행했습니다.

 add_filter('woocommerce_product_recount_terms', '__return_false');

이 테스트에서는 최신 WooCommerce(버전 6.1.1)와 기본 Storefront 테마를 사용했습니다.

프론트엔드를 평가하면서 우리는 페이지 렌더링에서 큰 지연을 발견하기 시작했습니다. MySQL 느린 쿼리가 근본 원인이었습니다. 영향을 받은 주요 영역은 다음과 관련되었습니다.

  • 상품검색 상품검색
  • 카테고리 제품 목록 페이지
  • 필터링된 검색

엔터프라이즈 검색 시작 - 빠르고 쉽고 안전합니다.

우리의 최신 제품 중 하나인 Enterprise Search는 이러한 문제를 확장 가능한 방식으로 해결하는 데 필수적입니다. 우리는 이것이 주요 코드나 데이터베이스 스키마 변경 없이 대용량 WooCommerce 스토어 기능을 도왔다는 것을 발견했습니다.

첫째, 몇 가지 배경: Enterprise Search는 처음부터 기업 고객의 요구 사항에 맞게 설계되었습니다. 데이터베이스 및 사이트 볼륨 확장에도 매우 빠릅니다. Elasticsearch를 기반으로 구축되어 수백만 개의 콘텐츠에 대해서도 정확하고 거의 즉각적인 결과를 제공합니다.

외부 서비스가 필요 없이 VIP Cloud와 직접 통합되기 때문에 Enterprise Search는 새로운 콘텐츠를 즉시 인덱싱하여 가장 관련성이 높은 최신 결과를 신속하게 표시합니다.

Enterprise Search를 활성화하고 보유한 제품 데이터에 대한 초기 인덱스를 실행하여 데이터베이스의 데이터를 수평으로 저장할 수 있었습니다.


기술 팁: 엔터프라이즈 검색을 활성화하는 것은 다음과 같이 간단합니다.

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

쿼리를 Enterprise Search로 오프로드하여 부하를 줄입니다.

모든 WP_Query 를 Enterprise Search로 오프로드할 수 있다는 사실을 알고 있기 때문에 사이트 프론트엔드에서 발견되는 느린 MySQL 쿼리에 기본 es => true 를 주입할 수 있는 적절한 필터를 확인하기 시작했습니다. 데이터베이스를 쿼리하는 대신 빠른 API 호출을 사용하여 엔터프라이즈 검색 엔진에서 각 쿼리의 결과를 가져옵니다.

이 방법을 사용하면 제품 검색, 카테고리 제품 목록 페이지 및 필터링된 검색에 대한 응답 시간이 10배 향상되었습니다. 네, 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 클라우드 아키텍처와 결합하여 많은 양의 트래픽을 처리할 수 있었습니다.

또한, 값비싼 MySQL 쿼리를 Enterprise Search로 오프로드하여 WooCommerce 백엔드 속도도 향상되어 상점 소유자에게 보다 최적화된 경험을 제공합니다.


기술 팁: Enterprise Search로 전송된 모든 쿼리는 다음 필터를 사용하여 JSON ElasticSearch 쿼리 DSL로 변환되므로 완전히 사용자 지정할 수 있습니다.

 ep_pre_request_args

큰 주문 처리

테스트의 다음 단계는 대량의 주문 및 관련 고객 데이터를 생성하는 것이었습니다.

위에서 언급한 유사한 단계를 사용하여 약 100만 개의 주문 및 관련 고객 데이터를 생성했습니다.

테스트 중에 대부분의 최적화가 느린 MySQL 백엔드 쿼리와 관련되어 있음을 발견했습니다. 다시 말하지만 더 비싼 쿼리를 Enterprise Search에 오프로드하고 관련 데이터를 인덱싱해야 했습니다.

참고: WooCommerce 주문은 WooCommerce에서 사용자 지정 게시물 유형으로 저장되므로 사용자 지정 게시물 상태와 함께 Enterprise Search의 허용된 게시물 유형에 등록해야 합니다. 샘플 코드는 다음과 같습니다.

 // 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 팀은 관련 데이터를 보다 빠르고 확장 가능한 방식으로 쿼리하는 데 도움이 되는 새로운 사용자 지정 주문 테이블을 도입하기 위해 노력하고 있습니다. 이는 Enterprise Search가 전자상거래 애플리케이션의 확장성과 성능을 지속적으로 향상시키는 데 도움이 될 것입니다.

다국어 옵션에 대해...

대량의 다국어 전자 상거래 사이트를 설정하는 동안 잘 확장되는 한 가지 접근 방식은 WordPress 네트워크 설치 내에 별도의 사이트를 만들고 각 사이트를 Enterprise Search에 별도로 연결할 수 있도록 하는 것입니다.

예를 들어, WPVIP 기술 파트너인 Inpsyde는 대용량 사이트에서 무제한 언어를 지원하는 유사한 네트워크 설정 생성을 용이하게 하는 MultilingualPress 플러그인을 제공합니다.

그러나 이는 사이트 간 재고 동기화와 관련된 문제를 야기합니다. Inpsyde의 Central Stock for WooCommerce 플러그인을 포함하여 이 문제를 해결하기 위한 여러 솔루션이 있습니다.

체크아웃 시 마지막 한마디

더 비싼 MySQL 쿼리를 오프로드하는 것 외에도 Enterprise Search는 검색어 퍼지, 동의어 및 가중치를 포함한 새로운 검색 기능을 제공하여 대용량 WooCommerce 매장 검색을 훨씬 더 효율적으로 만드는 데 도움이 됩니다.

우리가 엔터프라이즈 검색을 좋아한다고 말할 수 있습니까? 솔직히 말해서 비즈니스 확장성을 높이고 개발 및 구현 시간과 관련된 비용을 절감하며 새로운 전자 상거래 구현을 위한 길을 열어주는 진정한 솔루션입니다.

우리는 이미 기존 WordPress VIP 및 WooCommerce 고객이 대량 전자 상거래의 경계를 성공적으로 수익성 있게 확장하는 것을 보고 있습니다. 더 확장 가능한 미래가 있습니다!

작가

Ovidiu Liuta, 프리미어 엔지니어, WordPress VIP