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