Food Delivery System
Core services: Restaurant/Catalog (read-heavy, cached), Order (write path, state machine), Delivery Assignment (geo matching, ride-sharing jaisa), aur Notification (async, queue-driven). Order lifecycle poore system ka backbone hai aur har state change ek EVENT publish karta hai.
Sabse interesting piece hai ETA PREDICTION — restaurant prep time + partner ka pickup tak ka time + delivery time. Ye ML model hota hai jo historical data par train hota hai. Interview mein pura model mat samjhao, bas batao ki ye ek alag service hai jo features (time of day, distance, restaurant load) leti hai.
// Event-driven backbone — har state change event banata hai
Order Service → Kafka topic "order.events"
├→ Notification Service (customer/restaurant/partner)
├→ Delivery Service (partner assign karo)
├→ Analytics Service (dashboards)
└→ ETA Service (prediction update)
// Ek producer, kai independent consumers — naya consumer add karna
// order service ko chhue bina ho jaata hai- Order state machine + har transition par event — Kafka backbone
- Catalog read-heavy (cache), order write path (consistency)
- ETA ek alag ML service hai, order service ka hissa nahi
Search location-based hai par ek extra filter hai jo dusre marketplaces mein nahi — RESTAURANT ABHI KHULA HAI YA NAHI, aur kya wo abhi orders le raha hai (kitchen overloaded ho to temporarily band). Ye state har few minutes badalti hai.
Isliye discovery index mein static data (cuisine, location, rating) aur dynamic state (open/closed, current load, ETA) dono chahiye. Static index se candidates lo, phir dynamic state cache (Redis) se filter karo.
Search → Geo index (static: location, cuisine, rating)
→ candidates (~200 restaurants)
→ Redis lookup (dynamic: isOpen, currentLoad, prepTime)
→ filter + rank → top 20Ek delivery partner ek saath 2-3 orders le sakta hai agar wo same direction mein hon — isse unit economics bahut behtar hoti hai. Ye BATCHING problem hai aur asli systems ka bada hissa hai.
Batching ka constraint hai food quality — pehla order thanda nahi hona chahiye. Isliye batching window chhoti hoti hai aur sirf tab hoti hai jab detour threshold se kam ho. Ye trade-off (cost vs experience) batana product thinking dikhata hai.