Nâng CaoSystem Design iconSystem Design

Thiết kế hệ thống Chat real-time (như WhatsApp/Slack). Làm thế nào để handle kết nối và tin nhắn? (Design a real-time chat system like WhatsApp/Slack. How to handle connections and messages?)

Requirements: real-time messaging, online/offline status, message history, 1-1 và group chat.

  • Connection layer: WebSocket là lựa chọn tốt hơn long polling vì bi-directional, persistent connection, low latency – mỗi client maintain một WebSocket connection đến chat server.
  • Cross-server routing: users kết nối đến different servers – cần pub/sub layer (Redis Pub/Sub hoặc Kafka): Server A nhận message cho User B đang connect đến Server B → publish lên Redis → Server B subscribe và push đến User B.
  • Message storage: Cassandra (HBase ở Facebook Messenger, Cassandra ở Discord) vì write-heavy, time-based access pattern. Schema: partition key là (conversation_id), clustering key là (timestamp, message_id).
  • Offline messages: nếu user offline khi nhận message, lưu vào DB; khi reconnect, fetch unread messages.
  • Status service: heart-beat mỗi 5s để track online status, lưu trong Redis với TTL.
  • Fanout cho group chat: fanout-on-write (push đến tất cả members) vs fanout-on-read (members pull khi cần); với group lớn, fanout-on-write tốn kém → giới hạn group size hoặc hybrid approach.

Xem toàn bộ System Design cùng filter theo level & chủ đề con.

Mở danh sách System Design