سیستمهای Publish-Subscribe
الگوی Publish-Subscribe: Topic و Consumer Group؛ Event Streaming و کاربردهای واقعی مثل News Feed
Pub-Sub چیست؟
در صف معمولی، پیام به «یک» مصرفکننده میرسد. در Publish-Subscribe، ناشر پیام را به «Topic» میفرستد و همه مشترکین نسخه خودشان را میگیرند:
ناشر: «سفارش جدید!» → Topic: orders
├→ سرویس ایمیل (نسخه ۱)
├→ سرویس انبار (نسخه ۲)
└→ سرویس تحلیل (نسخه ۳)
ناشر هیچکدام را نمیشناسد — جداسازی کامل!
مفاهیم کلیدی Kafka
- Topic: دسته پیامها (مثل کانال)
- Partition: تقسیم Topic برای موازیسازی — ترتیب در هر Partition تضمینی
- Consumer Group: گروهی که Partitionها را بین خود تقسیم میکنند (تقسیم کار!)
- Offset: موقعیت مصرف هر Consumer — «تا کجا خواندی؟»
- Replay: Offset را عقب ببر → پیامهای قدیمی را دوباره پردازش!
صف در برابر Pub-Sub
| ویژگی | Queue | Pub-Sub |
|---|---|---|
| گیرنده | یک Consumer | همه مشترکین |
| کاربرد | تقسیم کار (Task) | اطلاعرسانی رویداد |
| مثال | پردازش عکس | «سفارش ثبت شد» → همه سرویسها |
کاربردهای واقعی
- News Feed: پست جدید → Topic → Fan-out به تایملاین فالوورها
- میکروسرویس: رویداد «کاربر ثبتنام کرد» → ایمیل، پیامک، تحلیل، CRM
- Event Sourcing: کل وضعیت سیستم = دنباله رویدادها (replay = بازسازی!)
- ETL و تحلیل: رویدادها → Kafka → Data Lake → تحلیل
- IoT: سنسورها → Topic → پردازش و هشدار
Consumer Group — تقسیم هوشمند
Topic با ۴ Partition + Group با ۴ Consumer = هر کدام یک Partition (موازی کامل!). Consumer جدید بیاید؟ بازتقسیم (Rebalance).
نکته: «Fan-out» تایملاین (مبحث مطالعه موردی) دقیقاً Pub-Sub است: پست سلبریتی → Topic → هزاران کارگر، تایملاین فالوورها را بهروز میکنند!
جمعبندی
- Pub-Sub: یک رویداد → همه مشترکین (نسخه مستقل)
- Kafka: Topic + Partition + Offset + Replay
- Queue برای کار، Pub-Sub برای رویداد
- پایه: Feed، میکروسرویس، Event Sourcing
این مبحث بخشی از دوره آموزش کامل طراحی سیستم (System Design) است.