Semua soal system design

Design Yelp

Search millions of businesses by location and rating with geospatial indexes and read-heavy caching.

Prompt latihan

  1. Problem Statement, Functional Requirements, and Scale Assumptions

    Tentukan ruang lingkup platform penemuan bisnis lokal: pengguna mencari bisnis (restoran, kafe, salon) berdasarkan lokasi dan kategori, melihat profil bisnis (nama, alamat, jam buka, foto, rating), membaca dan menulis ulasan (teks + rating bintang), dan melihat daftar hasil terdekat yang terurut. Kecualikan secara eksplisit tool manajemen bisnis untuk merchant (mengklaim listing, memperbarui jam buka), iklan/penempatan berbayar, pemesanan pengiriman, reservasi, dan messaging antara pengguna dan bisnis. Nyatakan asumsi skala awal: total bisnis terdaftar, pencarian aktif harian, ulasan ditulis per hari, dan rasio baca pencarian terhadap tulis ulasan.

  2. Non-Functional Requirements

    Tentukan NFR utama: latensi pencarian (pengguna mengharapkan hasil dalam 200ms, struktur data dan caching apa yang memungkinkan ini?), presisi geospasial (akurasi radius pencarian, tingkat false positive di batas berapa yang dapat diterima?), konsistensi tulis ulasan (ketika pengguna menulis ulasan, seberapa cepat ia harus muncul di rating bisnis dan di hasil pencarian?), dan trade-off ketersediaan vs. konsistensi (jika node review service gagal saat tulis, dapatkah diterima kehilangan ulasan atau harus durable?).

  3. Quantitative Analysis

    Estimasikan QPS pencarian puncak (DAU × pencarian per hari / 86400 × rasio puncak:rata-rata), tulis ulasan per detik, total storage bisnis (100 juta bisnis × ukuran profil rata-rata), dan total storage ulasan (10 ulasan per bisnis × ukuran ulasan rata-rata). Identifikasi operasi dominan: pencarian lokasi (QPS tinggi, query radius lat/lon) vs. tulis ulasan (QPS rendah). Estimasikan berapa persen hasil pencarian yang dapat disajikan dari cache.

  4. API Design

    Tentukan endpoint API untuk: mencari bisnis berdasarkan lokasi (lat/lon + radius) dan kategori atau kata kunci opsional (mengembalikan daftar terurut dengan cursor paginasi), mengambil profil bisnis (tampilan detail dengan jam buka, foto, rating agregat, jumlah ulasan), mendaftar ulasan untuk sebuah bisnis (terpaginasi, diurutkan berdasarkan keterkinian atau kegunaan), dan menulis ulasan (POST dengan rating bintang + teks, idempoten saat pengiriman ulang). Sertakan bagaimana koordinat geografis dilewatkan, bagaimana cursor paginasi bekerja untuk hasil terurut-lokasi, dan field apa yang dikembalikan response pencarian terurut (cukup untuk merender kartu hasil tanpa mengambil profil individual).

  5. High-Level Design

    Usulkan komponen utama: search service (menerima lat/lon + kategori, mengembalikan bisnis terurut), location index (struktur data geospasial yang memungkinkan pencarian radius, quadtree, geohash, atau PostGIS), business profile service (menyajikan halaman detail), review service (membaca dan menulis ulasan), dan rating aggregator (menghitung ulang rating bintang agregat dari tulis ulasan). Jelaskan alur data dari request pencarian lokasi pengguna hingga daftar terurut yang dikembalikan, dan bagaimana ulasan baru pada akhirnya memengaruhi rating agregat sebuah bisnis.

  6. Additional High-Level Design Prompts

    Bahas tiga area lanjutan: (1) Ranking pencarian, bagaimana hasil di-ranking di luar jarak (pembobotan rating bintang × jumlah ulasan, bias keterkinian, scoring relevansi kategori)? Bagaimana ini dihitung secara efisien tanpa men-skor ulang semua bisnis dalam radius pada setiap query? (2) Storage foto, bisnis dapat memiliki puluhan foto; bagaimana foto disimpan, diubah ukuran untuk thumbnail vs. tampilan-penuh, dan disajikan pada latensi rendah? (3) Deteksi spam dan ulasan palsu, pemilik bisnis dapat membuat akun palsu untuk meningkatkan atau menyerang rating pesaing; sinyal atau pipeline apa yang dapat mendeteksi dan memfilter pola ulasan mencurigakan sebelum memengaruhi rating agregat?

  7. Deep Dives

    Deep dive ke tiga area: (1) Indexing geospasial, quadtree: secara rekursif membagi bidang 2D menjadi kuadran; setiap leaf berisi bisnis dalam sel tersebut; mendukung query radius dengan menelusuri sel yang berpotongan dengan lingkaran query; mendukung penyisipan dinamis; geohash: mengkodekan lat/lon sebagai string base-32; sel terdekat berbagi prefix; query range pada prefix geohash mengambil bisnis terdekat; bekerja dengan indeks terurut apa pun (Postgres B-tree, Redis sorted set); bandingkan trade-off presisi vs. storage pada level zoom; PostGIS: SQL spasial penuh dengan ST_DWithin untuk query radius akurat; digunakan untuk kebenaran, bukan kecepatan mentah; (2) Update rating agregat, pendekatan naif: hitung ulang rata-rata dari semua ulasan pada setiap tulis (mahal pada 10 ribu ulasan); pendekatan efisien: simpan jumlah semua rating bintang dan jumlah ulasan secara terpisah; rata-rata baru = (current_sum + new_rating) / (current_count + 1); satu update baris per tulis ulasan; bagaimana menangani penghitungan ulang rating berantai saat ulasan dihapus atau diedit; (3) Invalidasi cache geospasial, meng-cache hasil pencarian lokasi (restoran teratas di pusat kota SF) dapat menjadi basi saat bisnis baru buka atau tutup; invalidasi berbasis-TTL (TTL 5-menit) vs. invalidasi berbasis-event (dorong ke cache saat update profil bisnis); mana yang benar untuk setiap use case?

  8. Final Review Handoff Readiness

    Ringkas keputusan desain utama: pilihan indeks geospasial (quadtree, geohash, atau PostGIS), pola update inkremental rating agregat (sum/count), strategi caching hasil pencarian dan TTL, pipeline CDN foto, dan pipeline deteksi spam ulasan. Soroti dua pertanyaan terbuka terbesar yang tersisa (tuning algoritma ranking, bagaimana membobot kesegaran vs. jumlah ulasan vs. rating bintang dalam skor relevansi, dan konsistensi update indeks geospasial, apa yang terjadi pada indeks lokasi jika sebuah bisnis pindah alamat) dan usulkan rollout bertahap: pencarian + browse dulu, lalu tulis ulasan, lalu tuning ranking, lalu deteksi spam.

Preview solusi

Solusi Referensi, Design Yelp Wawasan Inti Yelp pada dasarnya adalah sebuah geospatial search system (sistem pencarian geospasial). Tantangan desain utamanya adalah menemukan business secara efisien dalam jarak tertentu dari lokasi seorang user (radius search) di antara 100M+ business, dengan latency rendah (< 200ms). Segala hal lainnya, review, rating, foto…

Lihat paket belajar di pricing