Skip to content

Latest commit

 

History

History
324 lines (232 loc) · 19.7 KB

File metadata and controls

324 lines (232 loc) · 19.7 KB

؜مصاحبهٔ طراحی سیستم: طراحی واتس‌اپ | سامانه‌های Chat

این سند خلاصهٔ یک مصاحبهٔ طراحی سیستم است. ؜دیدن ویدئوی کامل توصیه می‌شود.


AI-Powered buttons

Teach Me: 5 Years Old | Beginner | Intermediate | Advanced | (reset auto redirect)

Learn Differently: Analogy | Storytelling | Cheatsheet | Mindmap | Flashcards | Practical Projects | Code Examples | Common Mistakes

Check Understanding: Generate Quiz | Interview Me | Refactor Challenge | Assessment Rubric | Next Steps

؜خلاصهٔ یک‌صفحه‌ای (۲–۳ دقیقه)

  • ؜؜صورت‌مسئله (یک‌خطی)؜: طراحی یک اپ چت به سبک WhatsApp با ۱:۱، گروه‌ها، پیام‌های media، رسیدهای sent/delivered/read و وضعیت online/last‑seen.

  • ؜؜دامنه؜

    • ؜؜در دامنه؜: ۱:۱؛ گروه؛ ماندگاری پیام و retry؛ رسیدهای ارسال/تحویل/خواندن؛ online/last‑seen؛ gateway؛ session routing؛ microservices؛ load balancing/retry؛ idempotency.
    • ؜؜خارج از دامنه؜: جزئیات auth؛ خط لولهٔ کامل image/video؛ جستجوی سراسری؛ analytics سنگین؛ رسیدهای گروهی به‌ازای تک‌نفر (گران).
  • ؜؜اولویت‌های غیرعملکردی؜: real‑time؛ مقیاس‌پذیری افقی؛ high availability؛ تخریبِ دلپذیر؛ هزینهٔ کم در gateway.

  • ؜؜قیود کلیدی؜: سقف اعضای گروه (~۲۰۰) برای کنترل fan‑out؛ نگهداشت موقت/دائمی پیام‌ها بسته به نیاز.

  • ؜؜معماری سطح‌بالا (متنی)؜

    1. ؜کلاینت موبایل ؜WebSocket؜ پایدار با ؜Gateway؜. ؜ 2. ؜Gatewayها ساده (dumb)؛ منطق را به سرویس‌ها می‌سپاریم.
    2. ؜؜Session Service؜ نگاشت user↔connection را نگه می‌دارد و مسیردهی می‌کند.
    3. ؜؜Group Service؜ نگاشت group→members؛ برای fan‑out توسط Session کوئری می‌شود.
    4. ؜؜Parser/Unparser؜: تبدیل JSON خارجی به RPC داخلی (مثلاً Thrift / بهتر: gRPC+Protobuf).
    5. ؜؜Message Store/Queue؜: پایداری پیام، retry و idempotency.
    6. ؜؜Last‑Seen/Presence؜: به‌روزرسانی و سرو وضعیت. ؜ 8. ؜Load balancer + service discovery/heartbeats.
  • ؜؜مبادلات کلیدی؜ ؜ - ؜WebSocket در برابر HTTP long‑polling. ؜ - ؜fan‑out لحظهٔ ارسال در برابر pull/batch. ؜ - ؜gateway ساده در برابر edge پر‌قابلیت.

    • ؜ذخیرهٔ صرفاً device در برابر server‑durable.
    • ؜رسیدهای دقیق در برابر حذف/ساده‌سازی.
  • ؜؜ریسک‌ها؜

    • ؜فشار حافظهٔ gateway به‌علت اتصالات زیاد.
    • ؜گروه‌های داغ و backpressure.
    • ؜تزریق state در gateway و تکرار.
    • ؜طوفانِ retry بدون idempotency.
    • ؜اولویت‌دهی بیش از حد به last‑seen در پیک‌ها.
  • ؜؜فلش‌کارت ۵ دقیقه‌ای؜

    • ؜؜س:؜ چرا WebSocket؟ ؜ج:؜ push دوطرفه با latency کم، بی‌نیاز از polling.
    • ؜؜س:؜ Session چه نگه می‌دارد؟ ؜ج:؜ user→gateway/connection برای routing.
    • ؜؜س:؜ عضویت گروه کجاست؟ ؜ج:؜ Group Service (جدا از Session).
    • ؜؜س:؜ سبک نگه‌داشتن gateway؟ ؜ج:؜ offload parsing/auth؛ state بیرون.
    • ؜؜س:؜ جلوگیری از SPOF؟ ؜ج:؜ replication + discovery + LB.
    • ؜؜س:؜ پیاده‌سازی receipts؟ ؜ج:؜ ACK از کلاینت؛ persist برای retry.
    • ؜؜س:؜ در پیک سال نو چه را سبک کنیم؟ ؜ج:؜ last‑seen/receipts؛ اولویت send+ACK.
    • ؜؜س:؜ مهار fan‑out گروه‌های بزرگ؟ ؜ج:؜ سقف عضو، batch/pull در افراط.
    • ؜؜س:؜ چرا idempotency؟ ؜ج:؜ تحمل retry و حذف duplicate.
    • ؜؜س:؜ consistent hashing کجا؟ ؜ج:؜ shard کردن groupId.
    • ؜؜س:؜ ارزش Parser/Unparser؟ ؜ج:؜ payload خارجی → RPC داخلی.
    • ؜؜س:؜ چرا نه long‑polling؟ ؜ج:؜ real‑time کافی نیست.

Ask AI: Executive Summary


؜برچسب‌های مصاحبه

  • ؜؜دامنه/صنعت؜: messaging، social‑media، collaboration
  • ؜؜الگوی محصول؜: realtime‑chat، notification، queue، rate‑limit
  • ؜؜نگرانی‌های سیستمی؜: high‑availability، low‑latency، throttling، backpressure، privacy
  • ؜؜فناوری/زیرساخت (ذکر شده)؜: microservices، websocket، thrift، rest (در عمل gRPC/Protobuf رایج‌تر است)

Ask AI: Interview Tags


؜فهم مسئله

  • ؜؜پرامپت اصلی؜: ساخت WhatsApp‑like chat با ۱:۱ و گروه، media، رسیدهای sent/delivered/read و online/last‑seen؛ تمرکز بر اولویت‌بندی.
  • ؜؜use‑caseها؜
    • ؜ارسال/دریافت ۱:۱ با رسیدها.
    • ؜ایجاد/عضویت گروه و fan‑out به همهٔ اعضا.
    • ؜نمایش online یا last‑seen.
    • ؜تحمل خطا با retry و durability در صورت نیاز.
  • ؜؜خارج از دامنه؜
    • ؜رسید تحویل/خواندن به‌ازای هر عضو گروه (هزینه‌بر).
    • ؜جزئیات کامل media pipeline. ؜ - ؜auth عمیق و اعلان‌های email/SMS.

Ask AI: Problem Understanding


؜نیازمندی‌ها و قیود

؜داده‌شده در ویدئو

  • ؜؜عملکردی؜
    • ؜چت ۱:۱ با رسیدها.
    • ؜گروه با سقف ~۲۰۰ عضو.
    • ؜وضعیت online/last‑seen.
    • ؜ماندگاری پیام و retry تا تحویل.
  • ؜؜غیرعملکردی؜ ؜ - ؜real‑time با ؜WebSocket؜.
    • ؜مقیاس افقی؛ حذف SPOF. ؜ - ؜gateway سبک؛ سرویس‌ها decoupled. ؜ - ؜graceful degradation در پیک‌ها.

؜فرضیات (محافظه‌کارانه)

  • ؜ذخیرهٔ server‑side در صورت الزامات؛ در غیر این صورت device‑only (حریم‌خصوصی/هزینه). ؜- ؜backoff نمایی در کلاینت؛ retry محدود در سرور + DLQ. ؜- ؜idempotency‑key روی send.

Ask AI: Requirements & Constraints


؜برآورد سرانگشتی

  • ؜در ویدئو داده نشده است. ؜(صرف‌نظر)

Ask AI: Estimation


؜معماری سطح‌بالا

  • ؜؜Clients؜: موبایل با ؜WebSocket؜ پایدار به ؜Gateway؜. ؜
  • ؜؜Gateways؜: خاتمهٔ TCP/WebSocket؛ منطق کم؛ فوروارد payload به Parser/Unparser؛ برای routing از Session می‌پرسد. ؜
  • ؜؜Parser/Unparser؜: تبدیل JSON/WebSocket به RPC داخلی (Thrift یا gRPC/Protobuf). ؜
  • ؜؜Session Service؜: روتر مرکزی؛ نگاشت user→connection؛ پرس‌وجو از Group برای fan‑out. ؜
  • ؜؜Group Service؜: نگهداشت group→members؛ شاردینگ با ؜consistent hashing؜ روی groupId. ؜
  • ؜؜Message Queue/Store؜: پایداری و retry + idempotency؛ ارسال فوری «sent» و پس از ACK «delivered». ؜
  • ؜؜Last‑Seen Service؜: ثبت activity کاربر؛ پاسخ به online/last‑seen. ؜
  • ؜؜Load Balancing & Discovery؜: LB در edge؛ heartbeats/discovery بین سرویس‌ها.

Ask AI: High-Level Architecture


؜زیرسیستم‌ها

؜۸.۱ Gateway

  • ؜نقش: نگهداری اتصال TCP/WebSocket؛ پذیرش frame؛ پرهیز از parsing/auth سنگین.
  • ؜مقیاس‌پذیری: افقی؛ بدون state (بجز جدول اتصال)؛ پشت LB.
  • ؜خطا: در فشار، کارهای غیرضروری (last‑seen/receipt) را رها کند.
  • ؜گلوگاه: حافظهٔ connection؛ CPU برای parsing.

Ask AI: Subsystem - ؜Gateway

؜۸.۲ Session Service

  • ؜نقش: مرجع user→box؛ مسیردهی ۱:۱ و گروه.
  • ؜مدل داده: userId -> connection(boxId)؛ گذرا، cache‑محور.
  • ؜سازگاری: eventual کافی است؛ heartbeat مکرر.
  • ؜تاب‌آوری: نمونه‌های تکرارشده؛ بدون SPOF.

Ask AI: Subsystem - ؜Session Service

؜۸.۳ Group Service

  • ؜نقش: groupId -> [memberUserIds].
  • ؜مقیاس: ؜consistent hashing؜ روی groupId؛ cache محلی. ؜- ؜fan‑out: Session اعضا را می‌گیرد و از طریق gatewayهای مربوط push می‌کند.
  • ؜محدودیت: سقف اندازهٔ گروه (~۲۰۰).

Ask AI: Subsystem - ؜Group Service

؜۸.۴ Parser/Unparser

  • ؜نقش: تبدیل JSON/HTTP/WebSocket به RPC داخلی؛ تکامل schema در یک لایهٔ متمرکز.
  • ؜نکته: gateway سبک می‌ماند؛ interfaceهای داخلی schema‑validated می‌شوند.

Ask AI: Subsystem - ؜Parser/Unparser

؜۸.۵ Messaging & Receipts

  • ؜جریان: Sender→Gateway→Session→ReceiverGateway→Receiver؛ سپس ACK؛ «delivered» با ACK و «read» هنگام باز شدن چت. ؜- ؜idempotency: با messageId یا client‑token برای حذف duplicate. ؜- ؜queue/retry: تضمین ارسال؛ retry با سقف و تاخیر؛ DLQ در خطاهای ماندگار.

Ask AI: Subsystem - ؜Messaging & Receipts

؜۸.۶ Last‑Seen/Presence

  • ؜نقش: ردگیری آخرین activity کاربر (user‑initiated)؛ online (زیر ۱۰–۱۵ثانیه) یا نمایش timestamp.
  • ؜نکتهٔ کلاینت: تفکیک درخواست‌های کاربر از سیستم تا polling پس‌زمینه وضعیت را تغییر ندهد.

Ask AI: Subsystem - ؜Last Seen


؜مبادلات و جایگزین‌ها

موضوع گزینه A گزینه B گرایش ویدئو منطق
server push WebSockets HTTP long‑polling WebSockets real‑time و دوطرفه در برابر polling دوره‌ای
منطق gateway gateway «ساده» edge پرقابلیت ساده صرفه‌جویی CPU/RAM به‌ازای اتصال
رسید گروهی per‑member حذف/جزئی حذف/جزئی هزینهٔ زیاد در گروه‌های بزرگ
مدل تحویل گروه fan‑out فوری pull/batching فوری (با سقف) latency کم برای chat
تبدیل payload Parser/Unparser (Thrift) parsing در gateway Parser/Unparser سبک‌سازی edge
مدل ذخیره device‑only server‑durable وابسته به نیاز حریم‌خصوصی/هزینه در برابر قابلیت اتکا

Ask AI: Trade-offs


؜پایداری، دسترس‌پذیری، کارایی

  • ؜؜Replication/بدون SPOF؜: چندنمونه‌ای برای Session/Group/Last‑Seen/Parser/Queue.
  • ؜؜Backpressure & Throttling؜: نرخ‌دهی و صف؛ رهاسازی کارهای غیرضروری هنگام پیک.
  • ؜؜Degradation؜: اولویت مسیر send+ACK نسبت به سیگنال‌های ثانویه.
  • ؜؜Retry؜: سمت سرور با idempotency‑key؛ شکست پس از N تلاش گزارش شود.

Ask AI: Reliability and Performance


؜امنیت و حریم خصوصی

  • ؜؜Auth؜: سرویس جداگانه؛ جزئیات بحث نشده.
  • ؜؜Privacy؜: چت‌های موقت (device‑only) ممکن؛ الزامات انطباق را بسنجید.

Ask AI: Security and Privacy


؜مشاهده‌پذیری

  • ؜به discovery/heartbeats اشاره شد؛ metrics/tracing مفصل مطرح نشد.

Ask AI: Observability


؜پرسش‌های پیگیری

  • ؜ذکر نشده است.

Ask AI: Follow-up Questions


؜پرسش‌های کاندید

  • ؜ذکر نشده است.

Ask AI: Candidate Questions


؜نکات کلیدی

  • ؜استفاده از ؜WebSocket؜ برای real‑time دوطرفه؛ پرهیز از long‑polling. ؜
  • ؜؜Gateway؜‌ها را ساده نگه دارید؛ منطق را به سرویس‌ها بدهید. ؜
  • ؜؜Session routing؜ مرکزی برای user→box. ؜
  • ؜؜Group Service؜ جدا و شارد با ؜consistent hashing؜. ؜
  • ؜؜Message queue؜ + ؜idempotency؜ برای تحویل مطمئن. ؜
  • ؜اولویت ؜send+ACK؜؛ سبک‌سازی ؜last‑seen/receipts؜ در پیک‌ها. ؜
  • ؜انتخاب بین ؜device‑only؜ و ؜server‑durable؜ براساس نیاز. ؜
  • ؜لایهٔ ؜Parser/Unparser؜ برای استانداردسازی RPC داخلی (gRPC/Protobuf متداول). ؜
  • ؜سقف اندازهٔ گروه برای fan‑out قابل پیش‌بینی.

Ask AI: Key Takeaways


؜واژه‌نامه

  • ؜؜WebSocket؜: کانال پایدار دوطرفه روی TCP. ؜
  • ؜؜Session Service؜: روترِ نگاشت user→connection. ؜
  • ؜؜Group Service؜: نگهدارندهٔ group→members. ؜
  • ؜؜Consistent Hashing؜: روش sharding با remap کم هنگام تغییر نود. ؜
  • ؜؜Idempotency؜: اجرای تکراری با اثر واحد. ؜
  • ؜؜Load Shedding؜: رهاسازی کار برای حفاظت از هستهٔ سیستم. ؜
  • ؜؜Parser/Unparser؜: مبدل payload خارجی به RPC داخلی. ؜
  • ؜؜ACK؜: تایید گیرنده برای receipts.

Ask AI: Glossary


؜برنامهٔ مطالعه (اختیاری)

  • ؜مرور: WebSocket vs SSE vs HTTP/2 push؛ retry/backoff؛ idempotency keys؛ consistent hashing؛ الگوهای fan‑out؛ discovery/heartbeats؛ استراتژی‌های graceful degradation. ؜
    • ؜نکته: TLS 1.3 توصیه می‌شود؛ قدیمی‌ترها منسوخ.

Ask AI: Study Plan


؜انتساب


؜دربارهٔ خلاصه‌کننده

من Ali Sol (توسعه‌دهندهٔ PHP) هستم: