Ride Sharing Application
Do core problems hain: DRIVER MATCHING aur PRICING. Matching ke liye drivers ki live location chahiye — geohash ya quadtree se nearby drivers O(log n) mein milte hain, poora list scan karna galat jawab hai. Batao ki drivers har few seconds location update bhejte hain.
Surge pricing PricingStrategy ka best example hai: base fare + distance + time + surge multiplier (demand/supply ratio se). Ride bhi state machine hai: REQUESTED → DRIVER_ASSIGNED → ARRIVED → IN_PROGRESS → COMPLETED. Driver ke accept na karne par next driver ko offer jaana chahiye — timeout ke saath.
interface DriverMatchingStrategy {
List<Driver> findNearby(Location pickup, double radiusKm);
}
class GeoHashMatchingStrategy implements DriverMatchingStrategy {
// Drivers geohash bucket mein indexed — poora scan nahi
public List<Driver> findNearby(Location p, double r) {
return geoIndex.query(p, r).stream()
.filter(d -> d.getStatus() == DriverStatus.AVAILABLE)
.toList();
}
}
interface PricingStrategy { Money fare(Ride ride); }
// BaseFare + perKm + perMin + surgeMultiplier(demand/supply)- Geohash/quadtree se nearby drivers — linear scan galat jawab hai
- Surge pricing = PricingStrategy ka natural use case
- Driver offer par timeout rakho, warna request atak jaayegi
Drivers har 3-5 second location bhejte hain. Ye WRITE-HEAVY workload hai — har update ko main DB mein likhna usko maar dega. Solution: in-memory geo index (Redis GEO) mein live location, aur trip history alag se persist.
Batao ki update frequency ek trade-off hai: zyada frequent = better matching par zyada load aur battery drain. Real systems adaptive rakhte hain — ride ke dauraan zyada, idle mein kam.
// Redis GEO — O(log n) nearby query
GEOADD drivers:live <lng> <lat> driver:1234
GEOSEARCH drivers:live FROMLONLAT <lng> <lat> BYRADIUS 3 km ASC COUNT 10Rider request karta hai → nearby available drivers nikaalo → ranking se sort karo → top driver ko offer bhejo with 15-20 second timeout → accept na kare to next driver. Ye ek SEQUENTIAL offer chain hai.
Alternative hai BROADCAST — sabko ek saath offer, jo pehle accept kare use mile. Ye fast hai par drivers ko frustrate karta hai (race lag jaati hai). Dono ka trade-off batana strong answer hai.