Kurumsal Arama ile Yüksek Hacimli Bir WooCommerce Mağazasını Ölçeklendirme

Yayınlanan: 2022-04-06

Fısıltıları duyduk. "WooCommerce gibi WordPress ve ticaret çözümleri, derin ürün kataloglarına sahip yüksek hacimli mega mağazalar için tasarlanmamıştı."

Ama bu gerçek mi yoksa sadece modası geçmiş algı, dikkate almaya değmez mi?

İkincisi olduğuna inanıyoruz. Hızla yenilik yapmak, müşterilerin zamandan ve paradan tasarruf etmek ve WooCommerce gibi kullanımı kolay ticaret çözümlerinin kilidini geniş ölçekte (örneğin, stokta 1 milyon ürün ölçeğinde) açmak isteyen ticaret markaları için anahtar, geliştirilen Kurumsal Arama aracılığıyladır. WordPress VIP tarafından.

Bunu kanıtlamak için WordPress VIP laboratuvarında, birden fazla dilde, kategoride ve düzinelerce özellikte stoklu yüksek hacimli bir WooCommerce mağazası tasarlayıp stres testi yaparak bu zorluğu üstlendik. Ne öğrendiğimize bakın.

Yüksek hacimli WooCommerce mağaza zorlukları

Deneyimlerimize göre, bir MySQL veritabanına ne kadar çok veri girerse, onu aramak o kadar zorlaşır. Elbette, 1 milyondan fazla üründen oluşan bir kataloğu sergilemek ve müşterilerin gezinmesini kolaylaştırmak ciddi bir zorluktur.

Başlamak için, gerçek bir e-ticaret mağazasına benzemek için yeterli taksonomiye ve terim ilişkisine sahip ürünler oluşturmak için WooCommerce dahili yöntemlerini kullanmaya karar verdik.

Yardımcı olan paketlerden biri WooCommerce Smooth Generator idi. WooCommerce ürün üretimini on kat hızlandırmamıza yardımcı olan ölçeklenebilir WordPress VIP Cron mimarisini kullanmamıza izin verdi. İyi haber: Yalnızca 48 saat içinde yüksek hacimli verileri ve test edilecek 1 milyon ürünü olan bir mağazamız vardı.


Teknik ipucu: İlk içe aktarma sürecini hızlı tutmak için şartları yeniden sayma sürecini devre dışı bıraktık ve bunu yalnızca son aşamada yeniden çalıştırdık:

 add_filter('woocommerce_product_recount_terms', '__return_false');

Bu test için en son WooCommerce (sürüm 6.1.1) ve varsayılan Storefront temasını kullandık.

Ön ucu değerlendirirken, sayfaların oluşturulmasında büyük gecikmeler fark etmeye başladık - temel neden MySQL yavaş sorgularıydı. Etkilenen ana alanlar şunlarla ilgiliydi:

  • Ürün arama ürün arama
  • Kategori ürün listeleme sayfaları
  • Filtrelenmiş arama

Enterprise Search'e girin—hızlı, kolay, güvenli

En yeni ürünlerimizden biri olan Enterprise Search'ün, bu sorunları ölçeklenebilir bir şekilde ele almak için çok önemli olacağı açıktı. Büyük kod veya veritabanı şeması değişiklikleri olmadan yüksek hacimli WooCommerce mağaza işlevimize yardımcı olduğunu gördük.

İlk olarak, biraz arka plan: Kurumsal Arama, kurumsal müşterilerin ihtiyaçları için sıfırdan tasarlanmıştır. Veritabanı ve site hacmi ölçeğinde bile ışık hızındadır. Elasticsearch üzerine kuruludur ve milyonlarca içerikte bile doğru, neredeyse anında sonuçlar verir.

Kurumsal Arama, harici hizmetler gerektirmeden doğrudan VIP Cloud ile entegre olduğu için, yeni içerikleri anında dizine ekleyerek en yeni ve en alakalı sonuçları hızla ortaya çıkarır.

Enterprise Search'ü etkinleştirdik ve elimizdeki ürün verileri üzerinde bir başlangıç ​​dizini çalıştırarak, verileri veritabanımızdan yatay olarak depolamamıza olanak sağladık.


Teknik ipucu: Kurumsal Aramayı etkinleştirmek şu kadar basittir:

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

Sorguları Enterprise Search'e devrederek yükü hafifletme

Herhangi bir WP_Query Enterprise Search'e yüklenebileceğini bilerek, site ön ucunda bulunan yavaş MySQL sorgularına uygun temel es => true true'yu enjekte etmemize izin veren uygun filtreleri kontrol etmeye başladık. Veritabanını sorgulamak yerine, her sorgunun sonucu, hızlı bir API çağrısı kullanılarak Kurumsal Arama motorundan alınır.

Bu yöntemi kullanarak, ürün araması, kategori ürün listeleme sayfaları ve filtrelenmiş arama için yanıt süresi on kat arttı. Evet, 10x!

WP_Query ile ilgili ürün ön uç sorgularının Enterprise Search'e nasıl aktarıldığına ilişkin örnek kod aşağıdadır:

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

Kısa sürede elde edilen sonuç, hızlı ve ölçeklenebilir yüksek hacimli bir WooCommerce sitesiydi ve bu, mevcut VIP Bulut mimarisiyle birlikte büyük miktarda trafiği yönetmesine izin verdi.

Buna ek olarak, WooCommerce arka uç hızı, pahalı MySQL sorgularını Kurumsal Arama'ya boşaltarak iyileştirildi ve mağaza sahipleri için daha optimize bir deneyim sağladı.


Teknik ipucu: Kurumsal Arama'ya gönderilen tüm sorgular, aşağıdaki filtre kullanılarak JSON ElasticSearch Query DSL'ye çevrildikleri için tamamen özelleştirilebilir:

 ep_pre_request_args

Sipariş işlemede büyük ilerleme

Testteki bir sonraki adımımız, yüksek hacimli siparişler ve ilgili müşteri verileri oluşturmaktı.

Yukarıda belirtilen benzer adımları kullanarak ~1 milyon sipariş ve ilgili müşteri verisi oluşturmayı başardık.

Testlerimiz sırasında, optimizasyonların çoğunun yavaş MySQL arka uç sorgularıyla ilgili olduğunu gördük. Bu, yine daha pahalı sorguları Enterprise Search'e boşaltmak ve ilgili verileri dizine eklemek anlamına geliyordu.

Not: WooCommerce siparişleri, WooCommerce'de özel bir gönderi türü olarak depolanır, bu nedenle özel gönderi durumlarıyla birlikte Enterprise Search'ün izin verilen gönderi türlerine kaydedilmeleri gerekir. Örnek kod aşağıdadır:

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

Bir kenara, WooCommerce ekibi, ilgili verileri daha hızlı ve daha ölçeklenebilir bir şekilde sorgulamaya yardımcı olmak için yeni bir özel sipariş tablosu sunmaya çalışıyor. Bu, Kurumsal Arama'nın bir e-ticaret uygulamasının ölçeklenebilirliğini ve performansını artırmaya devam etmesine yardımcı olacaktır.

Çok dilli seçeneklerden bahsetmişken…

Yüksek hacimli, çok dilli bir e-ticaret sitesi kurarken iyi ölçeklenen bir yaklaşım, bir WordPress ağ kurulumu içinde ayrı siteler oluşturmak ve her birinin Kurumsal Arama'ya ayrı ayrı bağlanmasına izin vermektir.

Örneğin, bir WPVIP teknoloji ortağı olan Inpsyde, yüksek hacimli sitelerde sınırsız sayıda dili destekleyen benzer bir ağ kurulumunun oluşturulmasını kolaylaştıran bir MultilingualPress eklentisi sunar.

Ancak bu, siteler arasında stok senkronizasyonu ile ilgili zorluklar yaratır. Bunu çözmek için, yine Inpsyde'den bir Central Stock for WooCommerce eklentisi de dahil olmak üzere birden fazla çözüm mevcuttur.

Ödeme sırasında son bir söz

Kurumsal Arama, daha pahalı MySQL sorgularını boşaltmanın yanı sıra, yüksek hacimli bir WooCommerce mağaza aramasını daha da verimli hale getirmeye yardımcı olabilecek, bulanıklık, eş anlamlılar ve ağırlıklandırma gibi arama terimleri dahil olmak üzere yeni arama işlevleri de sunar.

Kurumsal Aramayı sevdiğimizi söyleyebilir misiniz? Açıkçası, işletmenizin ölçeklenebilirliğini artırmak, geliştirme ve uygulama süresiyle ilgili maliyetleri azaltmak ve yeni e-ticaret uygulamalarına giden yolu açmak için gerçek bir çözüm.

Halihazırda mevcut WordPress VIP ve WooCommerce müşterilerinin yüksek hacimli e-ticaretin sınırlarını başarıyla ve kârlı bir şekilde zorladığını görüyoruz. İşte daha ölçeklenebilir bir gelecek!

Yazar

Ovidiu Liuta, Premier Mühendis, WordPress VIP