صف پیام (Message Queue)

صف پیام: جدا کردن اجزا با Producer/Consumer؛ Kafka و RabbitMQ، الگوها و مزایای async

چرا صف پیام؟

مسئله کلاسیک: کاربر عکس آپلود می‌کند؛ پردازش (تغییر اندازه، فیلتر، تشخیص) ۵ ثانیه طول می‌کشد. هم‌زمان انجام دهیم؟ کاربر ۵ ثانیه منتظر + سرور زیر بار!

راه‌حل: پیام بگذار در صف و برو! کارگرها (Consumerها) بعداً پردازش می‌کنند:

Producer (وب‌سرور) → [صف پیام] → Consumer (پردازش عکس)
     سریع!              بافر         با سرعت خودش

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

مزیتتوضیح
جداسازی (Decoupling)تولیدکننده و مصرف‌کننده همدیگر را نمی‌شناسند!
جذب بار پیکسیل درخواست → صف می‌ماند → مصرف تدریجی
تضمین تحویلپیام گم نمی‌شود (Persistence + Ack)
مقیاس مستقلConsumer کم است؟ اضافه کن — Producer بی‌خبر!
خطایابیConsumer مرد؟ پیام در صف می‌ماند، برمی‌گردد

Kafka در برابر RabbitMQ

ویژگیKafkaRabbitMQ
مدلLog توزیع‌شده (append-only)صف کلاسیک + routing
حجممیلیون‌ها پیام/ثانیه ✓✓ده‌ها هزار ✓
نگهداری پیامروزها/همیشه (replay!)تا مصرف (حذف)
ترتیبتضمین در Partition ✓FIFO صف
کاربردEvent Streaming، Big Data، LogTask Queue، RPC async

الگوهای کلیدی

نکته مصاحبه: هر جا «عملیات سنگین» یا «پیک ناگهانی» یا «سرویس‌های مستقل» دیدید، صف پیام پیشنهاد دهید — و حتماً «Idempotency چون تحویل at-least-once است» را بگویید!

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل طراحی سیستم (System Design) است.

ابزارهای مرتبط