دوره آموزشی صف وظیفه (صف کار) 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) روی سرورها، میتواند دید مناسبی در استفاده از صف وظایف (صف کارها) ایجاد نماید.

پیشنیاز این دوره آشنایی متوسط با زبان برنامه نویسی Python است. همچنین ملاحظه دوره آموزشی نرم افزار صف بندی (کارگزار) پیام RabbitMQ هم میتواند مفید باشد.

تهیه و مشاهده دوره آموزش Celery

آموزش نرم افزار صف بندی پیام RabbitMQ (کارگزار پیام Message broker)

یکی از مشکلات سازمان هایی که اپلیکیشن هایی با فناوری ها و سیستم عامل های متفاوت دارند اینست که چطور میتوان این سرورها را به هم متصل کرد؟ یک راه اینست که اپلیکیشن ها بتوانند با هم پیام رد و بدل کنند. اما اگر سرعت تولیدکننده (producer) پیام و مصرف کننده (consumer) پیام با هم یکسان نباشد ( برای مثال گیرنده برای ارسال ایمیل، فکس، پردازش فایل ها، تولید گزارش خروجی و … نیاز به زمان پردازش نسبتا زیادی داشته باشد) و یا اگر گیرنده به هر دلیل آماده دریافت و پردازش پیام نباشد، در اینصورت برای اینکه پیام ها دور ریخته نشود، مجبوریم برای سرور گیرنده از یک صف استفاده کنیم. این صف باید بتواند پیام ها را از تولید کننده تحویل بگیرد و هنگام آمادگی مصرف کننده، به ترتیب پیام ها را به آن تحویل دهد.

RabbitMQ یکی از نرم افزارهای شناخته شده برای صف بندی پیام (Message Queueing) است که به آن Message Broker ( کارگزار پیام ) نیز گفته میشود. این نرم افزار پروتکل AMQP را بطور کامل پیاده سازی کرده و بدین ترتیب فرمت مشترکی برای پیام رسانی بین سیستم های مختلف بوجود آورده است.

نرم افزار RabbitMQ نرم افزاری Open Source است که با زبان Erlang نوشته شده و امکان اتصال به آن از تمام زبان های برنامه نویسی مانند: java، php، python، .net، javascript، Go و … وجود دارد.

در این آموزش پس از نصب نرم افزار RabbitMQ، با کمک زبان برنامه نویسی python به ربیت ام کیو متصل میشویم و صف هایی را به کمک آن ایجاد و مدیریت میکنیم. با شروع از مثال های مقدماتی، به بحث هایی مثل work queues، Pub/Sup Pattern و RPC Pattern خواهیم پرداخت. در ادامه به توضیح Exchange و کارکرد آن پرداخته و انواع آن مثل Fanout، Direct و Topic را بطور عملی بررسی خواهیم کرد. در انتها با اشاره به چگونگی فعال کردن افزونه ها، Management Plugin را فعال خواهیم کرد و با کمک آن به کنترل و پایش سرور RabbitMQ اقدام میکنیم.

این آموزش برای متخصصان ITو کامپیوتر، بویژه علاقه مندان به برنامه نویسی میتواند دید مناسبی در استفاده از نرم افزارهای ایجاد و مدیریت صف ها (کارگزار پیام) ایجاد نماید.

تهیه و دانلود آموزش نرم افزار RabbitMQ

دوره یادگیری فریمورک وب جنگو Django – قسمت ۳ (آموزش مراحل Deploy جنگو)

این دوره آموزشی، قسمت سوم و آخر از مجموعه آموزش های پروژه محور فریمورک وب جنگو است. در این دوره با ادامه بحث قسمت ۱ و ۲، در حال تکمیل یادگیری جنگو در قالب پیاده سازی و Deploy کردن پروژه ساخت یک اتاق گفتگو (Forum) به همراه کلیه بخش ها و امکانات مورد نیاز آن هستیم.

در قسمت ۱ این دوره آموزشی، از نصب و آماده سازی محیط توسعه جنگو با کدنویسی در محیط VSCode شروع کردیم و به معماری MVT (Model، View، Template) و مبحث  URL Routing پرداختیم. همچنین با ایجاد فرم ها و پردازش و اعتبارسنجی آنها و نوشتن همزمان Test های مورد نیاز، با نحوه توسعه اصولی پروژه ها آشنا شدیم.

در قسمت ۲، به ادامه قسمت ۱ و ایجاد سیستم احراز هویت (Authentication) که شامل صفحه SignUp، Login، Logout، Forgot/Reset Password و Change Password است پرداختیم. همچنین چگونگی محدود کردن کاربران از دسترسی به برخی view ها (Login Required) به تفصیل بیان شد.

در طول پروژه، برای زیبایی ظاهری صفحات نیز از کتابخانه bootstrap استفاده نمودیم.

در این قسمت (قسمت ۳) که قسمت پایانی این مجموعه آموزش است برای تکمیل نهایی پروژه از Class-Based View ها استفاده خواهیم کرد تا بتوانیم سادگی و قابلیت استفاده مجدد را فراهم کنیم. سپس به GCBV (Generic Class-Based View) ها خواهیم پرداخت و با کمک آنها view های قبلی را Refactor میکنیم.

در ادامه با decorator ها در GCBV ها کار میکنیم و همچنین برای صفحاتی که نیاز به صفحه بندی دارند Pagination قرار میدهیم. افزودن یک Markdown Editor و استفاده از پکیج Humanize و نیز کار با Session ها تکمیل کننده نهایی قابلیت های سایت خواهد بود.

بخش قابل توجهی از این قسمت به موضوع مهم Deploy کردن اپلیکیشن روی سرور پرداخته شده است. برای این کار با مرور اهمیت و کاربرد Git و Github بطور عملی با این سیستم های کنترل ورژن (Version Control System) کار خواهیم کرد تا با کمک مخزن (Repository) گیت هاب، کدهای پروژه را مدیریت کرده و پروژه را از کامپیوتر شخصی به سرور منتقل کنیم.

پس از آن به انتقال Setting های پروژه، مبحث Dependency ها و انتقال کتابخانه های مورد نیاز خواهیم پرداخت.

سپس با Nginx، Gunicorn و Supervisor و همچنین دیتابیس PostgrSQL آشنا خواهیم شد و بطور عملی آنها را روی سرور Linux Ubuntu به همراه Python3 و VirtualEnv نصب خواهیم کرد.

در انتها با پیکربندی gunicorn، Supervisor و Nginx روی سرور لینوکس اوبونتو و همچنین تنظیمات سرویس ارسال Email، کار Deployment پروژه را به اتمام میرسانیم.

این دوره میتواند برای برنامه نویسان وب به ویژه علاقه مندان به زبان پایتون برای استفاده از این فریمورک در توسعه وبسایت های داینامیک و Deploy کردن آن روی سرور دید مناسبی ایجاد نماید.

تهیه و دانلود قسمت سوم دوره آموزش جنگو