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

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

API اسنپ‌شات محصول Searchwiz

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

مسئله تجاری

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

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

  • یک جدول اختصاصی wp_a2_searchwiz_snapshot که به‌ازای هر محصول یک سند JSON نرمال‌شده ذخیره می‌کند، همراه با زمان‌مهر برای تشخیص تغییر.
  • مسیرهای REST زیر searchwiz/v1 به‌علاوه‌ی اندپوینت‌های سازگار با اسنپ‌پی که همه از همان اسنپ‌شات سرو می‌شوند.
  • یک سازنده‌ی دسته‌ای کرون که در هر تیک ۳۰۰ محصول را زیر یک قفل ۴۵ثانیه‌ای پردازش می‌کند، به‌علاوه‌ی یک جاب دلتای روزانه که فقط محصولات تغییرکرده را تازه می‌کند.
  • یک کنسول ادمین محافظت‌شده با nonce با اکشن‌های شروع کامل، شروع دلتا، اجرای یک‌باره، توقف و پاک‌کردن اسنپ‌شات.
  • اجازه‌لیست IP با محدودیت نرخ در دقیقه — ۱۲۰ برای فهرست محصولات و ۳۰۰ برای تک‌محصول — که حتی برای IPهای تأییدشده هم اعمال می‌شود.

رویکرد فنی

  • تولید اسنپ‌شات از سرو پاسخ جدا شد تا بار بازسازی و بار API هیچ‌وقت روی یک درخواست روی هم جمع نشوند.
  • به‌جای کلید API سراغ اجازه‌لیست IP رفتم چون مصرف‌کننده آدرس‌های ثابت خزنده‌اش را منتشر می‌کند؛ یک آپشن فهرست داخلی را گسترش می‌دهد.
  • هر دسته با یک فیلتر بودجه‌ی زمانی کران‌دار شده تا بازسازی‌ها نتوانند تایم‌اوت شوند یا حافظه را بالا ببرند.
  • بازآوری دلتا بعد از اولین ساخت کامل، زمان‌مهرمحور شد تا نگهداری روزانه فقط چیزی را که تغییر کرده لمس کند.

نتیجه و شواهد

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

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

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

عمق اجرای پروژه

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

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

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

خلاصه_اجرایی {
  پروژه: "A2 Searchwiz Product API"
  پشته: "افزونه‌ی وردپرس، PHP، ووکامرس، WP REST API"
  نسخه: "1.2.3"
  مسیرها: "searchwiz/v1/products و /product، فید سازگار اسنپ‌پی"
  جدول: "wp_a2_searchwiz_snapshot، یک سند JSON در هر محصول"
  جاب‌ها: "تیک اسنپ‌شات (۳۰۰ در هر دسته، قفل ۴۵ثانیه)،
           کرون دلتای روزانه"
  دسترسی: "اجازه‌لیست IP؛ نرخ ۱۲۰/دقیقه فهرست، ۳۰۰/دقیقه تکی"
  نتیجه: "p95 فهرست محصولات ۱٫۹ ثانیه ← ۰٫۴۲ ثانیه در پروداکشن"
}

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

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

محدودیت نرخ حتی برای IPهای تأییدشده عمدی است. اعتماد دلیلی برای نداشتن سقف نیست؛ یک باگ در سمت شریک هم می‌تواند همان کار حمله را بکند.