Design Twitter
Fan out tweets to millions of followers, and solve the celebrity problem that breaks the naive design.
Prompt latihan
Problem Statement, Functional Requirements, and Scale Assumptions
Tentukan ruang lingkup sistem feed media sosial: pengguna memposting konten teks bentuk-pendek (tweet), mengikuti pengguna lain, melihat home timeline kronologis atau terurut dari tweet akun yang diikuti, dan menerima notifikasi. Kecualikan secara eksplisit direct message, tab algoritmik trending topics, spaces (audio), infrastruktur iklan, dan logika akun terverifikasi dari desain awal. Nyatakan asumsi skala awal (pengguna terdaftar, DAU, tweet per hari, rasio baca per tulis) sebelum mengusulkan komponen apa pun.
Non-Functional Requirements
Tentukan NFR utama: latensi baca home timeline (target <200ms p99), ketersediaan tulis (mem-posting tweet harus berhasil bahkan saat degradasi layanan baca), eventual consistency dapat diterima untuk timeline (tweet baru mungkin butuh beberapa detik untuk muncul di feed follower), skala untuk akun selebritas (akun dengan jutaan follower memerlukan penanganan khusus), dan rasio baca:tulis (sistem ini sangat read-heavy, kira-kira 100:1).
Quantitative Analysis
Estimasikan QPS tulis tweet puncak (DAU × tweet per hari / 86400 × faktor puncak), QPS baca home timeline (DAU × tampilan timeline per hari × faktor puncak), storage untuk tweet (ukuran per tweet × tweet per hari × tahun retensi), dan amplifikasi fan-out untuk akun selebritas (follower selebritas × tweet per hari = amplifikasi tulis masif jika fan-out on write). Turunkan rasio baca:tulis dan gunakan untuk membenarkan strategi caching dan pra-komputasi.
API Design
Tentukan operasi API untuk mem-posting tweet, mengambil home timeline (paginasi berbasis cursor), mengikuti pengguna, dan mengambil tweet profil pengguna. Sertakan bentuk request/response untuk masing-masing, semantik cursor untuk paginasi timeline (bukan berbasis offset), pertimbangan rate limiting untuk endpoint posting, dan bentuk response untuk item timeline (konten tweet, penulis, jumlah like/retweet, timestamp).
High-Level Design
Usulkan komponen utama: tweet service (menulis tweet, mempersistensi ke tweet store), user graph service (follow/unfollow, adjacency list), timeline service (membaca timeline pra-komputasi dari cache), fan-out service (saat pembuatan tweet, mendorong ID tweet ke cache timeline follower), dan media service (gambar/video di-back CDN untuk lampiran tweet). Pilih antara fan-out on write (pra-komputasi timeline) vs. fan-out on read (merge feed saat query) dan jelaskan trade-off-nya. Bahas masalah akun selebritas (akun dengan jutaan follower).
Additional High-Level Design Prompts
Bahas tiga area lanjutan: (1) Jumlah like dan retweet, bagaimana memelihara jumlah like/retweet yang akurat untuk tweet pada skala besar tanpa row lock per-tweet (sharding counter, counter aproksimasi, write-behind cache); (2) Notifikasi, bagaimana mengirim notifikasi real-time (follower baru, like pada tweet) tanpa polling database pada setiap pemuatan home screen pengguna; (3) Pencarian, bagaimana pencarian tweet bekerja mengingat tweet tiba dengan velocity tinggi dan harus dapat dicari dalam hitungan detik setelah diposting.
Deep Dives
Deep dive ke tiga area: (1) Arsitektur fan-out, fan-out on write pra-komputasi cache timeline per-pengguna (latensi baca rendah, amplifikasi tulis tinggi untuk selebritas); fan-out on read merge feed saat query (biaya tulis rendah, latensi baca tinggi untuk pengguna yang mengikuti banyak akun); hybrid: fan-out on write untuk akun normal, fan-out on read untuk akun selebritas di atas ambang follower (mis. 1 juta follower); struktur cache timeline (sorted set dari ID tweet, diurutkan berdasarkan timestamp atau skor engagement); strategi eviction cache (LRU per pengguna, kedalaman timeline maks 800 entri); (2) Ranking timeline, bagaimana menyuntikkan feed terurut (probabilitas engagement ber-skor ML) alih-alih urutan kronologis murni; tantangan: ranking mahal per-request (perlu men-skor 800 tweet kandidat); pipeline pra-skor offline vs. re-ranking online saat baca; (3) Model data, tabel tweet (tweet_id, author_id, content, created_at, media_refs), user graph (adjacency list di Cassandra: follower_id, followed_id, ts), cache timeline (Redis sorted set per user_id: score=timestamp, member=tweet_id).
Final Review Handoff Readiness
Ringkas keputusan desain utama: strategi fan-out (hybrid on-write untuk akun normal, on-read untuk selebritas di atas ambang), struktur cache timeline, pendekatan ranking (kronologis atau ber-ranking ML), strategi counter engagement, dan pengiriman notifikasi. Soroti dua pertanyaan terbuka terbesar yang tersisa (ambang selebritas, jumlah follower berapa yang beralih dari on-write ke on-read, dan penentuan ukuran memori cache timeline) dan usulkan rollout bertahap: timeline kronologis dulu, lalu ranking ML berlapis.
Preview solusi
Merancang Twitter, Solusi Referensi Scope Problem Sebuah platform media sosial di mana pengguna memposting konten teks pendek (tweet, ≤280 karakter), mengikuti (follow) pengguna lain, dan melihat home timeline yang ranked atau kronologis berisi tweet dari akun yang di-follow. Notifikasi (like, follower baru) dikirim secara near-real-time. Di luar scope untuk…