Facebook फ़ीड डिज़ाइन करें और डिज़ाइन Facebook खोज समान प्रश्न हैं।
चरण 1: मामलों और बाधाओं का उपयोग करें आवश्यकताओं को इकट्ठा करें और समस्या को हल करें। उपयोग के मामलों और बाधाओं को स्पष्ट करने के लिए प्रश्न पूछें। मान्यताओं पर चर्चा करें।
साक्षात्कारकर्ता के बिना स्पष्ट प्रश्नों को संबोधित करने के लिए, हम कुछ उपयोग मामलों और बाधाओं को परिभाषित करेंगे।
बक्सों का इस्तेमाल करें हम केवल निम्नलिखित उपयोग के मामलों को संभालने के लिए समस्या को हल करेंगे उपयोगकर्ता एक ट्वीट पोस्ट करता है सेवा अनुयायियों को ट्वीट पुश करती है, पुश सूचनाएँ और ईमेल भेजती है उपयोगकर्ता उपयोगकर्ता समयरेखा (उपयोगकर्ता से गतिविधि) देखता है उपयोगकर्ता होम टाइमलाइन को देखता है (उपयोगकर्ता द्वारा अनुसरण की जा रही गतिविधि) उपयोगकर्ता कीवर्ड खोजता है सेवा की उच्च उपलब्धता है दायरे से बाहर सेवा ट्विटर फायरहॉस और अन्य धाराओं के लिए ट्वीट को धक्का देती है उपयोगकर्ताओं की दृश्यता सेटिंग्स के आधार पर सर्विस स्ट्रिप ट्वीट्स को मिटा देता है यदि उपयोगकर्ता भी जवाब नहीं दिया जा रहा है तो उपयोगकर्ता @reply को छुपाएं सम्मान 'छिपाओ रीट्वीट' सेटिंग एनालिटिक्स अड़चनें और धारणाएँ राज्य की धारणाएँ सामान्य
यातायात समान रूप से वितरित नहीं किया जाता है ट्वीट पोस्ट करना तेज होना चाहिए जब तक आपके लाखों अनुयायी न हों, आपके सभी अनुयायियों के लिए एक ट्वीट करना तेज़ होना चाहिए 100 मिलियन सक्रिय उपयोगकर्ता प्रति दिन 500 मिलियन ट्वीट या प्रति माह 15 बिलियन ट्वीट प्रत्येक ट्वीट में 10 प्रसंशकों का औसत है प्रति दिन 5 बिलियन कुल ट्वीट फैनआउट पर दिए गए 150 बिलियन ट्वीट प्रति माह फैनआउट पर वितरित किए गए प्रति माह 250 बिलियन रीड रिक्वेस्ट प्रति माह 10 बिलियन सर्च समय
समयरेखा देखना तेज होना चाहिए ट्विटर भारी लिखने की तुलना में अधिक पढ़ा जाता है ट्वीट के तेजी से पढ़ने के लिए ऑप्टिमाइज़ करें Ingesting tweets भारी लिखा जाता है खोज
खोज तेज होनी चाहिए खोज पठनीय है उपयोग की गणना करें अपने साक्षात्कारकर्ता के साथ स्पष्ट करें कि क्या आपको बैक-ऑफ-द-लिफाफा उपयोग गणनाओं को चलाना चाहिए।
आकार प्रति ट्वीट: ट्वीट_ड - 8 बाइट्स user_id - 32 बाइट्स पाठ - 140 बाइट्स मीडिया - 10 केबी औसत कुल: ~ १० केबी प्रति माह नई ट्वीट सामग्री के 150 टीबी 10 केबी प्रति ट्वीट * प्रति दिन 500 मिलियन ट्वीट * प्रति माह 30 दिन 3 साल में नए ट्वीट कंटेंट की 5.4 PB प्रति सेकंड 100 हजार रीड रिक्वेस्ट प्रति माह 250 बिलियन रीड रिक्वेस्ट * (प्रति सेकंड 400 अनुरोध / प्रति माह 1 बिलियन अनुरोध) प्रति सेकंड 6,000 ट्वीट प्रति माह 15 बिलियन ट्वीट * (प्रति सेकंड 400 अनुरोध / प्रति माह 1 बिलियन अनुरोध) 60 हजार ट्वीट प्रति सेकंड फैनआउट पर दिए गए प्रति माह फैनआउट पर दिए गए 150 बिलियन ट्वीट * (प्रति सेकंड 400 अनुरोध / प्रति माह 1 बिलियन अनुरोध) प्रति सेकंड 4,000 खोज अनुरोध प्रति माह 10 बिलियन खोजें * (प्रति सेकंड 400 अनुरोध / प्रति माह 1 बिलियन अनुरोध) आसान रूपांतरण गाइड:
2.5 मिलियन सेकंड प्रति माह 1 प्रति सेकंड अनुरोध = प्रति माह 2.5 मिलियन अनुरोध 40 प्रति सेकंड अनुरोध = प्रति माह 100 मिलियन अनुरोध प्रति माह 400 अनुरोध = प्रति माह 1 बिलियन अनुरोध चरण 2: एक उच्च स्तरीय डिज़ाइन बनाएं सभी महत्वपूर्ण घटकों के साथ एक उच्च स्तरीय डिजाइन की रूपरेखा।
Imgur
चरण 3: डिजाइन कोर घटक प्रत्येक मुख्य घटक के लिए विवरण में गोता लगाएँ।
मामले का उपयोग करें: उपयोगकर्ता एक ट्वीट पोस्ट करता है हम एक संबंधित डेटाबेस में उपयोगकर्ता समयरेखा (उपयोगकर्ता से गतिविधि) को पॉप्युलेट करने के लिए उपयोगकर्ता के स्वयं के ट्वीट को स्टोर कर सकते हैं। हमें SQL या NoSQL को चुनने के बीच उपयोग के मामलों और ट्रेडऑफ पर चर्चा करनी चाहिए।
ट्वीट डिलीवर करना और होम टाइमलाइन का निर्माण (लोगों द्वारा की जाने वाली गतिविधि का अनुसरण करना) पेचीदा है। सभी अनुयायियों को ट्वीट आउट करने (प्रति सेकंड फैनआउट पर 60 हजार ट्वीट) एक पारंपरिक संबंधपरक डेटाबेस को अधिभारित करेंगे। हम संभवतः NoSQL डेटाबेस या मेमोरी कैश जैसे फास्ट राइट्स वाला डेटा स्टोर चुनना चाहते हैं। मेमोरी से 1 एमबी क्रमिक रूप से पढ़ने में लगभग 250 माइक्रोसेकंड लगते हैं, जबकि एसएसडी से पढ़ने में 4x लगते हैं और डिस्क से 80x5 मिनट लगते हैं
हम ऑब्जेक्ट स्टोर पर मीडिया जैसे फ़ोटो या वीडियो स्टोर कर सकते हैं।
क्लाइंट वेब सर्वर के लिए एक ट्वीट पोस्ट करता है, जो एक रिवर्स प्रॉक्सी के रूप में चल रहा है वेब सर्वर एपीआई सर्वर को लिखने के अनुरोध को आगे बढ़ाता है SQL सर्वर पर उपयोगकर्ता की टाइमलाइन में राइट अप एपीआई ट्वीट स्टोर करता है एपीआई लिखें फैन आउट सेवा से संपर्क करें, जो निम्न कार्य करता है: मेमोरी कैश में संग्रहीत उपयोगकर्ता के अनुयायियों को खोजने के लिए उपयोगकर्ता ग्राफ़ सेवा को क्वेरी करता है मेमोरी कैश में उपयोगकर्ता के अनुयायियों के घर समय में ट्वीट को संग्रहीत करता है ओ (एन) ऑपरेशन: 1,000 अनुयायी = 1,000 लुकअप और आवेषण तेजी से खोज को सक्षम करने के लिए खोज अनुक्रमणिका सेवा में ट्वीट को संग्रहीत करता है ऑब्जेक्ट स्टोर में मीडिया स्टोर अनुयायियों को पुश सूचनाएं भेजने के लिए अधिसूचना सेवा का उपयोग करता है: एक पंक्ति का उपयोग करता है (चित्र नहीं) अतुल्यकालिक रूप से सूचनाएं भेजने के लिए अपने साक्षात्कारकर्ता के साथ स्पष्ट करें कि आपको कितने कोड लिखने की उम्मीद है।
यदि हमारी मेमोरी कैश Redis है, तो हम निम्नलिखित संरचना के साथ एक देशी Redis सूची का उपयोग कर सकते हैं:
ट्वीट n + 2 ट्वीट n + 1 ट्वीट n | 8 बाइट्स 8 बाइट्स 1 बाइट | 8 बाइट्स 8 बाइट्स 1 बाइट | 8 बाइट्स 8 बाइट्स 1 बाइट | | tweet_id user_id मेटा | tweet_id user_id मेटा | tweet_id user_id मेटा | नया ट्वीट मेमोरी कैश में रखा जाएगा, जो उपयोगकर्ता की होम टाइमलाइन (उन लोगों की गतिविधि को दिखाता है, जो उपयोगकर्ता फ़ॉल हैं)


