در مواقعی که ترافیک روی سرور زیاد باشد، برای کارهایی که نیاز به پاسخ دهی آنی ندارند، مانند پردازش تصویر یا خروجی پرس و جوهای پیچیده 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 و شرح وظیفه هرکدام می پردازیم:
تولیدکننده پیام (Producer):
یک Producer کاربر اپلیکیشنی است که پیامها را ارسال میکند.
واسطه (Broker):
پیام ها را از Producer دریافت میکند و آنها را به سمت Consumer هدایت می کند. Broker میتواند شامل یک یا چند صف باشد.
تبادل (Exchange):
یک Producer پیامها را از طریق تبادل (Exchange) ارسال می کند. Exchange ها پیام ها را دریافت می کنند و آنها را در صف ها قرار می دهند.
صف (Queue):
یک بافر است که پیامها در آن دخیره میشوند.
قید ها (Bindings):
قوانین هستند که exchange ها برای مسیریابی از آنها استفاده میکنند.
کلیدهای مسیریابی (Routing Keys):
اتصال ممکن است یک Routing Keys اختیاری داشته باشد که exchange ازآن برای انتقال پیام به صف استفاده کند.
مصرف کننده پیام (Consumer):
یک Consumer اپلیکیشنی است که پیام ها را دریافت کرده و آنها را پردازش میکند.
در این مقاله سعی کردم در حد آشنایی و به طور خلاصه به Celery بپردازم. برای مطاله بیشتر و نحوه پیاده سازی Celery در پروژه، به مستندات مراجعه کنید.