इंस्टाग्राम फीड हे लोक आणि तुमच्यासाठी महत्त्वाच्या गोष्टी शेअर करण्यासाठी आणि त्यांच्याशी कनेक्ट होण्यासाठी एक व्यासपीठ आहे. जेव्हा तुम्ही Instagram उघडता किंवा तुमचे फीड रिफ्रेश करता तेव्हा, आम्हाला वाटते की तुम्हाला स्वारस्य असेल अशी छायाचित्रे आणि व्हिडिओ शीर्षस्थानी दिसतील.
न्यूज फीड हा मजकूर, प्रतिमा किंवा सिस्टममधील इतर घटकांद्वारे तयार केलेल्या व्हिडिओंचा समावेश असलेल्या आयटमचा संग्रह आहे जे तुम्हाला वाचण्यासाठी लक्ष्यित केले आहे. हे नेहमीच बदलत असते, तर इतर संस्था नवीन पोस्ट करत असतात.
या पोस्टमध्ये, आम्ही Instagram च्या फीडच्या सिस्टम डिझाइनकडे लक्षपूर्वक पाहू. तर, चला सुरुवात करूया.
1. आवश्यकता
कार्यात्मक गरज
- वापरकर्त्याचे न्यूज फीड सिस्टीममधील इतर घटकांकडील पोस्टमधून तयार केले जाते ज्या वापरकर्त्याने फॉलो केल्या आहेत किंवा ज्यामध्ये त्याला स्वारस्य आहे.
- मजकूर, चित्रे आणि व्हिडिओ सर्व पोस्टमध्ये आढळू शकतात.
- वापरकर्त्याचे न्यूज फीड इतरांनी तयार केलेल्या नवीन पोस्टिंगसह अद्यतनित केले पाहिजे.
नॉन-फंक्शनल निकष
- न्यूज फीड्सची निर्मिती रिअल-टाइममध्ये व्हायला हवी. अंतिम वापरकर्त्याने फक्त 12 सेकंदांचा विलंब अनुभवला पाहिजे.
- नवीन पोस्ट जोडणे: नवीन पोस्ट सिस्टममध्ये सबमिट केल्यानंतर न्यूज फीडमध्ये दिसण्यासाठी 5 सेकंदांपेक्षा जास्त वेळ लागू नये.
2. क्षमतेचा अंदाज
- मार्च 2021 पर्यंत, जगाची लोकसंख्या फक्त 7.8 अब्ज लोक आहे. हे सूचित करते की जगातील 21% लोकसंख्या फेसबुक डीएयू (दैनंदिन सक्रिय वापरकर्ता) आहे आणि 32% फेसबुक एमएयू (मासिक सक्रिय वापरकर्ता) (मासिक सक्रिय वापरकर्ता) आहे. ते आश्चर्यकारक आहे.
- गोष्टी सुलभ करण्यासाठी आम्ही तयार करत असलेल्या सिस्टीममध्ये 1 अब्ज DAU आहे.
- समजा एखादी व्यक्ती Facebook वर 500 लोकांना किंवा व्यवसायांना फॉलो करते. एक गट किंवा पृष्ठ एक अस्तित्व मानले जाऊ शकते.
अंदाजे रहदारी
असे गृहीत धरा की एक वापरकर्ता दररोज सरासरी 10 वेळा न्यूज फीड डाउनलोड करतो. त्यामुळे दररोज अंदाजे 116K QPS आणि 1e10 विनंत्या आहेत.
स्टोरेजचा अंदाज
गृहीत धरा की आम्ही जलद पुनर्प्राप्तीसाठी प्रत्येक वापरकर्त्याच्या न्यूज फीडमधून सरासरी 500 पोस्ट मेमरीमध्ये ठेवतो आणि प्रत्येक पोस्टचा आकार 1KB आहे. त्यामुळे प्रति वापरकर्ता 500 KB, सर्व DAUs साठी 500 TB आणि प्रत्येकी 5000 GB RAM असलेले 100 संगणक.
3. सिस्टम्ससाठी API
userId (GUID): ज्या वापरकर्त्याचे न्यूज फीड आणले जात आहे.
पर्यायी पर्याय पॅरामीटरमध्ये खालील फील्ड उपलब्ध आहेत:
- afterPostId (GUID): या पोस्टमधून बातम्या फीड मिळवा. निर्दिष्ट न केल्यास, सर्वात अलीकडील पोस्ट मिळवा.
- संख्या (संख्या): प्रत्येक विनंती परत करू शकणार्या पोस्टची कमाल संख्या. जर काहीही दिलेले नसेल तर बॅकएंड डीफॉल्ट कमाल संख्या सेट करते.
- excludeReplies (बूलियन): बातम्या फीडमध्ये उत्तरे समाविष्ट करण्यापासून प्रतिबंधित करते.
- परत केलेल्या JSON मध्ये बातम्या फीड आयटमची सूची आहे.
4. डेटाबेस डिझाइन करणे
संस्था
- वापरकर्ता
- entityId, नाव, वर्णन आणि टाइमस्टॅम्प ही सर्व आवश्यक फील्ड आहेत.
- खालील फील्ड आवश्यक आहेत: पोस्टआयडी, शीर्षक, मजकूर, लेखक आयडी आणि टाइमस्टॅम्प.
- टाइमस्टॅम्प, url आणि mediaId
नातेसंबंध
- इतर वापरकर्ते किंवा संस्था वापरकर्त्याद्वारे अनुसरण केले जाऊ शकतात. (m:n)
- लेखक-पोस्ट: वापरकर्ते आणि संस्था दोन्ही पोस्ट तयार करू शकतात. असे गृहीत धरा की केवळ वापरकर्ते साधेपणासाठी पोस्ट तयार करू शकतात. (1:n; authorId एम्बेड करण्यायोग्य आहे).
- प्रत्येक पोस्टला कोणत्या ना कोणत्या माध्यमाची साथ असते. (1:n)
5. उच्च-स्तरीय डिझाइन
आर्किटेक्चर
कार्यप्रवाह
खाद्य उत्पादन
जेव्हा जयने तिच्या बातम्या प्रवाहाची विनंती केली, तेव्हा सिस्टम पुढील गोष्टी करेल:
- जय फॉलो करत असलेल्या सर्व लोकांचे आणि गोष्टींचे आयडी मिळवा.
- एकूण पोस्ट: त्या आयडी दिल्यास, सर्वात अलीकडील, लोकप्रिय आणि संबंधित पोस्ट मिळवा.
- त्यांच्या प्रासंगिकतेनुसार आणि वेळेनुसार पोस्ट रँक करा.
- कॅशे: तयार केलेले फीड जतन करा आणि जयला शीर्ष 20 पोस्ट पाठवा.
- जयने पहिल्या 20 पोस्ट्सचे वाचन पूर्ण केल्यावर, पुढील 20 पोस्ट मिळवण्यासाठी दुसरी विनंती पाठवली जाते.
खाद्य वितरण
गृहीत धरा की जय आयुषला फॉलो करत आहे आणि आयुष काहीही नवीन पोस्ट करतो. जयचे न्यूज फीड सिस्टमद्वारे अपडेट करणे आवश्यक आहे:
- आयुषच्या फॉलोअर्सचे आयडी परत मिळवा.
- नवीन लेख जोडा: त्या आयडीच्या फॉलोअर्सच्या न्यूज फीड पूलमध्ये आयुषची पोस्ट जोडा.
- त्यांच्या प्रासंगिकतेनुसार आणि वेळेनुसार पोस्ट रँक करा.
- रँकिंग पोस्टचे कॅशे अद्यतनित करा.
- नवीन पोस्ट प्रकाशित झाल्यावर अनुयायांना सूचित केले जावे.
घटक
वापरकर्त्यांचे कनेक्शन वेब सर्व्हरद्वारे राखले जातात.
वर दर्शविलेल्या प्रक्रिया ऍप्लिकेशन सर्व्हरद्वारे अंमलात आणल्या जातात.
कॅशे आणि डेटाबेस:
- रिलेशनल डेटाबेस वापरकर्ता/संस्था
- रिलेशनल डेटाबेस (पोस्ट)
- इमेज/व्हिडिओ विशेषता: आयुष स्टोरेज
- रिलेशनल डेटाबेस मेटाडेटा
वैयक्तिकृत सेवा:
- खाद्य उत्पादन
- फीडची सूचना
6. तपशीलवार डिझाइन
फीड निर्मिती
फॅन-आउट वाचा भोळे अंमलबजावणी:
या आळशी अंमलबजावणीतील समस्यांमध्ये हे समाविष्ट आहे:
- मोठ्या संख्येने मित्र/अनुयायी असलेले वापरकर्ते लक्षणीय मंदी लक्षात घेतील कारण आम्ही मोठ्या संख्येने पोस्टिंग चाळणे, विलीन करणे आणि रँक करणे आवश्यक आहे.
- जेव्हा वापरकर्ता त्यांचे पृष्ठ लोड करतो, तेव्हा आम्ही टाइमलाइन तयार करतो. हे आळशी असू शकते आणि त्यात खूप विलंब होऊ शकतो.
- प्रत्येक स्टेटस अपडेटचा परिणाम लाइव्ह अपडेटसाठी सर्व फॉलोअर्ससाठी फीड अपडेटमध्ये होईल. यामुळे आमच्या न्यूजफीड जनरेशन सेवेमध्ये लक्षणीय विलंब होऊ शकतो.
आम्ही कालगणना पूर्व-उत्पन्न करू शकतो आणि कार्यक्षमता वाढवण्यासाठी ते मेमरीमध्ये जतन करू शकतो.
ऑफलाइन उत्पादन (फॅन-आउट लेखन)
आमच्याकडे समर्पित सर्व्हर असू शकतात जे सतत मेमरीमध्ये वापरकर्त्यांचे न्यूजफीड तयार आणि संग्रहित करत असतात. जेव्हा वापरकर्त्याला हवे असेल तेव्हा आम्ही पूर्व-व्युत्पन्न, जतन केलेल्या स्थानावरून बातम्या फीड वितरित करू शकतो.
वापरकर्त्याचे फीड मेमरीमध्ये किती फीड आयटम संग्रहित केले जावे?
तुमच्या वापराच्या वर्तनावर आधारित परिस्थितीशी जुळवून घ्या.
आम्ही सर्व वापरकर्त्यांसाठी न्यूजफीड बनवावे (आणि ते मेमरीमध्ये जतन करावे)?
- जे लोक खूप वेळा लॉग इन करत नाहीत त्यांच्यासाठी.
- एलआरयू-आधारित कॅशिंग ही एक सोपी पद्धत आहे.
- वापरकर्ते कसे लॉग इन करतात हे शोधणे हा एक चांगला उपाय आहे. ते कधी आहे? तुम्ही कोणत्या आठवड्याच्या दिवसांबद्दल बोलत आहात?
फीडचे प्रकाशन
Fanout ही तुमच्या सर्व अनुयायांना पोस्ट पाठवण्याची प्रक्रिया आहे.
फॅनआउट वाचन (पुल)
तुम्ही न्यूज फीडची विनंती करता तेव्हा, सिस्टमला वाचण्याची विनंती प्राप्त होते. फॅनआउट रीड आपल्या सर्व अनुयायांना वाचण्याची विनंती पाठवते, त्यांना त्यांची सामग्री वाचण्यास सांगते.
साधक:
- लिहिण्याची पद्धत स्वस्त आहे.
- डेटा वाचताना, विविध एकत्रीकरण अल्गोरिदम वापरणे सोपे आहे.
बाधक:
- भरपूर अनुयायी असलेल्या व्यक्तीसाठी, वाचन ऑपरेशन ऐवजी महाग आहे.
- जोपर्यंत वापरकर्ते ते खेचत नाहीत तोपर्यंत त्यांना नवीन डेटा दिसणार नाही.
- जेव्हा आम्ही सर्वात अलीकडील पोस्टिंग नियमितपणे आणण्यासाठी खेचतो, तेव्हा योग्य पुल कॅडेन्स शोधणे कठीण असते आणि बहुतेक पुल विनंत्या रिकाम्या उत्तरे देतात, संसाधने वाया घालवतात.
फॅनआउट लिहा (पुश)
जेव्हा तुम्ही नवीन पोस्ट पाठवता तेव्हा सिस्टमला लिखित विनंती केली जाते. आपल्या सर्व अनुयायांना फॅनआउट लेखन वापरून त्यांचे न्यूजफीड अद्यतनित करण्यासाठी लेखन विनंती पाठविली जाते.
प्रति
- वाचन प्रक्रिया स्वस्त आहे.
सह
- लाखो फॉलोअर्स असलेल्या वापरकर्त्यासाठी, द लिहू प्रक्रिया खूप महाग आहे.
फीडची रँक
केवळ कालक्रमानुसार फीड्स ऑर्डर करण्याऐवजी, आजचे रँकिंग अल्गोरिदम अधिक प्रासंगिकता असलेल्या आयटमला प्राधान्य दिले जाईल याची हमी देण्याचा प्रयत्न करतात.
- फीड आयटमची प्रासंगिकता ठरवण्यात मदत करू शकणारे घटक निवडा, जसे की लाईक्स, टिप्पण्या आणि शेअर्सची संख्या, लेखात फोटो किंवा व्हिडिओ असल्यास आयटम शेवटचा अपडेट केला गेला होता आणि असेच बरेच काही.
- वैशिष्ट्यांवर आधारित गुणांची गणना करा.
- पोस्ट रँक करण्यासाठी स्कोअर वापरा.
आमची रँकिंग प्रणाली किती प्रभावी आहे हे पाहण्यासाठी वापरकर्ता धारणा, जाहिरात उत्पन्न आणि यासारखे KPI सेट करा.
निष्कर्ष
इन्स्टाग्राम किंवा त्याचे मूळ व्यवसाय फेसबुक हे एक मोठे कॉर्पोरेशन असूनही, त्याची चांगली समज आहे सिस्टम डिझाइन.
मी तुम्हाला Instagram फीडचा उच्च-स्तरीय सारांश प्रदान करण्याचा माझा खूप प्रयत्न केला.
मला आशा आहे की ते उपयुक्त होते आणि तुम्ही त्याचा चांगला उपयोग कराल.
प्रत्युत्तर द्या