विषयसूची[लुकाउनुहोस्][देखाउनु]
इन्स्टाग्राम फिड तपाईका लागि महत्त्वपूर्ण व्यक्ति र चीजहरूसँग साझेदारी र जडान गर्नको लागि एउटा प्लेटफर्म हो। जब तपाइँ इन्स्टाग्राम खोल्नुहुन्छ वा तपाइँको फिड रिफ्रेस गर्नुहुन्छ, हामीले तपाइँलाई रुचि राख्नु भएको फोटो र भिडियोहरू शीर्ष तिर देखिनेछन्।
समाचार फिड भनेको पाठ, तस्बिरहरू, वा भिडियोहरू समावेश गर्ने वस्तुहरूको संग्रह हो जुन प्रणालीमा अन्य निकायहरूद्वारा सिर्जना गरिएको हो जुन तपाइँलाई पढ्नको लागि लक्षित गरिएको छ। यो सँधै परिवर्तन हुँदैछ, जबकि अन्य संस्थाहरूले नयाँ पोस्टहरू बनाउँदैछन्।
यस पोष्टमा, हामी इन्स्टाग्रामको फिडको प्रणाली डिजाइनलाई नजिकबाट हेर्नेछौं। त्यसैले, सुरु गरौं।
1। आवश्यकताहरु
कार्यात्मक आवश्यकता
- प्रयोगकर्ताको समाचार फिड प्रणालीमा अन्य निकायहरूबाट पोस्टहरूबाट सिर्जना गरिन्छ जुन प्रयोगकर्ताले पछ्याएको वा रुचि छ।
- पाठ, तस्बिर र भिडियोहरू सबै पोस्टहरूमा फेला पार्न सकिन्छ।
- प्रयोगकर्ताको समाचार फिड अरूले सिर्जना गरेको नयाँ पोस्टिङहरूसँग अद्यावधिक हुनुपर्छ।
गैर-कार्यात्मक मापदण्ड
- समाचार फिडहरूको सिर्जना वास्तविक-समयमा हुनुपर्छ। अन्तिम प्रयोगकर्ताले मात्र 12 सेकेन्ड ढिलाइ अनुभव गर्नुपर्छ।
- नयाँ पोस्ट थप्दै: प्रणालीमा पेश गरिसकेपछि नयाँ पोष्टलाई समाचार फिड अनुरोधमा देखा पर्न 5 सेकेन्ड भन्दा बढी समय लाग्दैन।
2. क्षमताको अनुमान
- मार्च २०२१ सम्म, विश्वको जनसंख्या ७.८ बिलियन मात्र छ। यसले विश्वको जनसंख्याको २१% Facebook DAU (दैनिक सक्रिय प्रयोगकर्ता) र 2021% Facebook MAU (मासिक सक्रिय प्रयोगकर्ता) (मंथली एक्टिभ प्रयोगकर्ता) रहेको जनाउँछ। त्यो अचम्मको छ।
- चीजहरू सजिलो बनाउन हामीले निर्माण गरिरहेको प्रणालीमा 1 बिलियन DAU छ भनेर बहाना गरौं।
- मान्नुहोस् कि एक व्यक्तिले फेसबुकमा 500 व्यक्ति वा व्यवसायलाई फलो गर्छ। एक समूह वा पृष्ठ एक इकाई मान्न सकिन्छ।
अनुमानित ट्राफिक
मान्नुहोस् कि एक प्रयोगकर्ताले औसतमा प्रत्येक दिन 10 पटक समाचार फिड डाउनलोड गर्दछ। त्यसैले यो लगभग 116K QPS र 1e10 अनुरोधहरू प्रत्येक दिन हो।
भण्डारणको अनुमान
मानौं कि हामीले द्रुत पुन: प्राप्तिको लागि प्रत्येक प्रयोगकर्ताको समाचार फिडबाट औसतमा मेमोरीमा 500 पोष्टहरू राख्छौं, र प्रत्येक पोस्टको आकार 1KB छ। त्यसैले 500 KB प्रति प्रयोगकर्ता, 500 TB सबै DAUs को लागि, र 5000 कम्प्युटरहरू प्रत्येक 100 GB RAM भएको।
3. प्रणालीहरूको लागि API हरू
userId (GUID): प्रयोगकर्ता जसको समाचार फिड ल्याइएको छ।
निम्न क्षेत्रहरू वैकल्पिक विकल्प प्यारामिटरमा उपलब्ध छन्:
- afterPostId (GUID): निम्न पोस्टबाट समाचार फिड प्राप्त गर्नुहोस्। यदि निर्दिष्ट गरिएको छैन भने, सबैभन्दा भर्खरका पोस्टहरू प्राप्त गर्नुहोस्।
- गणना (संख्या): प्रत्येक अनुरोध फिर्ता गर्न सक्ने पोष्टहरूको अधिकतम संख्या। ब्याकइन्डले पूर्वनिर्धारित अधिकतम संख्या सेट गर्दछ यदि कुनै पनि आपूर्ति गरिएको छैन।
- excludeReplies (बूलियन): समाचार फिडमा समावेश हुनबाट जवाफ रोक्छ।
- JSON फर्काइएको समाचार फिड वस्तुहरूको सूची समावेश गर्दछ।
4. डाटाबेस डिजाइन गर्दै
संस्थाहरू
- प्रयोगकर्ता
- entityId, नाम, विवरण, र टाइमस्ट्याम्प सबै आवश्यक क्षेत्रहरू हुन्।
- निम्न क्षेत्रहरू आवश्यक छन्: PostId, शीर्षक, पाठ, लेखकआईडी, र टाइमस्ट्याम्प।
- टाइमस्ट्याम्प, url, र mediaId
सम्बन्ध
- अन्य प्रयोगकर्ताहरू वा संस्थाहरू प्रयोगकर्ताद्वारा पछ्याउन सकिन्छ। (m:n)
- लेखक-पोस्ट: दुबै प्रयोगकर्ता र संस्थाहरूले पोष्टहरू सिर्जना गर्न सक्छन्। मान्नुहोस् कि प्रयोगकर्ताहरूले मात्र सरलताको लागि पोस्टहरू सिर्जना गर्न सक्छन्। (1: n; authorId सम्मिलित छ)।
- प्रत्येक पोस्ट मिडिया को केहि रूप संग साथ छ। (१:n)
5. उच्च-स्तर डिजाइन
वास्तुकला
कार्यप्रवाह
दाना उत्पादन
जब जेले उनको समाचार स्ट्रिम अनुरोध गर्दछ, प्रणालीले निम्न गर्नेछ:
- जेले पछ्याउने सबै मानिसहरू र चीजहरूको आईडीहरू पुन: प्राप्त गर्नुहोस्।
- समग्र पोस्टहरू: ती आईडीहरू दिएर, सबैभन्दा भर्खरको, लोकप्रिय र सान्दर्भिक पोस्टहरू प्राप्त गर्नुहोस्।
- पदहरू तिनीहरूको सान्दर्भिकता र समय अनुसार क्रमबद्ध गर्नुहोस्।
- क्यास: सिर्जना गरिएका फिडहरू बचत गर्नुहोस् र जेलाई शीर्ष २० पोष्टहरू पठाउनुहोस्।
- Jay ले पहिलो 20 पोष्टहरू पढिसकेपछि, अर्को 20 पोष्टहरू प्राप्त गर्न अर्को अनुरोध पठाइन्छ।
दाना वितरण
मानौं जयले आयुषलाई पछ्याइरहेको छ र आयुषले केहि नयाँ पोस्ट गर्छ। Jay को समाचार फिड प्रणाली द्वारा अद्यावधिक गर्न आवश्यक हुनेछ:
- आयुषका अनुयायीहरूको आईडीहरू पुन: प्राप्त गर्नुहोस्।
- नयाँ लेखहरू थप्नुहोस्: ती आईडीका फलोअरहरूको समाचार फिड पूलमा आयुषको पोस्ट थप्नुहोस्।
- पदहरू तिनीहरूको सान्दर्भिकता र समय अनुसार क्रमबद्ध गर्नुहोस्।
- रैंकिंग पोष्टको क्यास अपडेट गर्नुहोस्।
- नयाँ पोस्ट प्रकाशित हुँदा अनुयायीहरूलाई सूचित गरिनु पर्छ।
अवयव
प्रयोगकर्ताहरूको जडान वेब सर्भरहरू द्वारा राखिएको छ।
माथि उल्लेखित प्रक्रियाहरू एप्लिकेसन सर्भरद्वारा कार्यान्वयन गरिन्छ।
क्यास र डाटाबेस:
- रिलेशनल डाटाबेस प्रयोगकर्ता/इकाई
- रिलेशनल डाटाबेस (पोस्ट)
- छवि/भिडियो विशेषता: आयुष स्टोर्ज
- रिलेशनल डाटाबेस मेटाडेटा
निजीकृत सेवाहरू:
- दाना उत्पादन
- फिडहरूको सूचना
6. विस्तृत डिजाइन
दाना उत्पादन
फ्यान-आउट पढी भोली कार्यान्वयन:
यस ढिलो कार्यान्वयनमा समस्याहरू समावेश छन्:
- धेरै संख्यामा साथीहरू/अनुयायीहरू भएका प्रयोगकर्ताहरूले महत्त्वपूर्ण सुस्तता देख्नेछन् किनकि हामीले पोस्टिङहरूको ठूलो संख्यालाई छान्नुपर्छ, मर्ज गर्नुपर्छ र श्रेणीबद्ध गर्नुपर्छ।
- जब प्रयोगकर्ताले आफ्नो पृष्ठ लोड गर्छ, हामी टाइमलाइन निर्माण गर्छौं। यो सुस्त हुन सक्छ र धेरै विलम्बता हुन सक्छ।
- प्रत्येक स्थिति अपडेटले लाइभ अपडेटहरूको लागि सबै अनुयायीहरूको लागि फिड अपडेटहरूको परिणाम दिन्छ। यसले हाम्रो न्यूजफिड जेनेरेसन सेवामा महत्त्वपूर्ण ढिलाइ हुन सक्छ।
हामी क्रोनोलोजी पूर्व-उत्पन्न गर्न सक्छौं र दक्षता बढाउन मेमोरीमा बचत गर्न सक्छौं।
अफलाइन उत्पादन (फ्यान-आउट लेखन)
हामीसँग समर्पित सर्भरहरू हुन सक्छ जुन निरन्तर रूपमा प्रयोगकर्ताहरूको न्यूजफिडहरू मेमोरीमा सिर्जना र भण्डारण गर्दैछ। हामी केवल पूर्व-उत्पन्न, सुरक्षित स्थानबाट समाचार फिड डेलिभर गर्न सक्छौं जब प्रयोगकर्ताले यो चाहन्छ।
प्रयोगकर्ताको फिड मेमोरीमा कतिवटा फिड वस्तुहरू भण्डारण गर्नुपर्छ?
तपाईंको प्रयोग व्यवहारमा आधारित अनुकूलन गर्नुहोस्।
के हामीले सबै प्रयोगकर्ताहरूको लागि न्यूजफिड बनाउनु पर्छ (र यसलाई मेमोरीमा सुरक्षित राख्नुपर्छ)?
- धेरै पटक लग इन नगर्ने मानिसहरूका लागि।
- LRU-आधारित क्यासिङ एक सरल दृष्टिकोण हो।
- प्रयोगकर्ताहरू कसरी लगइन गर्छन् भनेर पत्ता लगाउनु एउटा राम्रो समाधान हो। यो कहिले हो? तपाई कुन हप्ताको दिनको बारेमा कुरा गर्दै हुनुहुन्छ?
फिडको प्रकाशन
Fanout तपाईको सबै अनुयायीहरूलाई पोस्ट पठाउने प्रक्रिया हो।
फ्यानआउट पढ्नुहोस् (तान्नुहोस्)
जब तपाइँ समाचार फिड अनुरोध गर्नुहुन्छ, प्रणालीले पढ्न अनुरोध प्राप्त गर्दछ। Fanout read ले तपाइँका सबै अनुयायीहरूलाई पढ्न अनुरोध पठाउँदछ, उनीहरूलाई उनीहरूको सामग्री पढ्न सोध्दै।
विशेषज्ञहरूले:
- लेखन प्रक्रिया सस्तो छ।
- डेटा पढ्दा, विभिन्न एग्रीगेशन एल्गोरिदमहरू प्रयोग गर्न सजिलो हुन्छ।
विपक्ष:
- धेरै अनुयायीहरू भएको व्यक्तिको लागि, पढ्ने अपरेशन धेरै महँगो छ।
- प्रयोगकर्ताहरूले ताजा डाटा देख्ने छैनन् जबसम्म उनीहरूले यसलाई तान्दैनन्।
- जब हामी नियमित रूपमा सबैभन्दा भर्खरको पोस्टिङहरू ल्याउन तान्दछौं, उपयुक्त पुल क्याडेन्स फेला पार्न गाह्रो हुन्छ, र धेरै पुल अनुरोधहरूले स्रोतहरू बर्बाद गर्दै, खाली जवाफ फर्काउनेछन्।
फ्यानआउट लेखन (धक्का)
तपाईंले नयाँ पोस्ट पठाउँदा प्रणालीमा लेख्न अनुरोध गरिन्छ। फ्यानआउट लेखन प्रयोग गरेर उनीहरूको न्यूजफिड अपडेट गर्नका लागि तपाइँका सबै अनुयायीहरूलाई लेख्न अनुरोध पठाइएको छ।
प्रति
- पढ्ने प्रक्रिया सस्तो छ।
con
- लाखौं अनुयायीहरूको साथ प्रयोगकर्ताको लागि, लेख्न प्रक्रिया धेरै महँगो छ।
फिडको श्रेणी
क्रोनोलोजिकल रूपमा फिडहरू अर्डर गर्नुको सट्टा, आजको श्रेणीकरण एल्गोरिदमहरूले थप सान्दर्भिकता भएका वस्तुहरूलाई प्राथमिकतामा राखिएको छ भनी ग्यारेन्टी गर्ने प्रयास गर्दछ।
- कारकहरू छनौट गर्नुहोस् जसले तपाईंलाई फिड वस्तुको सान्दर्भिकता निर्धारण गर्न मद्दत गर्न सक्छ, जस्तै मनपर्ने, टिप्पणीहरू, र साझेदारीहरूको संख्या, वस्तु अन्तिम पटक अद्यावधिक गरिएको थियो भने लेखमा फोटो वा भिडियोहरू छन्, र यस्तै अन्य।
- विशेषताहरूको आधारमा स्कोर गणना गर्नुहोस्।
- पोष्टहरू श्रेणीकरण गर्न स्कोर प्रयोग गर्नुहोस्।
हाम्रो र्याङ्किङ प्रणाली कत्तिको प्रभावकारी छ भनी हेर्नको लागि प्रयोगकर्ता रिटेन्सन, विज्ञापन आय र अन्य जस्ता KPI हरू सेटअप गर्नुहोस्।
निष्कर्ष
इन्स्टाग्राम वा यसको अभिभावक व्यवसाय फेसबुक एक विशाल निगम हो भन्ने तथ्यको बावजुद, यसको राम्रो बुझाइ छ प्रणाली डिजाइन।
मैले तपाईलाई इन्स्टाग्राम फिडको उच्च-स्तर सारांश प्रदान गर्न सक्दो प्रयास गरें।
मलाई आशा छ कि यो उपयोगी थियो र तपाईले यसलाई राम्रो प्रयोग गर्नुहुनेछ।
जवाफ छाड्नुस्