Design_uber
Chapter 48: Designing Uber
Section titled βChapter 48: Designing UberβReal-Time Ride Matching at Global Scale
Section titled βReal-Time Ride Matching at Global Scaleβ48.1 Uber Overview
Section titled β48.1 Uber OverviewβUber connects riders with drivers through a real-time marketplace, processing millions of rides daily across 10,000+ cities.
Uber by the Numbers =================
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β 130M+ monthly active users β β 6M+ driver partners β β 10,000+ cities globally β β 2B+ rides completed β β 10M+ ride requests per day at peak β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββRequirements Analysis
Section titled βRequirements Analysisβ| Requirement | Challenge | Solution |
|---|---|---|
| Real-time matching | < 10 seconds | Geospatial indexing |
| High availability | 99.99% uptime | Multi-region, microservices |
| Location updates | 100K+ per second | WebSocket, Redis |
| Surge pricing | Complex calculations | Real-time analytics |
| Payment | Global compliance | Stripe integration |
48.2 High-Level Architecture
Section titled β48.2 High-Level Architectureβ Uber Architecture ===============
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Mobile Apps β β (Rider App / Driver App) β ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ β βΌ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β API Gateway β β (Kong / Nginx) β ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ β βΌ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Core Services β β β β βββββββββββ βββββββββββ βββββββββββ βββββββββββ β β β Dispatch β β Map β β Trip β β User β β β β Service β β Service β β Service β β Serviceβ β β βββββββββββ βββββββββββ βββββββββββ βββββββββββ β β β β βββββββββββ βββββββββββ βββββββββββ βββββββββββ β β β Payment β βPricing β βSupply β βRating β β β β Service β β Service β βService β βService β β β βββββββββββ βββββββββββ βββββββββββ βββββββββββ β ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ β βΌ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Data Layer β β β β ββββββββββββ ββββββββββββ ββββββββββββ β β β MySQL β βCassandra β β Redis β β β β(Trip data)β β(Locations)β β(Cache) β β β ββββββββββββ ββββββββββββ ββββββββββββ β β β β ββββββββββββ ββββββββββββ ββββββββββββ β β β Kafka β βPostGIS β β Blob β β β β(Events) β β(Geo) β β (Images) β β β ββββββββββββ ββββββββββββ ββββββββββββ β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ48.3 The Dispatch System
Section titled β48.3 The Dispatch SystemβThe heart of Uber - matching riders with drivers in real-time.
Dispatch System Flow ===================
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Step 1: Rider Requests Ride β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β ββββββββββββ β β β Rider ββββββββΆ Request: Pickup Location, β β β App β Destination, Ride Type β β ββββββββββββ β β β β β β WebSocket β β βΌ β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β Dispatch Service Receives Request β β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β βΌ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Step 2: Find Nearby Drivers β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β Query: Drivers within 5km of pickup β β β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β Geospatial Index β β β β β β β β (lat, lng) β β β β β β β β β β β βββ Drivers β β β β β β β β β β β β β β β β β β π βββ Pickup location β β β β β β β β Using: H3 (Hexagonal hierarchical indexing) β β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β βΌ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Step 3: Calculate ETA & Price β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β β’ Distance to pickup (route API) β β β’ Estimated trip time β β β’ Base fare + time + distance β β β’ Surge multiplier (if applicable) β β β β Return to rider: "5 min away, $15-20" β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β βΌ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Step 4: Send to Drivers β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β Send push notification to top 5 drivers β β β β β β β β Driver 1: "Ride request! 5 min away, $18" β β β β Driver 2: "Ride request! 5 min away, $18" β β β β ... β β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β β β β Drivers have ~15 seconds to accept β β βΌ β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β First to accept wins! β β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β βΌ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Step 5: Match & Start Trip β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β β’ Driver accepts β Create Trip record β β β’ Notify rider: "Driver is on the way" β β β’ Track driver location in real-time β β β’ Begin trip when driver arrives β β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ48.4 Geospatial Data Handling
Section titled β48.4 Geospatial Data HandlingβH3: Uberβs Geospatial Index
Section titled βH3: Uberβs Geospatial IndexβUber developed H3 for efficient geospatial queries.
H3: Hexagonal Hierarchical Indexing =================================
Why H3? βββββββ
Traditional: Geohash βββββββββββββββββββ β’ Square cells β’ Edge distortion β’ Variable coverage
H3: Hexagonal Grid βββββββββββββββββ β’ Hexagonal cells (better proximity) β’ Consistent shape β’ Hierarchical (levels of detail)
βββββββββββββββββββββββββββββββββββββββββ
H3 Resolution Levels ββββββββββββββββββββ
Level 0: ~1M kmΒ² (entire countries) Level 1: ~150k kmΒ² Level 2: ~20k kmΒ² Level 3: ~2.5k kmΒ² Level 4: ~400 kmΒ² β City Level 5: ~50 kmΒ² β Neighborhood Level 6: ~8 kmΒ² β Block Level 7: ~1 kmΒ²
βββββββββββββββββββββββββββββββββββββββββ
Driver Location Storage ββββββββββββββββββββββ
In Redis: βββββββββ Key: "drivers:index:5:123:456" Value: Set of driver IDs within H3 cell
Query: βββββββββ 1. Calculate H3 for pickup location 2. Query Redis for nearby cell 3. Expand to neighboring cells 4. Return nearby driversReal-Time Location Updates
Section titled βReal-Time Location Updatesβ Driver Location Pipeline =====================
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Driver App β β (Every 3 seconds) β β β β β β Location update (GPS) β β βΌ β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β WebSocket Connection β β β β (Persistent, bidirectional) β β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β β β βΌ β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β Location Ingestion Service β β β β β β β β β’ Validate location β β β β β’ Update Redis (driver position) β β β β β’ Publish to Kafka β β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β β β βΌ β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β Kafka Topic: location-updates β β β β β β β β Consumers: β β β β β’ Dispatch (matching) β β β β β’ ETA calculation β β β β β’ Analytics β β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ48.5 Real-Time Infrastructure
Section titled β48.5 Real-Time InfrastructureβWebSocket Implementation
Section titled βWebSocket Implementationβ// Uber's Real-time Communication// Using WebSocket for bidirectional communication
// Client: Driver Appconst ws = new WebSocket('wss://api.uber.com/ws');
ws.onopen = () => { // Register driver ws.send(JSON.stringify({ type: 'driver_register', driver_id: 'driver-123', location: { lat: 37.7749, lng: -122.4194 } }));};
// Receive ride requestws.onmessage = (event) => { const message = JSON.parse(event.data);
if (message.type === 'ride_request') { // Show ride request UI showRideRequest(message.data);
// Auto-expire after 15 seconds setTimeout(() => { if (!accepted) { ws.send({ type: 'expire' }); } }, 15000); }};
// Send location updatessetInterval(() => { ws.send(JSON.stringify({ type: 'location_update', driver_id: 'driver-123', location: getCurrentLocation(), timestamp: Date.now() }));}, 3000);Handling High Concurrency
Section titled βHandling High Concurrencyβ Scaling Dispatch System ====================
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Per-City Dispatch β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β Each city runs independent dispatch cluster β β β’ NYC dispatch β NYC rides only β β β’ SF dispatch β SF rides only β β β β Benefits: β β β’ Isolation (failure in one city doesn't affect others) β β β’ Lower latency (regional) β β β’ Independent scaling β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Splitting Large Cities β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β NYC (high demand) split into multiple dispatch regions: β β β’ Manhattan β β β’ Brooklyn β β β’ Queens β β β’ Bronx β β β’ Staten Island β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ48.6 Key Learnings from Uber
Section titled β48.6 Key Learnings from Uberβ Uber Engineering Principles ==========================
1. REAL-TIME FIRST βββββββββββββββ β’ WebSocket for bi-directional communication β’ Location tracking every 3 seconds β’ Sub-second matching requirements
2. GEO-SPATIAL NATIVE ββββββββββββββββββ β’ Custom indexing (H3) β’ Redis for real-time queries β’ PostGIS for spatial analytics
3. PER-REGION ISOLATION βββββββββββββββββββββ β’ Independent dispatch per city/region β’ Failure isolation β’ Independent scaling
4. MARKETPLACE DYNAMICS ββββββββββββββββββββ β’ Supply/demand balancing β’ Surge pricing algorithm β’ Driver incentives
5. TRUST & SAFETY βββββββββββββββ β’ Real-time ID verification β’ Trip tracking β’ Emergency featuresSummary
Section titled βSummaryβ- Dispatch system - Real-time rider-driver matching
- Geospatial indexing - H3 for efficient location queries
- WebSocket - Real-time bidirectional communication
- Per-region architecture - City-level isolation
- Redis - Fast location lookups
- Kafka - Event-driven location updates