Lesson 32 / 32
Design a Ride-Sharing Matching System
Design a ride-sharing matcher using geohash or quadtree indexes and atomic assignment to handle surges.
Requirements
Drivers stream their location continuously; a rider requests a trip and should be matched with a nearby available driver within a few seconds; the system must handle a surge (concert ending) without collapsing.
Geospatial indexing
Divide the map into cells using geohashing or a quadtree, and keep an in-memory index of cell -> available drivers. A match query looks up the rider's cell and expanding rings around it instead of scanning every driver on Earth.
Air traffic control, not a phone book
You don't find a nearby driver by scanning a list of every driver's exact address, like a phone book. It's more like air traffic control watching a live radar grid — drivers constantly update their cell, and the matcher only looks at the handful of nearby blips.
Handle the race: two riders, one driver
Two match requests can target the same driver simultaneously. Use an atomic compare-and-set (or a per-driver lock) so exactly one request wins the driver and the other retries against the next-nearest candidate.
Final quiz 1 of 8
Final quiz
Quick check: Which is a non-functional requirement?
- Users can post a message
- Users can edit a profile
- p99 latency under 200ms
- Users can search orders
Answer
p99 latency under 200ms — Non-functional requirements describe quality: latency, availability, scale.
Final quiz 2 of 8
Final quiz
Quick check: Roughly what average QPS is 86.4M requests per day?
- 10
- 100
- 10,000
- 1,000
Answer
1,000 — A day has about 86,400 seconds, so 86.4M / 86,400 ≈ 1,000 QPS.
Final quiz 3 of 8
Final quiz
Quick check: What does cache-aside do on a cache miss?
- The app loads from the database and fills the cache
- The cache calls the database itself
- The request fails
- The database writes to the CDN
Answer
The app loads from the database and fills the cache — In cache-aside the application owns loading and populating the cache.
Final quiz 4 of 8
Final quiz
Quick check: Which problem does consistent hashing mainly solve?
- Slow TLS handshakes
- Massive key remapping when nodes change
- Duplicate messages
- SQL injection
Answer
Massive key remapping when nodes change — Only a small share of keys move when a node joins or leaves.
Final quiz 5 of 8
Final quiz
Quick check: Why do at-least-once consumers need to be idempotent?
- Messages are always lost
- Queues are encrypted
- Messages can be delivered more than once
- Ordering is guaranteed
Answer
Messages can be delivered more than once — Retries cause duplicates, so repeating work must be safe.
Final quiz 6 of 8
Final quiz
Quick check: In a network partition, a CP system will…
- Return stale data to everyone
- Ignore the partition
- Add more replicas automatically
- Reject some requests to stay consistent
Answer
Reject some requests to stay consistent — CP chooses consistency over availability during a partition.
Final quiz 7 of 8
Final quiz
Quick check: What does a circuit breaker do?
- Stops calling a failing dependency to prevent cascades
- Encrypts traffic
- Caches responses forever
- Shards the database
Answer
Stops calling a failing dependency to prevent cascades — It fails fast so one slow dependency does not take down callers.
Final quiz 8 of 8
Final quiz
Quick check: What should you do first in a design interview?
- Draw the database schema
- Clarify requirements, users and scale
- Pick a cloud provider
- List every technology
Answer
Clarify requirements, users and scale — Requirements and scale drive every later decision.