सिस्टम डिज़ाइन इंटरव्यू: Uber डिज़ाइन करें
"Uber डिज़ाइन करें" सबसे सामान्य सिस्टम डिज़ाइन प्रश्नों में से एक है क्योंकि यह जियोस्पेशियल इंडेक्सिंग, रीयल-टाइम लोकेशन स्ट्रीमिंग, मैचिंग, और उच्च राइट थ्रूपुट — इन सभी को एक साथ छूता है। इंटरव्यूअर असली Uber आर्किटेक्चर नहीं ढूंढ रहा — वह देखना चाहता है कि आप समस्या का दायरा कैसे तय करते हैं, कैसे बचाव-योग्य विकल्प चुनते हैं, और स्केल के बारे में ज़ोर से सोचकर कैसे तर्क करते हैं।
इसे एक सोची-समझी क्रम में हल करें: आवश्यकताओं को स्पष्ट करें, स्केल का अनुमान लगाएं, मुख्य एंटिटीज़ और APIs का स्केच बनाएं, डेटा और मैचिंग पाथ डिज़ाइन करें, फिर बॉटलनेक और ट्रेड-ऑफ़ पर चर्चा करें। नीचे दिया गया वॉकथ्रू उसी क्रम में है, जिससे आप सिर्फ़ जवाब नहीं बल्कि संरचना का भी अभ्यास कर सकें।
1. आवश्यकताओं को स्पष्ट करें
डिज़ाइन से पहले फ़ंक्शनल को नॉन-फ़ंक्शनल से अलग करें और दायरा तय करें। राइडर एक राइड का अनुरोध करते हैं और ड्राइवर को रीयल-टाइम में नज़दीक आते देखते हैं; ड्राइवर ऑनलाइन होते हैं और आसपास के अनुरोध प्राप्त करते हैं; सिस्टम उन्हें मैच करता है और यात्रा को पूरा होने तक ट्रैक करता है।
- फ़ंक्शनल: राइड का अनुरोध करना, नज़दीकी ड्राइवर से मैच करना, यात्रा को लाइव ट्रैक करना, किराया गणना, यात्रा इतिहास।
- नॉन-फ़ंक्शनल: कम-लेटेंसी मैचिंग (सेकंड्स में), उच्च उपलब्धता, रीयल-टाइम लोकेशन अपडेट, यह निरंतरता कि एक ड्राइवर ठीक एक राइडर को ही असाइन हो।
- दायरे से बाहर (इसे स्पष्ट रूप से कहें): पेमेंट प्रोसेसिंग का इंटरनल हिस्सा, रेटिंग्स, सर्ज ML — इनका उल्लेख करें और फिर टाल दें।
2. स्केल का अनुमान लगाएं
अनुमानित आंकड़े बाद के विकल्पों को सही ठहराते हैं। मान लें कि लगभग 1 करोड़ डेली एक्टिव ड्राइवर हर 4 सेकंड में एक लोकेशन पिंग भेजते हैं — इससे लोकेशन डेटा के लगभग 25 लाख राइट्स प्रति सेकंड होते हैं, एक राइट-हेवी वर्कलोड जो तुरंत एक सामान्य रिलेशनल टेबल को हॉट पाथ के रूप में इस्तेमाल करने से इनकार कर देता है।
3. मुख्य कंपोनेंट्स और APIs
सेवाओं और रिक्वेस्ट फ़्लो का स्केच बनाएं। मैचिंग पाथ को ड्यूरेबल ट्रिप स्टोर से स्वतंत्र रखें, जिससे हर एक अपनी ख़ासियतों के अनुसार स्केल कर सके।
- लोकेशन सर्विस: ड्राइवर के पिंग्स को इनजेस्ट करती है, वर्तमान पोज़िशन को इन-मेमोरी जियोस्पेशियल इंडेक्स में रखती है।
- मैचिंग सर्विस: राइड रिक्वेस्ट पर, नज़दीकी ऑनलाइन ड्राइवरों की क्वेरी करती है और एक को असाइन करती है।
- ट्रिप सर्विस: यात्रा के जीवनचक्र (रिक्वेस्टेड → मैच्ड → ऑनगोइंग → कंप्लीटेड) का ड्यूरेबल रिकॉर्ड।
- नोटिफ़िकेशन/स्ट्रीमिंग: ड्राइवर की लाइव पोज़िशन राइडर को भेजती है (वेबसॉकेट/लॉन्ग-पोल)।
4. जियोस्पेशियल मैचिंग — समस्या का मूल
यही वह हिस्सा है जो इंटरव्यूअर सबसे ज़्यादा सुनना चाहता है। रॉ लैट/लॉन्ग को स्टोर करके स्कैन करना O(n) है; आपको एक स्पेशियल इंडेक्स की ज़रूरत है। क्वाडट्री या जियोहैशिंग समझाएं: मैप को सेल्स में बांटना, जिससे 'इस पॉइंट के पास ड्राइवर ढूंढना' पूरी स्कैन के बजाय कुछ ही सेल्स की लुकअप बन जाता है।
जियोहैशिंग किसी क्षेत्र को एक छोटी स्ट्रिंग में एनकोड करता है, जहां शेयर किए गए प्रीफ़िक्स स्पेशियल निकटता दर्शाते हैं, जिससे 'नज़दीक' एक प्रीफ़िक्स क्वेरी बन जाता है। ड्राइवरों के वर्तमान सेल्स तेज़ रीड्स और बार-बार अपडेट के लिए इन-मेमोरी स्टोर (जैसे Redis) में रहते हैं; सेल ग्रेन्युलैरिटी प्रिसीज़न और क्वेरी फैन-आउट के बीच एक ट्यून करने योग्य ट्रेड-ऑफ है।
5. स्केलिंग और बॉटलनेक
दबाव के बिंदुओं और उन्हें कम करने के तरीकों को नाम दें। हर सेकंड 25 लाख लोकेशन राइट्स की स्ट्रीम सबसे प्रमुख है।
- लोकेशन इंडेक्स को भौगोलिक रूप से शार्ड करें — एक शहर के ड्राइवर और राइडर एक ही शार्ड द्वारा हैंडल किए जाते हैं, जिससे मैचिंग लोकल रहती है।
- राइट स्पाइक को इन-मेमोरी स्टोर और असिंक्रोनस ड्यूरेबल राइट्स से अब्ज़ॉर्ब करें; हर पिंग को ड्यूरेबल DB में जाने की ज़रूरत नहीं है।
- डबल-बुकिंग से बचने के लिए एक एटॉमिक असाइनमेंट (लॉक या कंडीशनल अपडेट) से एक-ड्राइवर-एक-राइडर सुनिश्चित करें।
- स्पाइक्स को डीकपल करने के लिए लोकेशन इनजेशन और डाउनस्ट्रीम कंज़्यूमर्स के बीच एक मैसेज क्यू (Kafka) का उपयोग करें।
6. ज़ोर से बताने योग्य ट्रेड-ऑफ़
उन तनावों को नाम देकर समाप्त करें जिन्हें इंटरव्यूअर महत्व देता है: स्ट्रॉन्ग बनाम एवेंचुअल कंसिस्टेंसी (ड्राइवर असाइनमेंट स्ट्रॉन्ग होना चाहिए; लोकेशन डिस्प्ले एवेंचुअल हो सकता है), इन-मेमोरी स्पीड बनाम ड्यूरेबिलिटी, और सेल साइज़ प्रिसीज़न बनाम क्वेरी फैन-आउट। इन्हें स्पष्ट रूप से बताना ही एक पासिंग जवाब और एक मज़बूत जवाब के बीच का अंतर है।
रीयल-टाइम मदद के साथ Uber का सिस्टम डिज़ाइन प्रैक्टिस करें
Natively का सिस्टम डिज़ाइन इंटरव्यू असिस्टेंट लाइव राउंड के दौरान आपको संरचित बनाए रख सकता है — आगे कवर करने वाले आयाम का सुझाव देकर और ट्रेड-ऑफ़ को रीयल-टाइम में दिखाकर, यह सब आपके अपने डिवाइस पर।
