مهدی نظری
مهدی نظری
خواندن ۲ دقیقه·۵ سال پیش

3 دقیقه با Celery



در مواقعی که ترافیک روی سرور زیاد باشد، برای کارهایی که نیاز به پاسخ­ دهی آنی ندارند، مانند پردازش تصویر یا خروجی پرس و جو­های پیچیده database، پاسخ دهی به کلاینت دچار وقفه خواهد شد. یکی از راه حل­ های این مشکل استفاده از task queue هایی مانند celery است. celery با استفاده از یک message broker نظیر redis یا RabbitMQ (از جمله message broker های شناخته شده برای صف بندی پیام یا message queueing)، task ها را در صف (ها) قرار می­ دهد (queueing) و به محض اینکه سرور قادر به پاسخگویی بود درخواست ها را به سمت سرور هدایت می­ کند.

سلری (Celery) با زبان python و بصورت open source نوشته شده است و زبان های برنامه نویسی مانند php، Ruby و java نیز می­توانند از آن بهره­مند شوند.

سلری یک task queue غیر همروند (asynchronous) است که بر اساس بهترین راه حل های مسائل سازمان ها ایجاد شده است و پروتکل AMQP را پیاده­ سازی می­کند. این پروتکل در مواقعی که سرعت تولید کننده (producer) و سرعت مصرف کننده (consumer) پیام یکسان نباشد، به منظور نگهداری پیام ها توسط یک یا چند صف (queue) کاربرد دارد. یکی از مهمترین مشکلات پروتکل AMQP پیچیدگی زیاد در پیکربندی و نگهداری آن در پروژ است. از آنجا که مراحل نصب celery، پیکربندی و استفاده از آن آسان است محبوبیت زیادی را در بین توسعه­ دهندگان کسب کرده است.

در حقیقت می ­توان celery را به عنوان تولید­کننده و مصرف­ کننده message­ های message broker در نظر گرفت. در celery کلاینت را producer و worker را consumer می­ نامند. یک task یا message متشکل از header و body است که message payload یا body شامل دیتایی است که به سمت مصرف کننده هدایت می شود.

اجزا و نحوه کارکرد Celery
اجزا و نحوه کارکرد Celery

در انتها به معرفی اجزای Celery و شرح وظیفه هرکدام می پردازیم:

تولیدکننده پیام (Producer):

یک Producer کاربر اپلیکیشنی است که پیام­ها را ارسال می­کند.

واسطه (Broker):

پیام ها را از Producer دریافت می­کند و آن­ها را به سمت Consumer هدایت می­ کند. Broker می­تواند شامل یک یا چند صف باشد.

تبادل (Exchange):

یک Producer پیام­ها را از طریق تبادل (Exchange) ارسال می ­کند. Exchange ها پیام­ ها را دریافت می­ کنند و آن­ها را در صف­ ها قرار می­ دهند.

صف (Queue):

یک بافر است که پیام­ها در آن دخیره می­شوند.

قید ها (Bindings):

قوانین هستند که exchange­ ها برای مسیریابی از آنها استفاده می­کنند.

کلیدهای مسیریابی (Routing Keys):

اتصال ممکن است یک Routing Keys اختیاری داشته باشد که exchange ازآن برای انتقال پیام به صف استفاده کند.

مصرف کننده پیام (Consumer):

یک Consumer اپلیکیشنی است که پیام­ ها را دریافت کرده و آن­ها را پردازش می­کند.

در این مقاله سعی کردم در حد آشنایی و به طور خلاصه به Celery بپردازم. برای مطاله بیشتر و نحوه پیاده سازی Celery در پروژه، به مستندات مراجعه کنید.

celery چیستآشنایی با celeryceleryسلریcelery در پایتون
یک دولوپر خسته که پایتون را دوست می دارد.
شاید از این پست‌ها خوشتان بیاید