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