Amirali Yaghoutiمهندس ارشد نرم‌افزار

مطالعه موردی مهندسی

محصولات مشابه با DNA سبک

ویجت‌های محصولات مرتبط معمولاً هرچه را که در یک دسته مشترک است پیشنهاد می‌دهند. می‌خواستم فروشگاه ما ساعت‌هایی را پیشنهاد دهد که واقعاً شبیه هم به نظر می‌رسند و حس می‌شوند، پس موتوری ساختم که ویژگی‌های هر محصول را به‌عنوان یک امضای سبک می‌خواند و نامزدها را در برابر آن امتیاز می‌دهد.

مسئله تجاری

امتیازدادن یک محصول در برابر یک کاتالوگ بزرگ برای دیتابیس بی‌رحمانه است: هر نامزد یعنی جست‌وجوی ترم ویژگی، و بلوک پیشنهاد روی صفحات محصول پروداکشن حدود ۱٫۹ ثانیه رندر می‌شد. بلوکی به این کندی یا بد کش می‌شود یا حذف می‌شود، و هیچ‌کدام به فروش کمک نمی‌کند.

آنچه تحویل دادم

  • موتور به‌عنوان یک افزونه‌ی MU، a2-style-dna-similar.php، با یک شورت‌کد که تا هشت ساعت مشابه را روی هر صفحه‌ی محصول رندر می‌کند.
  • یک امضای DNA به‌ازای هر محصول که در متای _a2_dna_sig_json ذخیره می‌شود و از ویژگی‌های برند، اندازه‌ی قاب، مکانیزم، رنگ صفحه، بند، مقاومت در برابر آب، جنسیت، سبک و کشور سازنده ساخته شده.
  • یک backfill پس‌زمینه که کاتالوگ را با دسته‌های ۲۰۰تایی روی یک تیک کرون یک‌دقیقه‌ای امضا می‌کند، با سقف امضای تنبل ۱۸تایی در هر درخواست تا محصولات تازه قبل از رسیدن backfill رندر شوند.
  • بازآوری هوشمند: وقتی یک نتیجه‌ی کش‌شده منقضی می‌شود، اگر اثرانگشت نامزدها تغییر نکرده باشد از اسنپ‌شات دوباره استفاده می‌شود و فقط نامزدهایی که تغییر کرده‌اند دوباره امتیاز می‌گیرند.
  • یک سقف سهم برند ۶۰ درصدی، تا پیشنهادها هیچ‌وقت به فهرستی تک‌برند فرو نریزند.

رویکرد فنی

  • استخر نامزدها در هر مرحله کران‌دار است — ۶۰۰ هم‌برند، ۱۲۰۰ منطبق با OR، ۸۰۰ منطبق با AND، ۱۸۰ فالبک و سقف سخت ۲۶۰۰ — چون یک موتور شباهت بی‌کران بالاخره به محصولی می‌رسد که می‌شکندش.
  • شناسه‌های نامزد و امتیازهای هر نامزد در ترنزینت‌های جدا با طول عمر جدا (۲۴ و ۷۲ ساعت) زندگی می‌کنند، تا یک فهرست منقضی کار امتیازدهی‌ای را که هنوز معتبر است دور نریزد.
  • بارهای بالای ۲ کیلوبایت با gzip فشرده می‌شوند و یک هوک پاک‌سازی روزانه ردیف‌های ترنزینت را دسته‌ای هرس می‌کند تا کش خودش تبدیل به مسئله‌ی ذخیره‌سازی نشود.
  • یک قفل ساخت ۱۲۰ثانیه‌ای هجوم را جذب می‌کند وقتی کش یک صفحه‌ی محصول پرطرفدار منقضی می‌شود، و save_post_product ورودی‌های متأثر را فوری باطل می‌کند.

نتیجه و شواهد

اندازه‌گیری‌شده روی صفحات محصول پروداکشن، رندر محصولات مشابه پس از جاافتادن کش‌های لایه‌ای و استخرهای کران‌دار از ۱٫۹ ثانیه به ۰٫۴۲ ثانیه افت کرد. این بلوک از آن زمان روی هر صفحه‌ی محصول فعال مانده.

اهمیت برای کارفرما

فروش مکمل در ساعت و جواهر کاملاً به ربط در سطح سلیقه وابسته است. گذاشتن هشت قطعه از همان باند سبکی جلوی خریدار، او را در مسیر موجودی‌ای که می‌خواهیم حرکت کند نگه می‌دارد.

خلاصه-اجرایی-پروژه

خلاصه اجرایی خوانا

خلاصه_اجرایی {
  پروژه: "Style DNA Similar Products"
  فایل: "mu-plugins/a2-style-dna-similar.php (v1.0.34)"
  امضا: "JSON به‌ازای هر محصول در متای _a2_dna_sig_json"
  استخرها: { برند: ۶۰۰، or: ۱۲۰۰، and: ۸۰۰، فالبک: ۱۸۰، سقف: ۲۶۰۰ }
  کش: { نتیجه: "۱۲ساعت + ۷۲ساعت کهنه"، شناسه‌ها: "۲۴ساعت"،
        امتیازها: "۷۲ساعت"، فشرده‌سازی: "gzip بالای ۲KB" }
  backfill: "۲۰۰ در هر دسته، کرون یک‌دقیقه‌ای، بودجه‌ی ۶ثانیه"
  رندر: "۸ قلم، حداقل امتیاز ۵۵، سهم برند ≤ ۶۰٪"
  اندازه‌گیری: "رندر صفحه‌ی محصول ۱٫۹ ثانیه ← ۰٫۴۲ ثانیه"
}

ارزش حرفه‌ای این پروژه

کران‌دار بودن استخر نامزدها در هر مرحله چیزی است که در بازبینی از آن دفاع می‌کنم. یک موتور شباهت بدون سقف روی کاتالوگ کوچک عالی کار می‌کند و روی کاتالوگ واقعی از پا درمی‌آید.

سقف سهم برند یک تصمیم محصولی است نه فنی. فهرست پیشنهادی که همه‌اش یک برند است، به خریدار چیزی یاد نمی‌دهد.