ठूला-ठूला अनलाइन अनुप्रयोगहरू विगत दुई दशकहरूमा लामो यात्रामा आएका छन्। यी आविष्कारहरूले सफ्टवेयर विकासको हाम्रो धारणालाई परिवर्तन गरेको छ। फेसबुक, इन्स्टाग्राम र ट्विटर, उदाहरणका लागि, सबै स्केलेबल प्लेटफर्महरू हुन्।
यी प्रणालीहरू ट्राफिक र डाटाको ठूलो मात्रा प्रबन्ध गर्नको लागि निर्माण गरिनु पर्छ किनभने अरबौं मानिसहरूले तिनीहरूलाई विश्वभर एकै समयमा प्रयोग गर्छन्। यो जब हो प्रणाली डिजाइन चित्र प्रवेश गर्दछ।
निश्चित मापदण्डहरू पूरा गर्ने प्रणालीको लागि वास्तुकला, इन्टरफेसहरू र डेटा स्थापना गर्ने प्रक्रियालाई प्रणाली डिजाइन भनिन्छ। एकजुट र कुशल प्रणालीहरू मार्फत, प्रणाली डिजाइनले तपाईंको व्यवसाय वा संगठनको मागहरू पूरा गर्दछ।
एक पटक तपाईंको कम्पनी वा संगठनले यसको मापदण्ड निर्धारण गरेपछि, तपाईंले तिनीहरूलाई भौतिक प्रणाली डिजाइनमा समावेश गर्न सुरु गर्न सक्नुहुन्छ जुन तपाईंको उपभोक्ताहरूको मागहरू पूरा गर्दछ।
चाहे तपाइँ बेस्पोक विकास, व्यावसायिक समाधानहरू, वा दुईको संयोजनको साथ जाने छनौट गर्नुहुन्छ, तपाइँ तपाइँको प्रणाली कसरी डिजाइन गर्नुहुन्छ तपाइँ यसलाई कसरी निर्माण गर्नुहुन्छ भनेर निर्धारण गर्दछ।
हामी यस पोष्टमा ट्विटर टाइमलाइनको प्रणाली डिजाइनमा विस्तृत रूपमा हेर्नेछौं, ट्यूटोरियलको साथ पूरा। सुरु गरौं।
चरण 1: रूपरेखा प्रयोग केस र अवरोधहरू
केसको प्रयोग गर्नुहोस्
- एक प्रयोगकर्ताले ट्वीट अपलोड गर्दछ।
- सेवाले ट्वीटका अनुयायीहरूलाई पुश सूचनाहरू र इमेलहरू पठाउँछ।
- प्रयोगकर्ताको टाइमलाइन हेरिएको छ (प्रयोगकर्ताबाट गतिविधि)
- प्रयोगकर्ताले गृह टाइमलाइनमा हेर्छ (प्रयोगकर्ताले पछ्याउने व्यक्तिहरूको गतिविधि)
- कुञ्जी शब्दहरू प्रयोगकर्ताद्वारा खोजिन्छन्।
- सेवा साँच्चै पहुँचयोग्य छ।
दायरा बाहिर
- ट्वीटहरू यो सेवा प्रयोग गरेर ट्विटर फायरहोस र अन्य स्ट्रिमहरूमा पठाइन्छ।
- सेवाले प्रयोगकर्ताको दृश्यता सेटिङहरूमा आधारित ट्वीटहरू हटाउँछ।
- यदि प्रयोगकर्ताले जवाफ दिईएको व्यक्तिलाई पछ्याउँदैन भने, जवाफ लुकाउनुहोस्।
- 'रिट्वीट लुकाउनुहोस्' विकल्पलाई अवलोकन गर्नुहोस्।
- विश्लेषण
प्रतिबन्ध र अनुमानहरू
राज्य अनुमानहरू
- यातायात समान रूपमा फैलिएको छैन।
- ट्वीट पठाउन सरल हुनुपर्छ।
- जबसम्म तपाईंसँग लाखौं फलोअरहरू छैनन्, तपाईंका सबै अनुयायीहरूलाई ट्वीट पठाउन छिटो हुनुपर्छ।
- त्यहाँ 100 मिलियन सक्रिय प्रयोगकर्ताहरू छन्।
- प्रत्येक महिना 15 बिलियन ट्वीट्स वा हरेक दिन 500 मिलियन ट्वीटहरू
- प्रत्येक ट्वीटमा औसतमा 10 डेलिभरीको फ्यानआउट हुन्छ।
- हरेक दिन, फ्यानआउटले 5 बिलियन ट्वीटहरू डेलिभर गर्दछ।
- Fanout ले हरेक महिना 150 बिलियन ट्वीटहरू प्रदान गर्दछ।
- 250 बिलियन मासिक पठन अनुरोधहरू
- 10 बिलियन मासिक खोजहरू
समय रेखा
- टाइमलाइन नेभिगेट गर्न सजिलो हुनुपर्छ।
- ट्विटर लेख्नु भन्दा पढ्नको लागि धेरै हो।
- द्रुत ट्वीट पढ्नको लागि अप्टिमाइज गर्नुहोस्
- ट्वीट खपत समय खपत छ।
खोज
- खोजी प्रक्रिया छिटो हुनुपर्छ।
- खोज्न समय लाग्छ।
प्रयोग गणना गर्नुहोस्
प्रत्येक ट्वीटको आकार:
- 8 बाइट ट्वीट आईडी
- 32 बाइट प्रयोगकर्ता आईडी
- पाठको 140 बाइट
- मिडिया - 10 KB को औसत
- कुल: ~10 KB
प्रत्येक महिना, 150 TB ताजा ट्वीट सामग्री उत्पन्न हुन्छ।
- * ५० करोड ट्वीट्स हरेक दिन * ३० दिन प्रति महिना * १० KB प्रति ट्वीट
- तीन वर्षमा, त्यहाँ 5.4 PB ताजा ट्वीट सामग्री भएको छ।
त्यहाँ प्रत्येक सेकेन्डमा 100,000 पढ्ने अनुरोधहरू छन्।
- * (प्रति सेकेन्ड 400 अनुरोध / 1 बिलियन अनुरोध प्रति महिना) 250 बिलियन अनुरोधहरू प्रत्येक महिना पढ्ने
त्यहाँ प्रत्येक सेकेन्डमा 6,000 ट्वीटहरू छन्।
- * (प्रति सेकेन्ड 400 अनुरोध / 1 बिलियन अनुरोध प्रति महिना) 15 बिलियन ट्वीटहरू प्रत्येक महिना
फ्यानआउटमा, प्रत्येक सेकेन्डमा 60 हजार ट्वीटहरू पठाइन्छ।
- Fanout ले प्रत्येक महिना 150 बिलियन ट्वीटहरू डेलिभर गर्दछ * (प्रति सेकेन्ड 400 अनुरोध / 1 बिलियन अनुरोध प्रति महिना)।
प्रत्येक सेकेन्डमा जानकारीको लागि 4,000 अनुरोधहरू
- * (प्रति सेकेन्ड 400 अनुरोध / 1 बिलियन अनुरोध प्रति महिना) 10 बिलियन खोजहरू प्रत्येक महिना
केही उपयोगी रूपान्तरण
- प्रत्येक महिना, 2.5 मिलियन सेकेन्ड पास।
- प्रति सेकेन्ड 2.5 अनुरोधमा प्रति महिना 1 मिलियन अनुरोधहरू
- 100 मिलियन अनुरोधहरू प्रति महिना x 40 अनुरोधहरू प्रति सेकेन्ड
- 1 बिलियन अनुरोध प्रति महिना = 400 अनुरोध प्रति सेकेन्ड
चरण 2: उच्च-स्तर रेखाचित्र
चरण 3: मूल घटकहरू व्याख्या गर्दै
हामीले प्रयोगकर्ताको टाइमलाइन (प्रयोगकर्ताको गतिविधि) लाई रिलेशनल डाटाबेसमा भर्नका लागि प्रयोगकर्ताको आफ्नै ट्वीटहरू बचत गर्न सक्छौं यदि तिनीहरूले ट्वीट पेश गरे भने। ट्वीटहरू डेलिभर गर्न र गृह टाइमलाइन (प्रयोगकर्ताले पछ्याउने व्यक्तिहरूको गतिविधि) विकास गर्न अझ गाह्रो छ।
एक सामान्य रिलेशनल डाटाबेस सबै अनुयायीहरूलाई ट्विटहरू फ्यान गरेर अभिभूत हुनेछ (60 हजार ट्वीटहरू प्रत्येक सेकेन्डमा पठाइन्छ)। हामी सम्भवतः द्रुत-लेखन डाटा भण्डारण जस्तै NoSQL डाटाबेस वा मेमोरी क्याससँग जान चाहन्छौं।
मेमोरीबाट 1 MB क्रमिक रूपमा पढ्न लगभग 250 माइक्रोसेकेन्ड लाग्छ, तर SSD बाट पढ्न 4 गुणा लामो लाग्छ, र डिस्कबाट पढ्न 80 गुणा लामो लाग्छ।
एउटा वस्तु स्टोर छविहरू र भिडियोहरू जस्ता डेटा भण्डारण गर्न प्रयोग गर्न सकिन्छ।
- वेब सर्भर, जसले रिभर्स प्रोक्सीको रूपमा काम गरिरहेको छ, ग्राहकबाट ट्वीट प्राप्त गर्दछ।
- अनुरोधलाई वेब सर्भरद्वारा Write API सर्भरमा पठाइएको छ।
- Write API ले प्रयोगकर्ताको टाइमलाइनमा SQL डाटाबेसमा ट्वीट बचत गर्छ।
फ्यान-आउट सेवालाई Write API द्वारा सम्पर्क गरिएको छ, र यसले निम्न कार्यहरू गर्दछ।
- प्रयोगकर्ता ग्राफ सेवा क्वेरी गरेर मेमोरी क्यासमा प्रयोगकर्ताका अनुयायीहरू फेला पार्छ।
- मेमोरी क्यासमा, ट्वीट प्रयोगकर्ताका फलोअरहरूको गृह टाइमलाइनमा सुरक्षित हुन्छ।
- 1,000 अनुयायीहरू = 1,000 लुकअपहरू र सम्मिलितहरू = O(n) सञ्चालन।
- ट्विट द्रुत खोजको लागि खोज अनुक्रमणिका सेवामा बचत गरिएको छ।
- वस्तु स्टोर मिडिया भण्डारण गर्न प्रयोग गरिन्छ।
- सूचना सेवा मार्फत अनुयायीहरूलाई पुश अलर्टहरू पठाउँछ।
- अलर्टहरू एसिन्क्रोनस रूपमा पठाउन, यसले लाम प्रयोग गर्दछ।
यदि हाम्रो मेमोरी क्यास रेडिस हो भने हामी निम्न संरचनाको साथ नेटिभ रेडिस सूची प्रयोग गर्न सक्छौं:
प्रयोगकर्ताको गृह टाइमलाइन नयाँ ट्वीटको साथ अपडेट हुनेछ, जुन मेमोरी क्यासमा भण्डारण हुनेछ। हामी निम्न सार्वजनिक REST API प्रयोग गर्नेछौं:
प्रयोगकर्ता टाइमलाइन प्रयोगकर्ता द्वारा हेरिएको छ।
- वेब सर्भरले ग्राहकबाट प्रयोगकर्ता टाइमलाइन अनुरोध प्राप्त गर्दछ।
- अनुरोधलाई वेब सर्भरद्वारा Read API सर्भरमा पठाइएको छ।
- Read API ले प्रयोगकर्ताको समय सीमाको लागि SQL डाटाबेसलाई सोध्छ।
REST API ले गृह टाइमलाइनमा समान रूपमा काम गर्नेछ, अपवाद बाहेक सबै ट्वीटहरू तिनीहरूले पछ्याउने मानिसहरूको सट्टा प्रयोगकर्ताबाट उत्पन्न हुनेछन्।
प्रयोगकर्ताले कुञ्जी शब्दहरू खोज्छ:
- वेब सर्भरले ग्राहकबाट खोज अनुरोध प्राप्त गर्दछ।
- अनुरोध वेब सर्भर द्वारा खोज API सर्भरमा पठाइएको छ।
चरण 4: ट्विटर टाइमलाइन
टाइमलाइन निर्माण एक कठिन कार्य हो। वेब वा अनुप्रयोग सर्भरहरूमा लिङ्क गर्ने टाइमलाइन उत्पन्न गर्ने सर्भर आवश्यक छ।
प्रत्येक पटक प्रयोगकर्ताले साइन इन गर्दा, टाइमलाइन सेवाले अनुयायीको तालिकामा प्रयोगकर्ताहरूबाट नयाँ ट्वीटहरूको ट्र्याक राख्छ र प्रयोगकर्ताको टाइमलाइन अपडेट वा ताजा गर्दछ।
हामी यहाँ कुनै पनि प्रकारको श्रेणीकरण प्रणाली लागू गर्दैनौं; यसको सट्टामा, हामी अनुमान गर्छौं कि प्रयोगकर्ताका अनुयायीहरूबाट शीर्ष 5 ट्वीटहरू सिर्जना समयको क्रममा टाइमलाइनमा प्रस्तुत गरिएका छन्। हामी 50-ट्वीट रिफ्रेस कटअफ कायम राख्न सक्छौं। प्रयोगकर्ताले पृष्ठ रिफ्रेस नगरेसम्म हामी त्यो थ्रेसहोल्ड पुगेपछि पनि ताजा गर्न वा टाइमलाइन निर्माण गर्न बन्द गर्छौं।
उच्च विलम्बता र कार्यसम्पादन चिन्ताहरू प्रत्यक्ष प्रयोगकर्ता फिड सिर्जनाबाट आउनेछन्। बरु, तुरुन्तै प्रस्तुत गर्न सकिने अफलाइन स्ट्रिम सिर्जना गर्नु कार्यसम्पादन सुधार गर्ने उत्तम तरिका हो। समर्पित टाइमलाइन सर्भरहरू चलाउनुहोस् जसले अनुप्रयोग सर्भरलाई नियमित रूपमा पिङ गर्दछ फिडलाई सिर्जना गरिएको समयको आधारमा ताजा गर्न।
श्रेणीकरण एल्गोरिदमले महत्त्वपूर्ण संकेतहरूलाई ध्यानमा राख्नुपर्छ र प्रयोगकर्ताको टाइमलाइनमा उनीहरूले पछ्याउने एक वा बढी खाताहरूबाट सामग्रीले प्रभुत्व जमाउँदैन भन्ने ग्यारेन्टी गर्न वजन प्रदान गर्नुपर्छ।
अझ स्पष्ट रूपमा, हामी कुनै पनि फिड वस्तुको सान्दर्भिकतासँग सम्बन्धित सुविधाहरू छनौट गर्न सक्छौं, जस्तै मनपर्ने संख्या, टिप्पणीहरू, साझेदारीहरू, र अद्यावधिक समय। यी प्रत्येक मापदण्डलाई ट्वीट मूल्याङ्कन गर्न प्रयोग गरिनु पर्छ, र त्यसपछि त्यो श्रेणीलाई टाइमलाइनमा ट्वीटहरू देखाउन प्रयोग गरिनु पर्छ।
के हामीले प्रयोगकर्ताहरूलाई उनीहरूको न्यूजफिडको लागि नयाँ सामग्री उपलब्ध हुँदा निरन्तर सचेत गराउनुपर्छ? प्रयोगकर्ताहरूले नयाँ डाटा उपलब्ध हुँदा सतर्क हुन लाभदायक पाउन सक्छन्। मोबाइल उपकरणहरूमा, तथापि, जब डाटा प्रयोग धेरै महँगो हुन्छ, यसले ब्यान्डविथ बर्बाद गर्न सक्छ।
नतिजाको रूपमा, हामी मोबाइल उपकरणहरूमा डाटा पुश नगर्ने विकल्प रोज्न सक्छौं र यसको सट्टा प्रयोगकर्ताहरूलाई नयाँ पोस्टिङका लागि "पुल टु रिफ्रेस" गर्न अनुमति दिन्छौं।
चरण 5: स्केलिंग डिजाइन
सम्भावित बाधा फ्यानआउट सेवा हो। लाखौं फलोअरहरू भएका ट्विटर प्रयोगकर्ताहरूले उनीहरूको ट्वीटहरू रोल आउट हुनको लागि केही मिनेट पर्खनुपर्नेछ। यसले ट्वीटको जवाफको साथ दौड निम्त्याउन सक्छ, जुन हामीले सेवाको समयमा ट्वीटहरू पुन: अर्डर गरेर बच्न सक्छौं।
हामीले धेरै संख्यामा फलोअर भएका मानिसहरूबाट ट्वीटहरू फैलाउन पनि रोक्न सक्छौं। यसको सट्टा, हामीले अत्यधिक फलो गरिएका व्यक्तिहरूबाट ट्वीटहरू खोज्न सक्छौं, प्रयोगकर्ताको गृह टाइमलाइन परिणामहरूसँग खोज परिणामहरू एकीकृत गर्न सक्छौं, र त्यसपछि सेवाको समयमा ट्वीटहरू पुन: क्रमबद्ध गर्न सक्छौं।
थप सुधारहरू समावेश छन्:
- प्रत्येक गृह टाइमलाइनको लागि मेमोरी क्यासमा केही सय ट्वीटहरू मात्र राख्नुहोस्।
- मेमोरी क्यासमा, सक्रिय प्रयोगकर्ताहरूको गृह टाइमलाइन जानकारी मात्र बचत गरिन्छ।
- यदि प्रयोगकर्ता अघिल्लो 30 दिनमा सक्रिय भएको थिएन भने हामी SQL डाटाबेसबाट कालक्रम पुन: निर्माण गर्न सक्छौं।
- प्रयोगकर्ता को हो भनेर पत्ता लगाउन, प्रयोगकर्ता ग्राफ सेवा प्रयोग गर्नुहोस्।
- SQL डाटाबेसबाट पुन: प्राप्त गरेर मेमोरी क्यासमा ट्वीटहरू थप्नुहोस्।
- Tweet Info Service ले एक महिनाको ट्विट मात्र बचत गर्न सक्छ।
- प्रयोगकर्ता जानकारी सेवामा, सक्रिय प्रयोगकर्ताहरू मात्र सुरक्षित हुन्छन्।
- विलम्बता कम राख्नको लागि, खोज क्लस्टरले प्राय: मेमोरीमा ट्वीटहरू कायम राख्न आवश्यक पर्दछ।
निष्कर्ष
यद्यपि ट्विटर एक ठूलो संगठन हो, यो अझ राम्रो छ प्रणाली डिजाइन को समझ। मैले तपाईंलाई Twitter टाइमलाइनको उच्च-स्तरको सिंहावलोकन प्रदान गर्न सक्दो प्रयास गरें।
मलाई आशा छ कि तपाईंले यसबाट उपयोगी जानकारी प्राप्त गर्नुभयो र यसलाई राम्रोसँग प्रयोग गर्न सक्नुहुन्छ।
जवाफ छाड्नुस्