Semua soal system design

Design Comment System

Thread millions of comments under hot posts, keep reads fast, and stop spam from flooding the timeline.

Prompt latihan

  1. Problem Statement, Functional Requirements, and Scale Assumptions

    Tentukan ruang lingkup Comment System: komentar level-post dengan balasan berulir (threaded), reaksi (like), dan moderasi dasar (laporkan spam). Perjelas apa yang dihitung sebagai thread komentar (berapa level nesting yang didukung), apakah komentar melekat pada tipe konten generik atau hanya post, dan apakah komentar anonim termasuk dalam ruang lingkup. Nyatakan non-goal yang eksplisit: embed media kaya dalam komentar, penyuntingan kolaboratif real-time, dan pesan langsung. Tetapkan asumsi skala awal sebelum mengusulkan komponen.

  2. Non-Functional Requirements

    Pilih NFR yang sesuai untuk sistem komentar: beban kerja bersifat read-heavy (mengambil thread komentar pada post populer) sehingga latensi baca dan ketersediaan menjadi utama; pembuatan komentar bisa mentoleransi latensi sedikit lebih tinggi daripada baca; hitungan komentar bisa eventually consistent. Tangani ketahanan terhadap spam, sistem harus mencegah banjir komentar tanpa menurunkan jalur baca. Putuskan persyaratan konsistensi untuk urutan thread dan cursor paginasi.

  3. Quantitative Analysis

    Perkirakan angka-angka kunci: rata-rata komentar per post, distribusi kedalaman thread, total ukuran comment store per tahun, QPS baca untuk mengambil thread komentar post populer versus QPS tulis untuk komentar baru, ukuran working set cache untuk halaman komentar post yang panas, dan penyimpanan per komentar (ID, penulis, konten, timestamp, referensi induk). Kuantifikasi rasio baca/tulis dan jelaskan implikasinya bagi pilihan penyimpanan dan caching.

  4. API Design

    Definisikan operasi API komentar: buat komentar pada post (dengan parent_comment_id opsional untuk balasan), tampilkan komentar untuk post (paginasi, dengan threading, bagaimana Anda mengembalikan pohon dalam respons API datar?), sunting komentar (hanya pemilik), hapus komentar (soft delete vs. hard delete dan bagaimana pengaruhnya pada balasan anak), reaksi ke komentar, dan laporkan komentar sebagai spam. Sertakan bentuk request dan response, desain cursor paginasi, dan kasus error.

  5. High-Level Design

    Usulkan komponen utama: comment service (buat, tampilkan, sunting, hapus), comment store (relational atau document store untuk data berulir), lapisan cache untuk halaman komentar post yang panas, notification service (memberi tahu penulis komentar induk saat balasan diposting), dan spam filter (skoring konten sebelum disimpan). Deskripsikan jalur baca panas untuk mengambil thread komentar post populer: di mana caching diterapkan, data apa yang di-denormalisasi, dan bagaimana paginasi bekerja untuk thread yang dalam?

  6. Additional High-Level Design Prompts

    Perjelas tiga keputusan desain: (1) Fan-out notifikasi, saat pengguna memposting balasan, penulis komentar induk dan mungkin penulis post harus diberi tahu; pada volume berapa notifikasi langsung yang naif menjadi masalah fan-out, dan bagaimana Anda menangani post populer dengan ribuan komentator? (2) Peringkat dan pengurutan komentar, apakah komentar tampil secara kronologis, berdasarkan jumlah reaksi level-atas, atau jumlah balasan; bagaimana urutan pengurutan memengaruhi desain cursor paginasi? (3) Soft delete versus hard delete, saat komentar induk di-soft-delete, apa yang terjadi pada balasan anaknya yang terlihat di UI, dan bagaimana model penyimpanan Anda merepresentasikan ini?

  7. Deep Dives

    Selami tiga area: (1) Model penyimpanan pohon komentar berulir, bandingkan adjacency list (tiap baris menyimpan parent_id; tulis sederhana, baca rekursif), materialized path (tiap baris menyimpan string jalur leluhur seperti '1/4/7'; baca subtree cepat, pemindahan mahal), dan nested set (tiap baris menyimpan nilai rentang kiri/kanan; baca query rentang, penyisipan mahal), bahas kompleksitas query, biaya penyisipan, paginasi dalam subtree, dan penegakan batas kedalaman; (2) Pembaruan real-time, bandingkan push (WebSocket atau SSE untuk klien terhubung) versus poll (klien poll setiap N detik) untuk memberi tahu pengguna tentang komentar baru; bahas fan-out untuk post viral dengan ribuan penonton bersamaan dan penskalaan koneksi; (3) Penyaringan spam, rancang pipeline skoring konten otomatis (heuristik teks, deteksi tautan, rate limiting pembuatan komentar per pengguna dan per IP) yang memasok ambang: di bawah ambang auto-allow, di atas ambang auto-block atau rutekan ke antrean tinjauan manusia dengan prioritisasi.

  8. Final Review Handoff Readiness

    Rangkum desain end-to-end: model penyimpanan thread yang dipilih dan alasannya, strategi caching untuk halaman komentar post yang panas, mekanisme pembaruan real-time, pendekatan penyaringan spam, dan perilaku soft-delete. Identifikasi trade-off konsistensi (mis. eventual consistency untuk hitungan komentar dan reaksi). Sebutkan risiko terbuka terbesar (biaya migrasi model penyimpanan jika persyaratan kedalaman thread berubah, bottleneck fan-out untuk post viral, backlog antrean moderasi saat serangan spam) dan usulkan rencana peluncuran moderasi.

Preview solusi

Jalur referensi Solusi Comment System adalah materi belajar yang bersifat read-only. Gunakan untuk membandingkan desain Anda sendiri dengan sebuah jalur referensi yang ringkas sebelum memulai latihan atau setelah Anda menyelesaikan satu putaran. Gunakan model storage adjacency list dengan batas kedalaman (depth) maksimum 3 -- write yang sederhana, kompleksit…

Lihat paket belajar di pricing