محمد محمدعلیان
محمد محمدعلیان
خواندن ۲ دقیقه·۳ سال پیش

صف کارها (Job Qeueu) چیست؟

سلام ?
اگه یه مدت باشه که توی حوزه بک‌اند فعالیت می‌کنید یکی از اصطلاحاتی که احتمالا شنیدید Job Queue هستش، توی این مطلب می‌خوام در قالب یه مثال عملی کارش رو توضیح بدم ?

این عکس تزئینی می‌باشد
این عکس تزئینی می‌باشد

تعریف مشکل

بیاید یه پروژه فروشگاهی رو فرض بکنیم که نیازه بعد از اینکه کاربر پرداختش رو انجام داد ما PDF رسید رو سمت سرور تولید بکنیم و در قالب یه لینک کوتاه برای کاربر SMS کنیم.
توی ابتدایی ترین حالت میایم و توی بخشی که پس از خرید کاربر فراخوانی میشه پیاده‌سازی های مربوط به ساخت PDF و ارسال SMS رو اضافه می‌کنیم.
حالا بعد از گذشت چند روز از زمانی که فیچر رو فرستادیم روی production کاربرا بهمون پیام میدن که فرآیند پرداخت خیلی کند شده و ما بعد از بررسی‌ای که انجام میدیم متوجه می‌شیم که ساخت PDF و ارسال SMS داره 6 ثانیه کاربر رو معطل می‌کنه و این باعث کندی و نارضایتی کاربرامون شده.

راه حل

یه سوال: آیا واقعا نیازه که همون لحظه‌ای که کاربر خرید رو انجام داد ما PDF رو بسازیم و تا ساخته نشده کاربر رو معطل نگه داریم و بعدم برای ارسال SMS این روند رو تکرار کنیم؟ احتمالا نه.
بجاش می‌تونیم بیایم و یه صف (اگه نمی‌دونید صف توی برنامه‌نویسی به چه معنیه این مطلبم رو بخونید) از کارهایی که نیازه انجام بشن ولی الزامی نیست که کاربر رو بخاطرش معطل کنیم بسازیم و بعد از پرداخت کاربر صرفا یه کار دیگه به اون صف اضافه بکنیم.
حالا یه سری Worker وجود دارن اینجا که دارن این کارهایی که به صف اضافه شده رو می‌خونن و یکی یکی انجامشون میدن.

توی این فرآیند ما یه جادو استفاده نکردیم که اون فرآیند ساخت PDF و ارسال SMS رو سریع‌تر بکنه! ما صرفا کاری کردیم که اون زمان لازم برای انجام اینکار ها به response time کاربر اضافه نشه و توی پس زمینه بره جلو.

نمونه کد پیاده سازی Job Queue با Node.js و کتابخونه bull

https://gist.github.com/mhmda-83/ff5e5245bbed2801da0c02c6e1d671d8

امیدوارم تونسته باشم یخورده از ابهامی که دارید کم کرده باشم.
محمد محمدعلیان | 1 فروردین 1401
کانال تلگرامم | لینکدینم

backendبک‌اند
یه ممد 20 ساله که برنامه‌نویس بک-انده. لینکای من: https://redl.ink/Mohammadalian_1383
شاید از این پست‌ها خوشتان بیاید