صف پیام در ۵ دقیقه

تصور کنید یک فروشگاه آنلاین وجود دارد که هر بار مشتری سفارشی ثبت می‌کند، باید:

  • پرداخت پردازش شود.
  • موجودی به‌روزرسانی شود.
  • ایمیل تأیید ارسال شود.

انجام فوری همه این مراحل، به‌ویژه در زمان‌های پرترافیک، ممکن است تجربه مشتری را کند کند.

در این حالت، تعداد زیادی رویداد برنامه وجود دارد و نمی‌توانیم همه آن‌ها را به‌طور هم‌زمان پردازش کنیم.

معماری مثال

البته می‌توانیم سرورهایمان را برای پردازش این تعداد زیاد رویداد مقیاس‌دهی کنیم، اما اگر نیازی به پردازش فوری همه آن‌ها نباشد، بهتر است این رویدادها را در صف قرار دهیم و بعداً آن‌ها را مدیریت کنیم.

معماری پایه صف پیام

صف پیام، یک مؤلفه پایدار است که در حافظه ذخیره شده و از ارتباطات غیرهمزمان پشتیبانی می‌کند. این صف به‌عنوان یک بافر عمل کرده و درخواست‌های غیرهمزمان را توزیع می‌کند.

معماری پایه ساده است: سرویس‌های ورودی که تولیدکننده یا ناشر نامیده می‌شوند، پیام‌هایی ایجاد و به صف پیام ارسال می‌کنند. سایر سرویس‌ها که مصرف‌کننده یا مشترک نامیده می‌شوند، به صف متصل شده و اقداماتی را که در پیام‌ها تعریف شده انجام می‌دهند.

معماری صف پیام

در دنیای واقعی، ممکن است چندین برنامه به صف پیام ارسال کرده و چندین سرور نیز از آن پیام‌ها استفاده کنند.

معماری

بازگشت به مثال

در این مثال، به جای انجام فوری هر وظیفه، می‌توانید آن را به انتهای صف اضافه کنید. سپس از این صف، پیام‌ها به سرورها ارسال می‌شوند.

  • سفارش ثبت شد: جزئیات سفارش به‌عنوان یک پیام ثبت می‌شود.
  • پیام ارسال شد: پیام به صف اضافه می‌شود.
  • مصرف‌کننده‌ها پردازش می‌کنند: فرآیندهای جداگانه (مصرف‌کننده) پیام‌ها را از ابتدای صف می‌خوانند و وظایف را انجام می‌دهند.

مثال

همچنین، سرور تأیید می‌کند که یک پیام دریافت و پردازش شده و صف آن پیام را حذف می‌کند تا دوباره ارسال نشود.

تایید دریافت

مزایای استفاده از صف پیام

مزیت اصلی این است که این رویدادها از هم جدا می‌شوند و صف پیام به ما اجازه می‌دهد این رویدادها را به‌صورت غیرهمزمان پردازش کنیم. می‌توانیم آن‌ها را تا زمان آماده‌سازی برای پردازش در صف نگه داریم.

با استفاده از صف پیام، تولیدکننده می‌تواند پیام را به صف ارسال کند حتی اگر مصرف‌کننده در دسترس نباشد.

جداسازی مصرف‌کننده از تولیدکننده

همچنین مصرف‌کننده می‌تواند پیام‌ها را از صف بخواند حتی اگر تولیدکننده در دسترس نباشد.

جداسازی مصرف‌کننده از تولیدکننده

یکی دیگر از مزایای عالی دیگر آن پایایی است. اگر صف دچار خرابی شود، داده‌ها از دست نمی‌روند زیرا در دیسک ذخیره می‌شوند، نه در RAM.

پایایی صف پیام

اگر یک مصفر‌کننده در حین پردازش یک پیام دچار خرابی شود، مشکلی نیست! پیام همچنان در صف باقی می‌ماند و توسط مصرف‌کننده دیگری پردازش خواهد شد.

قابلیت اطمینان

صف پیام همچنین امکان مقیاس‌پذیری را فراهم می‌کند. اگر تعداد زیادی سفارش دریافت کنید، فقط طول صف بیشتر می‌شود. می‌توانید مصرف‌کننده‌های بیشتری اضافه کنید تا بار اضافی را مدیریت کنند، بدون اینکه بر عملکرد وب‌سایت تأثیر بگذارد.

انواع مختلف صف‌ها

چندین نوع صف پیام وجود دارد. رایج‌ترین آن‌ها عبارتند از:

  • FIFO (اول وارد، اول خارج): درست مانند یک صف معمولی، پیام‌ها به ترتیبی که وارد می‌شوند، پردازش می‌شوند. این برای مواردی مانند پردازش پرداخت اهمیت دارد.
  • صف‌های اولویت‌دار: ممکن است برخی پیام‌ها مهم‌تر از بقیه باشند. می‌توانید به آن‌ها اولویت دهید تا زودتر پردازش شوند.

انواع صف پیام

روش‌های Push در مقابل Pull

برخی صف‌ها منتظر می‌مانند تا مصرفت‌کننده پیام‌ها را درخواست کنند (صف‌های مبتنی بر Pull)، در حالی که دیگران پیام‌ها را به‌طور فعال به مصرف‌کننده ارسال می‌کنند (صف‌های مبتنی بر Push).

نوع دریافت پیام

مثال‌ها

در اینجا چند مثال محبوب از صف‌های پیام آورده شده است:

محصولات اصلی برای پیاده‌سازی صف پیام

  • RabbitMQ: یک صف چندمنظوره که برای موارد استفاده مختلف مناسب است.
  • Kafka: برای ظرفیت بالا و جریان داده‌های بلادرنگ طراحی شده است. برای مواردی مانند ثبت وقایع و معماری‌های مبتنی بر رویداد بسیار مناسب است.
  • Amazon SQS (Simple Queue Service): یک سرویس صف مبتنی بر ابر کاملاً مدیریت‌شده که توسط AWS ارائه می‌شود. این سرویس مقیاس‌پذیر و قابل اعتماد است و ویژگی‌هایی مانند صف‌های تأخیری و صف‌های پیام‌های معیوب ارائه می‌دهد.

©دوات با هدف دسترس‌پذیر کردن دانش انگلیسی در حوزه صنعت نرم‌افزار وجود آمده است. در این راستا از هوش مصنوعی برای ترجمه گلچینی از مقالات مطرح و معتبر استفاده می‌شود. با ما در تماس باشید و انتقادات و پیشنهادات خود را از طریق صفحه «تماس با ما» در میان بگذارید.