:Celery

:مزایا

  1. پر استفاده ترین کتابخانه پایتون برای به کار بردن برنامه ریزی و asyncronous tasks (وظایف غیر همزمان).
  2. متن باز و دارای ۱۵۸۰۰ ستاره و ۳۸۰۰ بار فورک در گیتهاب.
  3. ۴۰۴ شرکت از آن در (tech stack) پشته های فنی خود استفاده می کنند؛ شرکت هایی شامل Robinhood، Udemy و Accenture.
  4. یک سیستم توزیع شده انعطاف پذیر و قابل اعتماد برای پردازش مقادیر زیاد پیام ها.
  5. دارای API بسیار انعطاف پذیر (چندین backend نتیجه، قالب پیکربندی خوب، پشتیبانی workflow canvas (بوم گردش کار) )
  6. عدم مشکل کم آوردن حافظه به خاطر استفاده این محصول از دیسک به جای رم
  7. جامعه گسترده و متنوعی از کاربران و مشارکت کنندگان
  8. مناسب برای طراحی سیستم ورود و خروج شرکت ها
  9. جذبه زیاد در پشته های کوچک ، نصب آسان و تعداد وابستگی کم
  10. قابلیت فرستادن task ها از یک زبان به زبانی دیگر
  11. پشتیبانی subtask (امکان ایجاد task جدید در یک task موجود)

:معایب

  1. امکان دارد گاهی هنگ کند.
  2. برای کار های روان ممکن است جایگزین ساده تر یافت بشود.
  3. اگر یک task (وظیفه) ثبت نشود یا با شکست مواجه شود، نادید گرفته می شود و در صورت پیکربندی مجدد اگر آن هم شکست بخورد، همچنان نادید در نظر گرفته می شود.
  4. سختی در دیباگ کردن

:نتیجه گیری

پیشنهاد ما این است: زمانی که برای یادگیری آن می گذارید ارزشش را دارد به خاطر مزایای قوی که دارا می باشد.

:RQ (redis queue)

:مزایا

  1. دارای سادگی بیشتر از Celery. هرگز در آن احساس گیجی یا گم شدن نمی کنید.
  2. اگر یک task (وظیفه) با شکست مواجه شود، به یک صف جدا اختصاص داده می شود که بعدا امکان افزودن مجدد به صف اصلی وجود دارد.

:معایب

  1. به طور قطعی نمی تواند تضمین کند که حتما پیام شما ارسال شده اند یا خیر.
  2. در صورت داشتن تعداد پیام زیاد برای ارسال،‌ ممکن است به memory bottleneck (گلوگاه حافظه) برخورد کنید (این محصول از رم استفاده می کند). البته این مشکل برای وقتی است که از Redis به عنوان واسطه استفاده می کنیم. در این حالت دیگر حافظه پیامی قبول نمی کند.
  3. تنها بر روی سیستم هایی قابل اجرا است که دارای قابلیت fork (منشعب شدن) باشند.
  4. تنها زبان پایتون را پشتیبانی می کند.

:نتیجه گیری

اگر دنبال یک سیستم ساده با یادگیری آسان برای پیاده سازی صف های پیام و برنامه ریزی/زمان بندی می باشید، به نظر بهترین گزینه استفاده از این محصول است. فقط حواستان به احتمال پر شدن رم در صورت ترافیک زیاد باشد.

:RabbitMQ

:مزایا

  1. متن باز و دارای ۷۶۰۰ ستاره و ۲۸۰۰ بار فورک در گیتهاب.
  2. ۱۴۸۰ شرکت از آن در (tech stack) پشته های فنی خود استفاده می کنند؛ شرکت هایی شامل reddit، Robinhood و Stack.
  3. نصب آسان، با دوام، استفاده از پروتکل های استاندارد، سازگاری با فرمت جیسون، performance (کارایی) بالا
  4. قابلیت به کار بری بیش از ۱۰ میلیون پیام و به لحاظ تعداد صف بیش از ۲۰۰ عدد
  5. دارای plugin های بسیار برای بسیاری از کارهایی که لازم دارید.
  6. همواره دارای کاربرد بیشتر توسط افراد و شرکت ها نسبت به RQ داشته.
  7. کار کردن به خوبی با Spring
  8. کاهش دادن امکان شکست با استفاده از روش های زیر:
  • قویا پشتیبانی از ارتباطات معاملاتی میان client ها و broker
  • با دوام بودن صفوف به این صورت که ابتدا پیام ها در دیسک ذخیره می شوند و بعد به کلاینت ارسال می شوند. پس با قطعی سرور پیام ها از دست نمی روند.
  • node (گره) های آن می توانند خوشه بندی شوند، در آن صورتگره ها می توانند یک خوشه را رها کرده و بازیابی شوند و هم چنین پیام ها را می توان از هر broker (واسطه) انتشار داده یا دریافت کرد و نیز صف ها غالبا در دسترس و فعال خواهند بود.
  • وجود پلاگین های بسیار که قابلیت اعتماد را زیاد می کنند.

معایب:

  1. در تعداد زیادی از سیستم های سازمانی گنجانده نشده است.
  2. پیچیدگی در مشاهده پیام ها به طوری که باید همه را خارج کرد و دوباره به صف افزود (و پلاگین خیلی خوبی هم برای این کار وجود ندارد)
  3. مشکل در منقضی کردن صف تاخیر در صورت وجود تعداد پیام بیش از ۱ میلیون در آن که باعث استفاده بسیار از CPU و مموری شده و باعث می شود پیام جدید وارد صف های دیگر هم نشود.
  4. به لحاظ سرعت مقابل Apache Kafka و ZeroMQ پایین تر است.

چون به زبان Erlang تنها نوشته شده،‌دارای مشکلات زیر است:

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

نتیجه گیری:

به نظر جایگزین بهتری نسبت به RQ می باشد. نسبت به آن که خیلی پیشرفته تر است و در RQ جنبه سادگی خیلی بیشتر است.

:Kafka

:مزایا

  1. متن باز و دارای ۱۶۸۰۰ ستاره و ۸۹۰۰ بار فورک در گیتهاب.
  2. ۹۲۴ شرکت از آن در (tech stack) پشته های فنی خود استفاده می کنند؛ شرکت هایی شامل Spotify، Uber و Shopify.
  3. قابلیت اجرا برای مقادیر بزرگ داده به صورت همزمان (مثلا در LinkedIn در هر روز ۳۰۰ میلیارد رویداد کاربران)
  4. قابلیت عملیات به صورت real-time data pipeline
  5. throughput (توان عملیاتی) بالا و latency (تاخیر) کم
  6. مقاومت برابر شکست خوردن در گره ها در میان خوشه ها
  7. پیکربندی و قابلیت فهم آسان (مثلا نسبت به RabbitMQ)
  8. در حال توسعه فعال به گونه ای که از پشتیبانی Confluent و LinkedIn و بسیاری شرکت های دیگر که ممکن است از آن ها استفاده کنیم برخوردار است.
  9. باقی ماندن و دوام بالای داده ها
  10. قابلیت عملیات ورودی و خروجی (read and write) با concurrency (همزمانی) بالا
  11. قابلیت به کاربری batch مانند

:معایب

  1. borker ها و الگوی مصرف کننده باعث کاهش performance (کارایی) شده است.
  2. وجود محدودیت در تعداد topic (موضوع) اگر زیاد شوند.
  3. اگر بخشی در یک گره در شروع به تاخیر در مصرف یا انتشار بکند، آنگاه تمام بقیه ی بخش های آن گره شروع به تاخیر خواهند کرد.
  4. کاهش سرعت وقتی صف های یک خوشه افزایش می یابند.
  5. CLI admin tool بسیار اذیت کننده و نامگذاری های سخت برای پیکربندی ها به صورت گیج کننده
  6. طول کشیدن تنظیمات اولیه و زمان استقرار (به خصوص اگر پشتیبانی از Confluent نخریده باشید)
  7. کمبود راه حل های monitoring (نظارتی) تاکنون
  8. مشکل در تغییر دادن (ویرایش) پیام ها
  9. سختی در ورود به سیستم
  10. عدم پشتیبانی wildcard topic selection
  11. کاهش performance به موقع decompressing (رفع فشرده کردن) پیام های فشرده شده
  12. نداشتن بعضی پارادایم های پیام رسانی مانند request/reply (درخواست و پاسخ)، point-to-point queues (صف های نقطه به نقطه) و …
  13. روش نامعتدلانه در پاسخگویی به مصرف کننده ها در صف هایی مانند task queues (صف های وظایف) که task ها دارای مدت زمان متفاوت هستند

:نتیجه گیری

به لحاظ performance به نظر ابزار خوبی می آید ولی معایب خودش را هم دارد دیگر از جمله رابط کاربری و گاهی استفاده ی سخت و گیج کننده

:Airflow

:مزایا

  1. متن باز و دارای ۱۸۱۰۰ ستاره و ۷۰۰۰ بار فورک در گیتهاب.
  2. ۱۷۷ شرکت از آن در (tech stack) پشته های فنی خود استفاده می کنند؛ شرکت هایی شامل Slack، Airbnb و Robinhood.
  3. ارائه DAG که روابط میان همه چیز را نشان می دهد و وجود UI (رابط کاربری) عالی. این محصول بیش از یک جریان کار پیکربندی محور است.
  4. Dependency management (مدیریت وابستگی ها)
  5. متن باز به همراه اجتماع/ انجمن فعال و بزرگ
  6. وجود عملگرهای بسیار برای بسیاری از کارهایی که می خواهیم
  7. مبتنی بر قواعد functional (تابعی)
  8. Dynamic generating path (تولید مسیر به صورت پویا)
  9. وجود Time Scheduler (برنامه ریز زمان) به علاوه ی Command line trigger (ماشه خط فرمان)
  10. دارای مدل Master/Worker (به صورت خودکار task ها را توزیع می کند)
  11. در صورت وجود کارهای زیاد در زنجیره، مقیاس بندی می کند.

:معایب

  1. مدل پردازشی داده و نحوه کارکرد محصول سخت و نیازمند زمان برای فهم تازه وارد هاست. همچنین نوشتن test case (مورد آزمایشی) برای data pipelines (خطوط داده) که از داده های خام استفاده می کنند بسیار سخت می باشد.
  2. task های به درد نخور وقتی شکست خورده یا تلاش مجدد می شوند منجر به ایجاد داده تکراری یا خراب می شوند.
  3. تغییر فاصله های برنامه ها نیازمند تغییر نام DAG می باشد.
  4. در صورت استقرار دادن Airflow روی Docker، فرآیند CI/CD که داکر را راه اندازی مجدد می کند باعث از بین رفتن تمام فرآیند های در حال اجرا می شود.
  5. عدم پشتیبانی برای windows (البته با داکر تسهیل می شود)

:نتیجه گیری

دارای رابط کاربری جذاب ولی نحوه کاربرد سخت و وقت گیر

:منابع

What are some alternatives to Celery? – StackShare

Task Queues – Full Stack Python

Why we moved from Celery to RQ

Pros and cons to use Celery vs. RQ

We recently moved one of our services from Rq to Celery

What are disadvantages of RabbitMQ (Message Queues)? What if RabbitMQ fails? What happens to the messages?

Pros and Cons of RabbitMQ 2020 – TrustRadius

Pros and Cons of Apache Kafka 2020 – TrustRadius

Advantages and Disadvantages of Kafka

Apache Airflow Pros and Cons | IT Central Station

Apache Airflow Review: the good, the bad

  • Persian

About Nilva

No. 5
Orang Dead End
Abbas Sharghi Alley
Akbari Blv
Tehran, IRAN

T: +98 (0)915 077 3830
E: admin@nilva.ir