بالاخره Laravel مشکل قدیمی Job Spam رو تمیز حل کرد.
با Debounceable Queued Jobs دیگه Jobهای تکراری صف لاراول رو له نمیکنه!
این یکی از underratedترین فیچرهای جدید لاراول برای پروژههای High Traffic هست.
از بدترین سناریوهای توی سیستمهای Queue اینه که
یک Event یا Request پشتسرهم Trigger بشه و سرور شروع کنه به ساختن Jobهای تکراری.
مثلا کاربر داره داخل اپ تایپ میکنه، Auto Save هر 5 ثانیه اجرا میشه و هر Save هم یک Job میفرسته داخل Queue.
نتیجه:
دهها Job تکراری، فشار روی Redis و Workerها، مصرف CPU بیدلیل و کند شدن سیستم.
در حالی که اکثر اون Jobها اصلا لازم نیستن! چون فقط آخرین وضعیت دیتا اهمیت داره.
حالا دیگه توی لاراول اگر چند Job «مشابه» پشت سر هم Dispatch کنیم، Jobهای وسطی حذف و فقط آخرین Job رو اجرا میکنه.
یعنی صف تمیزتر، بدون نویز و Performance بهتر.
این قابلیت واقعا Game Changer محسوب میشه!
قبلا از ShouldBeUnique استفاده میکردیم. اما این روش یک مشکل داشت:
اگر Job اول هنوز در حال اجرا بود، آپدیتهای جدید نادیده گرفته میشدن
یعنی ممکن بود آخرین تغییرات اصلا Sync نشن.
@DevTwitter | <Ehsan Rezaei/>
Post #12119
9.45K

- ❤ 37
- 🔥 9
- 👎 3