آموزش صف وظیفه / صف کار Celery

احسان جوانمرد
احسان جوانمرد
برخی کارها را نمیتوان روی کلاینت انجام داد، چون یا نیاز به پردازش سنگینی دارد، یا نیاز به پرس و جوهایی از دیتابیس ها دارد و یا ه ...
برخی کارها را نمیتوان روی کلاینت انجام داد، چون یا نیاز به پردازش سنگینی دارد، یا نیاز به پرس و جوهایی از دیتابیس ها دارد و یا هر گونه عملیاتی که لازمست از طریق فراخوانی دیگر سرور ها انجام پذیرد. مثلا خروجی گزارشی که باید از داده های چندین دیتابیس تهیه شود و یا یک پردازش سنگین روی داده های بزرگ و یا عملیات روی صوت و تصویر. در حالت عادی کاربر مجبور است تا تکمیل شدن پردازش سرور صبر کند اما اگر این پردازش زمان نسبتا زیادی نیاز داشته باشد چه؟ آیا باید کاربر بصورت همگام (synchronous) منتظر بماند تا پردازش قبلی سرور به پایان برسد تا بتواند کار بعدی را ارجاع دهد؟ اگر سرور توانایی اجرای تعداد درخواست های محدودی از کاربران را داشته باشد چطور؟ بقیه کاربران چگونه میتوانند کار جدیدی را ارسال کنند؟
به همین دلایل نیاز به وجود صفی (Queue) داریم که کارها را از کلاینت (ها) تحویل گرفته و هر زمان سرور (ها) آماده بودند کارها را برای آنها تقسیم کند. یعنی Task (job) ها باید به منظور پردازش توسط worker ها صف بندی (queueing) شوند. صف همواره میتوانند کارها را از producer ها دریافت کنند و بسته به سناریوهای مختلف و نوع معماری پیاده سازی برای اجرا به consumer ها تحویل دهند. یعنی فرایند بصورت ناهمگام asynchronous بوده و نیاز نیست کلاینت ها تا پایان عملیات سرور منتظر بمانند.
Celery یک صف وظیفه ناهمگام است که بر اساس بهترین تجربیات و راه حل های مسائل سازمان ها ایجاد شده است. مزیت آن نیاز به Config ابتدایی کم و استفاده آسان است. سلری با زبان python و بصورت open source نوشته شده و اغلب زبان های برنامه نویسی مانند php، Ruby، java و ... میتوانند با آن کار کنند. همچنین فریمورک های وب پایتونی مثل Django، Flask، Web2py و ... نیز براحتی با آن یکپارچه میشوند.
Celery برای کار نیاز به یک کارگزار پیام (Message Broker) خارجی دارد تا بتواند صفی برای ارسال و دریافت پیام ها باشد. برای این کار اغلب از نرم افزار RabbitMQ استفاده میشود. ما هم در این آموزش پس از نصب RabbitMQ و Celery، به چگونگی برقراری ارتباط این دو خواهیم پرداخت و با ایجاد worker و task ها بصورت عملی چگونگی ارسال پیام ها را خواهیم دید. سپس به بحث خروجی worker ها میپردازیم تا با کمک backend result بتوانیم مقدار برگشتی worker ها را برای استفاده کلاینت ها فراهم کنیم. بحث بعدی مدیریت و monitor کردن celery با کمک ابزار Flower است که میتوان با کمک محیط گرافیکی وب، تاریخچه task ها، میزان پیشرفت، زمان شروع و اجرا و دیگر جزئیات را به همراه آمار و گراف مشاهده کنیم. در انتها هم به موضوع Configuration اشاره خواهیم داشت.
از آنجا که اینگونه ابزارها دارای feature ها و Config های متعدد و پیشرفته هستند که بر اساس معماری ها و سناریوهای مختلف قابل تغییر و پیاده سازی هستند لذا در این آموزش سعی شده تنها  موارد اصلی و پایه ای Celery بیان گردد.
این آموزش برای متخصصان  ITو کامپیوتر، بویژه علاقه مندان به پیاده سازی نرم افزارها (محیط production) روی سرورها، میتواند دید مناسبی در استفاده از صف وظایف (صف کارها) ایجاد نماید.

تهیه دوره کامل: https://faranesh.com/programming/1831...

همه توضیحات ...