Semua soal system design

Design WhatsApp

Deliver messages instantly with read receipts, presence, and ordering across a user's devices.

Prompt latihan

  1. Problem Statement, Functional Requirements, and Scale Assumptions

    Tentukan ruang lingkup sistem messaging terenkripsi end-to-end: messaging teks satu-ke-satu, messaging grup (hingga 256 anggota), status pengiriman pesan (terkirim, terkirim ke perangkat, read receipt), berbagi media (gambar, audio, dokumen), dan presence online/last-seen pengguna. Kecualikan secara eksplisit panggilan suara, panggilan video, WhatsApp Web (klien browser), WhatsApp Business API, dan broadcast list dari desain awal. Nyatakan asumsi skala awal (DAU, pesan per hari, distribusi ukuran pesan, fan-out pesan grup) sebelum mengusulkan komponen apa pun.

  2. Non-Functional Requirements

    Tentukan NFR utama: latensi pengiriman pesan untuk penerima online (target <500ms dari kirim hingga status delivered), durabilitas pesan (pesan terkirim tidak boleh hilang bahkan jika penerima offline selama berhari-hari, retensi hingga terkirim), enkripsi end-to-end (konten pesan tidak boleh dapat dibaca oleh server, Signal Protocol), akurasi status pengiriman (sent/delivered/read harus benar, tidak ada read receipt palsu), dan pengiriman offline (pesan diantrikan saat penerima offline dan dikirim saat mereka terhubung kembali).

  3. Quantitative Analysis

    Estimasikan QPS kirim pesan puncak (DAU × pesan per hari / 86400 × faktor puncak), storage pesan per hari (pesan teks × ukuran rata-rata + pesan media × ukuran media rata-rata), kedalaman antrian pesan offline (pesan per penerima × durasi offline maksimum), jumlah koneksi WebSocket saat puncak (pengguna aktif dengan koneksi persisten ke server chat), dan amplifikasi fan-out pesan grup (pesan grup × anggota rata-rata per grup = total operasi pengiriman). Turunkan rasio kunci: operasi pengiriman >> operasi kirim akibat fan-out grup.

  4. API Design

    Tentukan operasi API (atau pesan protokol) untuk mengirim pesan (1:1 dan grup), meng-acknowledge pengiriman ke penerima, mengirim read receipt, mengunggah media, mengunduh media, dan memperbarui presence (online/offline). Sertakan apakah ini endpoint REST atau pesan protokol WebSocket, struktur amplop pesan (message_id, sender, recipient, payload ciphertext, timestamp, message_type), dan pertimbangan idempotensi untuk kirim pesan (mencegah pengiriman duplikat saat retry).

  5. High-Level Design

    Usulkan komponen utama: server chat service (memelihara koneksi WebSocket dengan klien), message queue/broker (Kafka, mem-buffer pesan untuk pengiriman), message store (Cassandra, menyimpan pesan hingga terkirim; payload terenkripsi, tanpa plaintext), delivery service (mengonsumsi dari Kafka, mengirim ke server chat penerima, memperbarui status pengiriman), presence service (melacak status online/offline), media service (unggah S3 pre-signed + pengiriman CDN untuk file media), dan push notification service (APNs/FCM untuk pengguna offline). Telusuri pesan 1:1 dari pengirim melalui pengiriman dan read receipt.

  6. Additional High-Level Design Prompts

    Bahas tiga area lanjutan: (1) Penghapusan pesan, bagaimana 'delete for everyone' bekerja (pengirim meminta server menandai pesan sebagai dihapus; penerima online menerima event delete via WebSocket; penerima offline menerima event delete saat mereka terhubung kembali); (2) Privasi last seen dan status online, bagaimana pengguna dapat mengontrol visibilitasnya sendiri (sembunyikan last seen, sembunyikan indikator online) tanpa menyebabkan inkonsistensi bagi pihak lain; (3) Dukungan multi-perangkat, jika pengguna memiliki WhatsApp di ponsel dan laptop, bagaimana kedua perangkat menerima pesan yang sama (kunci per-perangkat di Signal Protocol; pengirim mengenkripsi sekali per perangkat penerima).

  7. Deep Dives

    Deep dive ke tiga area: (1) Enkripsi end-to-end dengan Signal Protocol, setiap pengguna memiliki pasangan identity key dan sekumpulan one-time pre-key; pengirim mengambil public key penerima dari key server dan melakukan pertukaran kunci Diffie-Hellman untuk menurunkan shared session key; pesan dienkripsi sisi-klien sebelum dikirim; server menerima dan menyimpan hanya ciphertext; rotasi kunci terjadi otomatis (algoritma Double Ratchet memperbarui kunci setiap pesan, memberikan forward secrecy); pesan grup: pengirim mengenkripsi group session key yang sama untuk setiap anggota (model sender key) alih-alih mengenkripsi pesan secara individual per penerima (menskala ke grup besar); (2) Pengiriman pesan offline, pesan ke penerima offline disimpan di Cassandra (message_id, recipient_id, encrypted_payload, ttl); saat penerima terhubung kembali, delivery service men-query pesan yang belum terkirim dan mengirim via WebSocket; pesan dihapus dari store setelah ACK pengiriman; retry saat gagal dengan exponential backoff; TTL: hapus pesan yang belum terkirim setelah 30 hari; (3) Manajemen koneksi WebSocket, setiap server chat memelihara N koneksi WebSocket; klien reconnect saat disconnect dengan exponential backoff; lapisan routing (Redis hash: user_id → chat_server_id) memetakan setiap pengguna ke server chat-nya saat ini; saat mengirim ke pengguna, delivery service men-query lapisan routing dan merutekan ke server yang benar; menangani migrasi saat server restart (klien reconnect ke server baru; lapisan routing diperbarui).

  8. Final Review Handoff Readiness

    Ringkas keputusan desain utama: cluster server WebSocket dengan lapisan routing, broker pesan Kafka untuk pemisahan pengiriman, message store offline Cassandra (TTL 30-hari), enkripsi E2E Signal Protocol (server tidak pernah menyimpan plaintext), model sender key untuk pesan grup, dan fallback push notification untuk pengguna offline. Soroti dua pertanyaan terbuka (pengiriman pesan grup pada >256 anggota, overhead enkripsi ulang sender key, dan migrasi sesi server WebSocket saat rolling deployment) dan usulkan rollout bertahap: messaging 1:1 dulu, lalu grup, lalu media, lalu presence dan read receipt.

Preview solusi

Desain WhatsApp, Solusi Referensi Cakupan Problem Sebuah platform messaging dengan end-to-end encryption yang mendukung one-to-one text messaging, group messaging (hingga 256 member), delivery status (receipt sent/delivered/read), berbagi media (gambar, audio, dokumen), dan presence pengguna (online/last seen). Di luar cakupan: panggilan voice/video, WhatsAp…

Lihat paket belajar di pricing