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

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

هسته بهینه‌سازی Action Scheduler

داشبورد بی‌هیچ الگویی کند می‌شد و کسی دلیلش را نمی‌دانست. زیرش ۳۸٬۰۰۰ اکشن پس‌زمینه‌ی صف‌شده بود که داخل درخواست‌های عادی وب اجرا می‌شدند. یعنی کارکنان فروشگاه سر همان worker‌های PHP با صف رقابت می‌کردند.

مسئله تجاری

تعداد جاب‌های معلق Action Scheduler روی فروشگاه ووکامرس ما به حدود ۳۸٬۰۰۰ رسیده بود. اجراکننده‌های صف داخل درخواست‌های عادی وب راه می‌افتادند و آنالیتیکس WC Admin مدام ایمپورت‌هایی زمان‌بندی می‌کرد که هیچ‌کس نگاهشان نمی‌کرد. برای کارکنان، این یعنی داشبوردی که بی‌قاعده گیر می‌کند. کار پس‌زمینه داشت با آدم‌هایی رقابت می‌کرد که فروشگاه را می‌گرداندند.

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

  • یک فایل واحد، mu-admin-as-core.php، به‌جای تنظیمات Action Scheduler و سرعت ادمین که قبلاً در پیکربندی‌های قدیمی پخش بودند.
  • محدودیت‌های اجراکننده‌ی صف با فیلترهای هسته: دسته‌ی ۱۰تایی، یک دسته‌ی هم‌زمان، سقف زمانی ۲۰ ثانیه و نگهداری ۷ روزه‌ی اکشن‌های تمام‌شده.
  • اجراکننده‌ی ناهم‌زمان خاموش شد و اجراکننده‌ی صف روی درخواست وب، هر جا DISABLE_WP_CRON تعریف شده باشد، غیرفعال. جاب‌ها فقط از کرون سرور اجرا می‌شوند.
  • یک پاک‌سازی روزانه که اکشن‌های جامانده‌ی WC Admin مثل wc_admin_daily و wc_admin_import_orders را از زمان‌بندی درمی‌آورد.
  • سبک‌سازی سمت ادمین: heartbeat به ۶۰ ثانیه، و بیرون از ویرایشگر اصلاً ثبت نمی‌شود؛ فهرست محصول و سفارش ۲۰ ردیف؛ ستون‌های سنگین تاکسونومی از جدول محصولات حذف.

رویکرد فنی

  • همه‌چیز روی فیلترهای مستند سوار است، مثل action_scheduler_queue_runner_batch_size و action_scheduler_retention_period. هیچ کدی از هسته یا افزونه دست نخورده.
  • فیلتر woocommerce_admin_disabled کل آنالیتیکس React را خاموش می‌کند؛ منبع اصلی کار زمان‌بندی‌شده‌ای که هیچ‌وقت استفاده‌اش نمی‌کردیم همین بود.
  • پاس خارج‌کردن از زمان‌بندی با یک site transient مهار شده تا حداکثر روزی یک بار اجرا شود، نه در هر درخواست.
  • اعداد تنظیم، ثابت‌های کلاس A2_Admin_AS_Core هستند و بالای فایل می‌آیند. تغییر هر محدودیت یک خط است و از مسیر گیت بالا می‌رود.

نتیجه و شواهد

صف معلق بعد از جاافتادن تنظیم‌ها و پاک‌سازی از حدود ۳۸٬۰۰۰ اکشن به ۴٬۹۰۰ رسید؛ ۸۷ درصد کاهش، و همان‌جا هم ماند. صفحات ادمین دیگر پشت دسته‌های پس‌زمینه معطل نمی‌شوند.

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

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

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

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

خلاصه_اجرایی {
  پروژه: "Action Scheduler Core"
  فایل: "mu-plugins/mu-admin-as-core.php (یک فایل واحد)"
  قبل: "حدود ۳۸٬۰۰۰ اکشن معلق"
  بعد: "حدود ۴٬۹۰۰ و پایدار (۸۷٪ کاهش)"
  محدودیت_صف: "دسته‌ی ۱۰تایی، ۱ دسته‌ی هم‌زمان،
                سقف ۲۰ ثانیه، نگهداری ۷ روز"
  اجراکننده‌ها: "ناهم‌زمان خاموش؛ اجراکننده‌ی وب
                 وقتی DISABLE_WP_CRON تعریف شده غیرفعال"
  اجرا: "فقط کرون سرور، هیچ‌وقت داخل درخواست صفحه"
  پاک‌سازی: "درآوردن روزانه‌ی اکشن‌های جامانده‌ی WC Admin"
}

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

کاری که اینجا انجام شد پیکربندی بود نه کدنویسی: اندازه‌ی دسته، هم‌زمانی، سقف زمان، مدت نگهداری، و بردن اجرا به کرون سرور. کل مهارت این است که بدانی کدام فیلتر را باید ست کنی.

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