Nâng CaoSystem Design iconSystem Design

Thiết kế News Feed (như Facebook/Twitter). Fanout strategies và caching? (Design a News Feed like Facebook/Twitter. Fanout strategies and caching?)

Requirements: user thấy posts từ người họ follow, realtime updates, pagination, ~500M users.

Core challenge: khi user A post, tất cả followers của A cần thấy post đó trong feed.

  • Fanout-on-write (Push model): immediately push vào feed cache của tất cả followers → feed read rất nhanh, nhưng write amplification lớn: user có 1M followers → 1M cache writes.
  • Fanout-on-read (Pull model): khi user load feed, query tất cả người họ follow, merge và sort → không có write overhead, nhưng read rất chậm và expensive.
  • Hybrid approach (Facebook/Twitter): fanout-on-write cho users thường (< N followers), fanout-on-read cho celebrities (> N followers); merge pre-computed feed + real-time pull từ celebrities.
  • Feed Storage: Redis sorted set với timestamp là score, post_id là member – ZREVRANGE để paginate; TTL để evict old feeds.
  • Post storage: separate service, fetch post content từ DB/cache khi render feed.
  • Ranking: chronological là đơn giản nhất; ML-based ranking (engagement prediction) phức tạp hơn nhưng giữ user lâu hơn.

Cursor-based pagination thay vì offset pagination để tránh missing/duplicate items khi feed thay đổi.

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

Mở danh sách System Design