سلام ?
اگه یه مدت باشه که توی حوزه بکاند فعالیت میکنید یکی از اصطلاحاتی که احتمالا شنیدید Job Queue هستش، توی این مطلب میخوام در قالب یه مثال عملی کارش رو توضیح بدم ?
بیاید یه پروژه فروشگاهی رو فرض بکنیم که نیازه بعد از اینکه کاربر پرداختش رو انجام داد ما PDF رسید رو سمت سرور تولید بکنیم و در قالب یه لینک کوتاه برای کاربر SMS کنیم.
توی ابتدایی ترین حالت میایم و توی بخشی که پس از خرید کاربر فراخوانی میشه پیادهسازی های مربوط به ساخت PDF و ارسال SMS رو اضافه میکنیم.
حالا بعد از گذشت چند روز از زمانی که فیچر رو فرستادیم روی production کاربرا بهمون پیام میدن که فرآیند پرداخت خیلی کند شده و ما بعد از بررسیای که انجام میدیم متوجه میشیم که ساخت PDF و ارسال SMS داره 6 ثانیه کاربر رو معطل میکنه و این باعث کندی و نارضایتی کاربرامون شده.
یه سوال: آیا واقعا نیازه که همون لحظهای که کاربر خرید رو انجام داد ما PDF رو بسازیم و تا ساخته نشده کاربر رو معطل نگه داریم و بعدم برای ارسال SMS این روند رو تکرار کنیم؟ احتمالا نه.
بجاش میتونیم بیایم و یه صف (اگه نمیدونید صف توی برنامهنویسی به چه معنیه این مطلبم رو بخونید) از کارهایی که نیازه انجام بشن ولی الزامی نیست که کاربر رو بخاطرش معطل کنیم بسازیم و بعد از پرداخت کاربر صرفا یه کار دیگه به اون صف اضافه بکنیم.
حالا یه سری Worker وجود دارن اینجا که دارن این کارهایی که به صف اضافه شده رو میخونن و یکی یکی انجامشون میدن.
توی این فرآیند ما یه جادو استفاده نکردیم که اون فرآیند ساخت PDF و ارسال SMS رو سریعتر بکنه! ما صرفا کاری کردیم که اون زمان لازم برای انجام اینکار ها به response time کاربر اضافه نشه و توی پس زمینه بره جلو.
امیدوارم تونسته باشم یخورده از ابهامی که دارید کم کرده باشم.
محمد محمدعلیان | 1 فروردین 1401
کانال تلگرامم | لینکدینم