طراحی News Feed و سیستم چت
دو مطالعه موردی پایانی: News Feed (Fan-out Push/Pull) و سیستم چت (WebSocket) + جمعبندی کل دوره
مطالعه ۱: News Feed
«تایملاین توییست/اینستاگرام را طراحی کنید» — مسئله قلب: پست جدید چطور به فالوورها برسد؟
رویکرد Pull (کشیدن)
هنگام باز کردن تایملاین: پستهای همه فالوورها را بگیر + مرتب کن
- ✓ ساده؛ نوشتن ارزان
- ✗ خواندن سنگین! (۱۰۰ فالو = ۱۰۰ کوئری!) — تایملاین کند
رویکرد Push (Fan-out on Write)
هنگام پستگذاری: به تایملاین (کش) همه فالوورها اضافه کن
پست جدید → صف پیام → Fan-out Workerها
↓
timeline:فالوور۱ ← پست
timeline:فالوور۲ ← پست
... (۱M فالوور = ۱M نوشتن!)
- ✓ خواندن فوری (تایملاین از قبل آماده!)
- ✗ نوشتن عظیم؛ سلبریتی = فاجعه!
راهحل هوشمند: Hybrid
- کاربران عادی: Push (فالوور کم)
- سلبریتیها: Pull! (پستهایشان هنگام خواندن merge میشود)
- بهترین هر دو دنیا — این پاسخ ارشد است!
مطالعه ۲: سیستم چت
چالشهای خاص:
- اتصال پایدار: HTTP معمولی = درخواست/پاسخ؛ چت = WebSocket (دوطرفه، همیشه باز!)
- اتصالسازها: سرویس Connection Handler سبک + سرویس منطق جدا
- پیامرسانی: صف/Kafka بین کاربران روی سرورهای مختلف
- آفلاین: پیام در صف/DB تا آنلاین شدن (Push Notification!)
- ترتیب و تحویل: ID پیام (Snowflake!) + ack + retry
کاربر A ←WebSocket→ Handler ۱ ←Queue→ Handler 2 ←WebSocket→ کاربر B
↓
Message Store (تاریخچه)
جمعبندی کل دوره
مسیر طیشده:
- مبانی: ویژگیها، تخمین، چارچوب مصاحبه
- مقیاس: LB، Reverse Proxy
- کش: LRU، الگوها، بحرانها
- دیتابیس: SQL/NoSQL، تکرار، شاردینگ، ایندکس
- توزیعشدگی: CAP، صف، Pub-Sub، میکروسرویس
- اجزا: CDN، Redis، Elasticsearch، S3، Rate Limiter
- الگوها: Snowflake، قفل، Consistent Hashing، Circuit Breaker
- مطالعات: URL Shortener، Feed، چت
پیام نهایی: System Design = زبان تریدآفها. هر ابزار این دوره یک «چرا» دارد — آن چرا را بلند بگویید، دیاگرام بکشید، اعداد تخمین بزنید. حالا شما مثل یک مهندس ارشد فکر میکنید!
گامهای بعدی
- مطالعه: Designing Data-Intensive Applications (کتاب مقدس!)
- تمرین: System Design Primer (GitHub) + ByteByteGo
- مصاحبههای ساختگی: با دوستان یا Pramp
- دورههای مرتبط: DSA، الگوریتمها، NLP لرنینگ سیتی
این مبحث بخشی از دوره آموزش کامل طراحی سیستم (System Design) است.