دوره Background Tasks در Asp.Net Core
دیگر کافی است! کاربران نباید زمان زیادی منتظر دریافت Response از WebApplication شما بمانند!
- با Background Task کاربران WebApplication شما ثانیههای زیادی منتظر Response نمیمانند.
- با Background Task سرعت WebApplication خود را چندبرابر افزایش دهید.
- Taskهای تکراری را طبق زمانبندی که برای آن مشخص کردهاید در پسزمینه WebApplication بهصورت خودکار اجرا میشوند
برنامهنویسان آماتور تمامی نیازهای اپلیکیشن را در درخواستهای که کاربر به WebApplication ارسال میکند انجام میدهند، اما در برنامههای مدرن بخشی از نیاز هر WebApplication را باید در پسزمینه انجام دهیم.
Background Task چیست؟
Background Task فرایندی است که در پشت صحنه و بدون دخالت کاربر انجام می شود. فرایند های مانند اطلاع رسانی ها، ثبت Log ، نظارت بر سیستم ... Backgroun Task بعد از ایجاد به صورت خودکار در پس زمینه و به صورت مستقل اجرا می شود.
چه نوع کارهایی را میتوانیم در Background Task انجام دهیم؟
هر کاری که به بیشتر از ۱ ثانیه زمان نیاز دارد برای تکمیل شدن باید در background Task انجام دهیم، البته بهشرط آن که نیازی به ارسال پاسخ در همان لحظه برای کاربر نداشته باشیم.
بهعنوانمثال در حالت عادی اعتبارسنجی دادههای که از طرف کاربر ارسال شده است را باید در همان لحظه برای کاربر ارسال کنیم و کاربر را مطلع سازیم که دادههای ارسالی معتبر نیستند.
در ادامه ۱۱ مورد از کارهایی که باید در background Task انجام شوند را معرفی میکنیم.
1- ارسال و دریافت پیامک
امروزه Sms به جزء جداییناپذیر Web Applicationها تبدیل شده است. زمانی که از سرویسهای ارسال و دریافت پیام کوتاه در WebApplication استفاده میکنیم ناخواسته یک تأخیر در Responseهایی که برای کاربر ارسال میشود را ایجاد کردهایم.
این تأخیر به این دلیل است که ما داریم یک وبسرویس خارج از WebApplication در بستر اینترنت استفاده میکنیم و همین میتواند باعث کندی استفاده از آن وبسرویس باشد.
با استفاده از Background Task میتوانیم Sms را در پسزمینه ارسال کنیم و کاربر مجبور نیست مدتزمان زیادی برای دریافت Response منتظر بماند.
اما در یک Web Application مدرن فقط ارسال و دریافت یک پیامک ساده مثل کد اعتبارسنجی، نداریم. ممکن است بخواهیم گزارشهایی برای دستهای از کاربران Sms کنیم. مثلاً هر هفته ساعت ۲۳ روز جمعه یک گزارش از فروش هفته جاری برای مدیران فروش ارسال کنیم و یا ۶ماهه اول سال آخرین چهارشنبه هر ماه بخواهیم یک Sms تبلیغاتی برای کاربران ارسال کنیم.
دیگر در این شرایط اگر از Background Taskها استفاده نکنیم قادر به توسعه و پیادهسازی همچنین فیچرهایی نداریم.
2- تماس تلفنی
در حال حاضر ما میتوانیم در اپلیکیشنهای خودمان با استفاده از سرویسهای که ارائه شده است قابلیت تماس تلفنی ایجاد نماییم.
همه ما بهخوبی میدانیم که برقراری یک تماس تلفنی میتواند چقدر زمانبر باشد، و از حوصله کاربر خارج است که در پشت یک اپلیکیشن قفل شده منتظر بماند برای تکمیل یک فرایند که شاید دهها ثانیه طول بکشد.
و شاید در اپلیکیشن خود طبق برنامه زمانبندی میخواهید هر هفته ساعت ۱۰ صبح روز شنبه با تعدادی از مشتریان تماس گرفته شود و یکصدای از قبل ضبط شده برای آنها پخش شود.
اگر در اپلیکیشن خود از سرویسهای تماس تلفنی استفاده میکنید حتماً باید با Background Taskها آشنایی داشته باشید که بتوانید یک Web Application مدرن طراحی و پیادهسازی نمایید.
3- ارسال ایمیل
ارسال ایمیل هم دقیقاً شرایط ارسال Sms را دارد و از بخشهای مختلفی از Web Application مورداستفاده قرار میگیرد یا حتی طبق برنامه زمانبندی شدهای ایمیلهایی برای کاربران ارسال میکنیم.
برای ارسال ایمیل هم قاعدتاً داریم از یک وبسرویس استفاده میکنیم و این هم میتوانید تأخیر در Application ایجاد کند.
مطمئنم تابهحال در Web Applicationهای خود فواید ارسال ایمیل را پیادهسازی کردهاید، و اگر ارسال ایمیل را در پسزمینه انجام ندادهاید، دردی که کاربران شما برای منتظر ماندن برای Response یک Request که در آن یک یا چند ایمیل هم ارسال شده است را بهخوبی درک میکنید.
با استفاده از background Task میتوانید برای همیشه این درد انتظار را از کاربران Web Application دور کنید و با ارائه سرعت بالاتر حس رضایت و خوشحالی را به آنها منتقل کنید.
4- Push Notification
با استفاده از Notification میتوانیم پیغامهایی برای کلاینتهای مختلف از سمت سرور ارسال نماییم. برای ارسال notification میتوانیم از سرویسهای third party که مخصوص Push Notification ارائه شدهاند استفاده کنیم و یا خودمان Push Notification را پیادهسازی کنیم.
درهرصورت ارسال Notification باید در پشتصحنه Web Application انجام شود.
5- Web Crawler
کار خزنده وب این است که url و یا urlهایی برای آن مشخص کنیم و برود اطلاعاتی که ما نیاز داریم را جمعآوری نمایید و بعد از پردازش در مکانی که برای آن مشخص میکنیم ذخیره نماید.
از نام خزنده وب میتوان حدس زد که چقدر کار زمانبری است، حتی اگر قرار باشد فقط یک url با دیتای حداقلی را به دست بیاورد.
اگر در Web Application خود از خزنده وب استفاده میکنیم حتماً انجام این فرایند را در پسزمینه Application انجام دهید.
6- استخراج دادهها
ممکن است بخواهید عملیاتهای مختلفی بر روی دیتاهای خود در Application انجام دهید که کار زمانبری باشد.
مثلاً فرض کنید به دلیل سرعت بسیار بالاتر دیتابیس Redis در درج اطلاعات جدید نسبت به SqlServer میخواهید دیتاهای ورودی به Application را در Redis ثبت کنید (برای این که بتوانید همزمان دادههای بیشتری را ذخیره نمایید) و سپس همان دادهها را از Redis به Sql Server منتقل نمایید.
انتقال این دادهها باید در Background Task انجام شود.
7- پردازشهای Big Data
امروزه کسبوکارهای اینترنتی با مفهومی به نام Big Data درگیر هستند. Big Data به دادههای بسیار زیادی که ساختاربندی شده یا نشدهاند گفته میشود. Big Data ممکن است حجم عظیمی از اطلاعات با تنوع بالایی داشته باشد که با سرعت بسیار زیادی در حال رشد است.
پردازش این اطلاعات میتواند در تصمیمگیری کسبوکار تأثیرات مثبتی بگذارد و باعث رشد کسبوکار شود. شاید در کسبوکاری که مسئول توسعه Applicationهای آن هستید مجبور به پردازشهای Big Data باشید، این نوع پردازشها را باید در Background Task انجام دهید.
8- کارهای که باید طبق برنامه زمانبندی اجرا شوند
فرض کنید کسبوکاری که درحالتوسعه Application آن هستید قصد دارد آخرین جمعه هر ماه محصولات وبسایت را تخفیف ویژه به فروش برساند.
و شما نیاز دارید چند روز قبل از آخرین جمعه هر ماه در Aeb Application بهصورت خودکار ایمیلها و smsها برای مشتریان وبسایت ارسال نمایید
• مثلاً ۳ روز مانده به آخرین جمعه هر ماه ایمیل برای همه مشتریان ارسال شود و آنها را از فروش ویژه آخر ماه باخبر سازد.
• یک روز مانده به آخرین جمعه هر ماه sms برای همه مشتریان ارسال شود.
• آخرین جمعه هر ماه تخفیفها بر روی سایت اعمال شود و بعد از فعالسازی sms و ایمیل برای همه کاربران ارسال شود.
• و در نهایت هم در ساعت ۲۳:۵۹:۵۹ آخرین جمعه هر ماه تخفیفها را از روی وبسایت بردارد.
برای انجام همچون فرایندهایی باید حتماً از Background Task و برنامه زمانبندی Cron استفاده نمایید.
9- پردازش تصویر
در Application خود کارهای مختلفی با تصاویر میتوانیم انجام دهیم. بهعنوانمثال اگر درحالتوسعه یک Application در حوزه حملونقل باشید نیاز دارید که از پردازش تصویر برای تشخیص پلاک خودرو استفاده نمایید و یا در Application دیگری نیاز به تشخیص چهره با پردازش تصویر دارید.
و یا حتی در سادهترین حالت آن فرض کنید در وبسایتی که طراحی کردهاید کاربر قرار است یک تصویر از خود برای پروفایل خود آپلود کند و حالا شما در اکشن آپلود میخواهید سه کارهای زیر را انجام دهید
• اندازه تصویر را تغییر دهید.
• با فشرد سازی تصویر آپلود شده حجم تصویر را تا 70% کاهش دهید.
• یک سایز ۵۰ * ۵۰ از تصویر اصلی برای thumbnail ایجاد کنید.
شاید انجام این عملیات زمانبر باشد، و اگر در background Task انجام نشود، کاربر مجبور است زمان زیادی منتظر انجام این عملیات شود. پس اگر از پردازش تصویر در application خود استفاده میکنید حتماً آن را در Background Task انجام دهید.
10- ایجاد فایلها در سمت سرور
گاهی نیاز داریم برای کاربران یک فایل از اطلاعات ایجاد کنیم، و یا میخواهیم گزارشی برای کاربر آماده کنیم که پردازش اطلاعات آن شاید بیش از ۱ دقیقه زمان ببرد.
بهمحض این که درخواست از سمت کاربر به backend رسید، نباید کاربر را منتظر آمادهشدن گزارش یا ایجاد فایل بگذارید. باید در همان لحظه Response را برای کاربر ارسال نمایید و در پسزمینه به آن اطلاع دهید که Task در حال انجام است و منظر بمانید، بهمحض آمادهشدن گزارش و یا ایجاد فایل از طریق Signalr و ... به کاربر آماده میدهیم که Task آماده شد و اطلاعات را در اختیار او قرار میدهیم.
با این کار حس بسیار خوبی در کاربر Application ایجاد کردهایم.
11- WebHooks
Webhook شبیه به ارسال notification است و زمانی که در اپلیکیشن خود از webhook استفاده میکنید باید در زمان رخداد یک رویداد اطلاعاتی را به یک url ارسال کنید که این عملیات هم میتواند زمانبر باشد و باید آن را در پشتصحنه Application انجام دهیم.
چطور میتوانیم Background Task ایجاد کنیم؟
1- Asp.Net Core
در Asp.Net Core نسخه 2.0 IHostedService برای اجرای Taskهای پسزمینه ارائه شد و در نسخههای بعدی امکانات دیگری هم اضافه شد که با استفاده از کلاس Timer در کنار این ویژگیها میتوانیم Background Task را در Asp.Net Core ایجاد کنیم
2- Hangfire
Hangfire ابزاری است که برای مدیریت و زمانبندی Jobها در DotNet ارائه شده است. استفاده از Hangfire پیچیدگی بالایی ندارد و قابلیت توسعه و نگهداری بالایی دارد که همین دلایل باعث شده است در پروژههای زیادی از این ابزار استفاده شود.
3- Quartz.NET
Quartz یک ابزار زمانبندی قوی است که برای زبان جاوا توسعه داده شده است و بعد از مدتی برای .Net هم با نام Quartz.Net ارائه شد.
استفاده از Quartz.Net نسبت به Hangfire پیچیدهتر است و توسعهپذیری کمتری دارد اما با اینحال در زمانبندیهای بسیار پیچیده بهتر عمل میکند.
در این دوره چه خواهید آموخت؟
در دوره آموزش background Task در Asp.Net Core شما با Background Taskها آشنا میشوید و یاد خواهید گرفت چطور میتوانید Taskهای خود را در پشتصحنه Application اجرا کنید.
فصل اول Background Task in .Net
بدون نیاز به هیچ ابزاری در Net. میتوانیم background Taskها را ایجاد و اجرا کنیم و در فصل اول این دوره به شما یاد خواهیم داد چطور درNet. تسکهای پسزمینه ایجاد کنید و در پشتصحنه Application آنها را اجرا کنید.
فصل دوم آموزش Hangfire
با وجود این که خود Net. به ما امکان ایجاد و اجرای تسکهای پسزمینه را میدهد، اما برای بهدستآوردن امکانات بیشتر میتوانیم از hangfire برای مدیریت و اجرای background Taskها استفاده کنیم.
در فصل دوم به آموزش کامل Hangfire میپردازیم و بعد از فصل دوم شما میتوانید background Taskهای مختلفی با hangfire ایجاد و اجرا کنید و نحوه Tracking انجام کارها را به شما آموزش میدهیم که بتوانید UX بهتری با پیگیری انجام کار و نمایش آن به کاربر ارائه دهید.
گاهی دیدن چند ساعت آموزش میتواند تأثیر قابلتوجهی در روند کاری ما ایجاد کند. قدرت واقعی یک برنامهنویس به دانشی است که دارد و هرچه این دانش بیشتر باشد و از دانش بتوانید بهخوبی استفاده نماید، قدرت برنامهنویس هم بیشتر میشود.
با شرکت در این دوره بهصورت کامل به background Taskها مسلط میشوید و قدرت شما برای انجام پروژههای بزرگتر و پیچیدهتر بیشتر میشود.