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

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

سپر REST A2

A2 REST Shield یک افزونه‌ی must-use کوچک است که بعد از پروفایلینگ نوشتم؛ پروفایل نشان داد ترافیک REST ناشناس روی هر درخواست یک مالیات سنگین المنتور می‌پردازد. این افزونه کوئری‌های قالب را در فراخوان‌های REST مهمان قطع می‌کند و چند اندپوینت گران را کش می‌کند.

مسئله تجاری

پروفایلینگ نشان داد هر بازدید مهمان روی /wp-json/ دارد المنتور را بوت می‌کند و کوئری‌های elementor_library را اجرا می‌کند که پاسخ هیچ‌وقت ازشان استفاده نمی‌کرد. خزنده‌ها و یکپارچه‌سازی‌ها این مسیرها را شبانه‌روز گرم نگه می‌داشتند، پس کوئری‌های هدررفته تبدیل به بار واقعی دیتابیس می‌شدند. نکته اینجا بود که مسیرهای افزونه‌ی محصول wcpe واقعاً به المنتور نیاز دارند.

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

  • یک فیلتر posts_pre_query فقط برای مهمان که در طول درخواست‌های REST برای کوئری‌های elementor_library نتیجه‌ی خالی برمی‌گرداند و کاملاً از دیتابیس رد می‌شود.
  • یک معافیت صریح برای مسیرهای /wcpe/ تا ثبتشان همچنان کار کند.
  • کش ترنزینت برای یک فهرست کوتاه از اندپوینت‌ها: types، taxonomies و oembed به‌مدت ۳۰ دقیقه، و محصولات wcpe به‌مدت ۱۸۰ ثانیه.
  • یک هدر پاسخ X-A2-REST-CACHE با مقادیر HIT، MISS-STORED و MISS-NOSTORE، تا رفتار کش را بشود مستقیم از curl تأیید کرد.

رویکرد فنی

  • به rest_pre_dispatch و rest_post_dispatch هوک شد به‌جای افزودن یک کش صفحه، تا کش داخل چرخه‌ی حیات REST بماند و فقط پاسخ‌های ۲۰۰ ذخیره شوند.
  • کلیدهای کش از مسیر، متد و پارامترهای مرتب‌شده‌ی کوئری ساخته می‌شوند تا ترتیب پارامترها نتواند کش را تکه‌تکه کند.
  • هر مسیر کد با بررسی is_user_logged_in() و is_admin() محافظت شده؛ ترافیک لاگین‌شده و ادمین دست‌نخورده عبور می‌کند.
  • مقدار TTL مربوط به wcpe از طریق یک فیلتر بیرون داده شده تا بدون ویرایش افزونه قابل تنظیم باشد.

نتیجه و شواهد

p95 مسیرهای REST متأثر از ۲٫۸ ثانیه به ۰٫۹ ثانیه افت کرد. این سپر یک فایل MU واحد است، a2-rest-shield.php، در حال حاضر نسخه‌ی ۰٫۱٫۲ و در حال اجرا در پروداکشن، با هدر کش که نقش یک بررسی سلامت سریع را بازی می‌کند.

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

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

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

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

خلاصه_اجرایی {
  پروژه: "A2 REST Shield"
  پشته: "افزونه‌ی MU وردپرس، PHP، ووکامرس"
  فایل: "mu-plugins/a2-rest-shield.php (v0.1.2)"
  هوک‌ها: "posts_pre_query، rest_pre_dispatch، rest_post_dispatch"
  دامنه: "فقط REST مهمان؛ مسیرهای wcpe و ترافیک ادمین معاف"
  کش: "types/taxonomies/oembed ۳۰دقیقه، محصولات wcpe ۱۸۰ثانیه"
  هدر: "X-A2-REST-CACHE: HIT | MISS-STORED | MISS-NOSTORE"
  نتیجه: "p95 REST از ۲٫۸ ثانیه به ۰٫۹ ثانیه، در پروداکشن"
}

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

هدر X-A2-REST-CACHE چیزی است که به آن اشاره می‌کنم. کشی که نتوانی از بیرون بررسی‌اش کنی، کشی است که وقتی مشکل پیدا کرد باید حدس بزنی.

معافیت صریح wcpe نشان می‌دهد بهینه‌سازی باید بداند کجا نباید دست بزند. سریع‌کردن همه‌چیز راهی است که یکپارچه‌سازی‌ها را می‌شکند.