విషయ సూచిక[దాచు][చూపండి]
ఇన్స్టాగ్రామ్ ఫీడ్ అనేది మీకు ముఖ్యమైన వ్యక్తులు మరియు విషయాలను భాగస్వామ్యం చేయడానికి మరియు కనెక్ట్ చేయడానికి ఒక వేదిక. మీరు Instagramని తెరిచినప్పుడు లేదా మీ ఫీడ్ని రిఫ్రెష్ చేసినప్పుడు, మీకు ఆసక్తి ఉంటుందని మేము భావిస్తున్న ఫోటోగ్రాఫ్లు మరియు వీడియోలు ఎగువన చూపబడతాయి.
న్యూస్ ఫీడ్ అనేది మీరు చదవడానికి లక్ష్యంగా పెట్టుకున్న సిస్టమ్లోని ఇతర ఎంటిటీలచే సృష్టించబడిన వచనం, చిత్రాలు లేదా వీడియోలను కలిగి ఉన్న అంశాల సమాహారం. ఇతర సంస్థలు తాజా పోస్ట్లు చేస్తున్నప్పుడు ఇది ఎల్లప్పుడూ మారుతూ ఉంటుంది.
ఈ పోస్ట్లో, మేము Instagram ఫీడ్ యొక్క సిస్టమ్ డిజైన్ను నిశితంగా పరిశీలిస్తాము. కాబట్టి, ప్రారంభిద్దాం.
1. అవసరాలు
ఫంక్షనల్ అవసరం
- వినియోగదారు అనుసరించిన లేదా ఆసక్తి ఉన్న సిస్టమ్లోని ఇతర సంస్థల నుండి పోస్ట్ల నుండి వినియోగదారు వార్తల ఫీడ్ సృష్టించబడుతుంది.
- వచనం, చిత్రాలు మరియు వీడియోలు అన్నీ పోస్ట్లలో చూడవచ్చు.
- ఇతరులు సృష్టించిన కొత్త పోస్టింగ్లతో వినియోగదారు వార్తల ఫీడ్ను అప్డేట్ చేయాలి.
నాన్-ఫంక్షనల్ ప్రమాణం
- వార్తల ఫీడ్ల సృష్టి నిజ సమయంలో జరగాలి. తుది వినియోగదారు 12 సెకన్ల ఆలస్యాన్ని మాత్రమే అనుభవించాలి.
- కొత్త పోస్ట్ను జోడించడం: సిస్టమ్కు సమర్పించిన తర్వాత వార్తల ఫీడ్ అభ్యర్థనలో కొత్త పోస్ట్ కనిపించడానికి 5 సెకన్ల కంటే ఎక్కువ సమయం పట్టదు.
2. కెపాసిటీ అంచనా
- మార్చి 2021 నాటికి, ప్రపంచ జనాభా కేవలం 7.8 బిలియన్ల మంది మాత్రమే. ప్రపంచ జనాభాలో 21% మంది Facebook DAU (డెయిలీ యాక్టివ్ యూజర్) మరియు 32% Facebook MAU (మంత్లీ యాక్టివ్ యూజర్) (నెలవారీ యాక్టివ్ యూజర్) అని ఇది సూచిస్తుంది. అది అద్భుతంగా ఉన్నది.
- విషయాలను సులభతరం చేయడానికి మేము నిర్మిస్తున్న సిస్టమ్లో 1 బిలియన్ DAU ఉన్నట్లు నటిద్దాం.
- ఒక వ్యక్తి Facebookలో 500 మంది వ్యక్తులను లేదా వ్యాపారాలను అనుసరిస్తున్నాడని ఊహించండి. ఒక సమూహం లేదా పేజీని ఒక ఎంటిటీగా పరిగణించవచ్చు.
అంచనా వేసిన ట్రాఫిక్
ఒక వినియోగదారు ప్రతిరోజు సగటున 10 సార్లు న్యూస్ ఫీడ్ని డౌన్లోడ్ చేస్తారని భావించండి. కాబట్టి ఇది దాదాపు 116K QPS మరియు ప్రతి రోజు 1e10 అభ్యర్థనలు.
నిల్వ అంచనాలు
మేము శీఘ్ర పునరుద్ధరణ కోసం సగటున ప్రతి వినియోగదారు వార్తల ఫీడ్ నుండి 500 పోస్ట్లను మెమరీలో ఉంచుతాము మరియు ప్రతి పోస్ట్ 1KB పరిమాణంలో ఉంటుందని ఊహించండి. కాబట్టి ఒక్కో వినియోగదారుకు 500 KB, అన్ని DAUలకు 500 TB మరియు ఒక్కొక్కటి 5000 GB RAMతో 100 కంప్యూటర్లు.
3. సిస్టమ్స్ కోసం APIలు
userId (GUID): న్యూస్ ఫీడ్ పొందబడుతున్న వినియోగదారు.
ఐచ్ఛిక ఎంపికల పారామీటర్లో క్రింది ఫీల్డ్లు అందుబాటులో ఉన్నాయి:
- afterPostId (GUID): దీన్ని అనుసరించే పోస్ట్ నుండి వార్తల ఫీడ్ను పొందండి. పేర్కొనకపోతే, అత్యంత ఇటీవలి పోస్ట్లను పొందండి.
- కౌంట్ (సంఖ్య): ప్రతి అభ్యర్థన తిరిగి ఇవ్వగల గరిష్ట పోస్ట్ల సంఖ్య. ఏదీ సరఫరా చేయకపోతే బ్యాకెండ్ డిఫాల్ట్ గరిష్ట సంఖ్యను సెట్ చేస్తుంది.
- excludeReplies (బూలియన్): ప్రత్యుత్తరాలను వార్తల ఫీడ్లో చేర్చకుండా నిరోధిస్తుంది.
- JSON తిరిగి వచ్చిన వార్తల ఫీడ్ అంశాల జాబితాను కలిగి ఉంది.
4. డేటాబేస్ రూపకల్పన
ఎంటిటీలు
- వాడుకరి
- entityId, పేరు, వివరణ మరియు టైమ్స్టాంప్ అన్నీ అవసరమైన ఫీల్డ్లు.
- కింది ఫీల్డ్లు అవసరం: PostId, టైటిల్, టెక్స్ట్, authorId మరియు టైమ్స్టాంప్.
- టైమ్స్టాంప్, url మరియు mediaId
సంబంధాలు
- ఇతర వినియోగదారులు లేదా ఎంటిటీలను ఒక వినియోగదారు అనుసరించవచ్చు. (m:n)
- రచయిత-పోస్ట్: వినియోగదారులు మరియు ఎంటిటీలు ఇద్దరూ పోస్ట్లను సృష్టించగలరు. సరళత కోసం వినియోగదారులు మాత్రమే పోస్ట్లను సృష్టించగలరని భావించండి. (1:n; authorId పొందుపరచదగినది).
- ప్రతి పోస్ట్ కొన్ని రకాల మీడియాతో కూడి ఉంటుంది. (1:n)
5. హై-లెవల్ డిజైన్
ఆర్కిటెక్చర్
పనులకూ
ఫీడ్ ఉత్పత్తి
జే తన వార్తా ప్రసారాన్ని అభ్యర్థించినప్పుడు, సిస్టమ్ కింది వాటిని చేస్తుంది:
- జే అనుసరించే వ్యక్తులందరి మరియు విషయాల IDలను తిరిగి పొందండి.
- మొత్తం పోస్ట్లు: ఆ IDలను అందించి, అత్యంత ఇటీవలి, జనాదరణ పొందిన మరియు సంబంధిత పోస్ట్లను పొందండి.
- పోస్ట్లను వాటి ఔచిత్యం మరియు సమయానికి అనుగుణంగా ర్యాంక్ చేయండి.
- కాష్: సృష్టించిన ఫీడ్లను సేవ్ చేసి, టాప్ 20 పోస్ట్లను జైకి పంపండి.
- జే మొదటి 20 పోస్ట్లను చదవడం పూర్తి చేసిన తర్వాత, తదుపరి 20 పోస్ట్లను పొందడానికి మరొక అభ్యర్థన పంపబడింది.
ఫీడ్ పంపిణీ
జై ఆయుష్ని అనుసరిస్తున్నాడని మరియు ఆయుష్ ఏదైనా కొత్త పోస్ట్ చేస్తాడని భావించండి. జే వార్తల ఫీడ్ని సిస్టమ్ అప్డేట్ చేయాలి:
- ఆయుష్ అనుచరుల IDలను తిరిగి పొందండి.
- కొత్త కథనాలను జోడించండి: ఆ IDల అనుచరుల వార్తల ఫీడ్ పూల్కు ఆయుష్ పోస్ట్ను జోడించండి.
- పోస్ట్లను వాటి ఔచిత్యం మరియు సమయానికి అనుగుణంగా ర్యాంక్ చేయండి.
- ర్యాంకింగ్ పోస్ట్ యొక్క కాష్ని నవీకరించండి.
- కొత్త పోస్ట్లు ప్రచురించబడినప్పుడు అనుచరులకు తెలియజేయాలి.
భాగాలు
వినియోగదారుల కనెక్షన్లు వెబ్ సర్వర్ల ద్వారా నిర్వహించబడతాయి.
పైన సూచించిన విధానాలు అప్లికేషన్ సర్వర్ ద్వారా అమలు చేయబడతాయి.
కాష్ మరియు డేటాబేస్:
- రిలేషనల్ డేటాబేస్ యూజర్/ఎంటిటీ
- రిలేషనల్ డేటాబేస్ (పోస్ట్)
- చిత్రం/వీడియో లక్షణం: ఆయుష్ స్టోర్జ్
- రిలేషనల్ డేటాబేస్ మెటాడేటా
వ్యక్తిగతీకరించిన సేవలు:
- ఫీడ్ ఉత్పత్తి
- ఫీడ్ల నోటిఫికేషన్
6. వివరణాత్మక డిజైన్
ఫీడ్ ఉత్పత్తి
అమాయకమైన అమలును ఫ్యాన్-అవుట్ చదవండి:
ఈ అలసత్వ అమలుతో సమస్యలు ఉన్నాయి:
- పెద్ద సంఖ్యలో స్నేహితులు/అనుచరులు ఉన్న వినియోగదారులు గణనీయమైన మందగమనాన్ని గమనిస్తారు, ఎందుకంటే మేము పెద్ద సంఖ్యలో పోస్టింగ్లను జల్లెడ, విలీనం మరియు ర్యాంక్ చేయాలి.
- వినియోగదారు వారి పేజీని లోడ్ చేసినప్పుడు, మేము టైమ్లైన్ను నిర్మిస్తాము. ఇది నిదానంగా ఉంటుంది మరియు చాలా జాప్యం కలిగి ఉంటుంది.
- ప్రతి స్టేటస్ అప్డేట్ లైవ్ అప్డేట్ల కోసం అనుచరులందరికీ ఫీడ్ అప్డేట్లకు దారి తీస్తుంది. ఇది మా న్యూస్ఫీడ్ జనరేషన్ సేవలో గణనీయమైన జాప్యాలకు కారణం కావచ్చు.
సామర్థ్యాన్ని పెంచడానికి మనం కాలక్రమాన్ని ముందుగా రూపొందించి మెమరీలో సేవ్ చేసుకోవచ్చు.
ఆఫ్లైన్ ఉత్పత్తి (ఫ్యాన్ అవుట్ రైట్)
మెమరీలో వినియోగదారుల న్యూస్ఫీడ్లను నిరంతరం సృష్టించడం మరియు నిల్వ చేయడం కోసం మేము అంకితమైన సర్వర్లను కలిగి ఉండవచ్చు. వినియోగదారు కోరుకున్నప్పుడు మేము ముందుగా రూపొందించిన, సేవ్ చేసిన స్థానం నుండి వార్తల ఫీడ్ను అందించగలము.
వినియోగదారు యొక్క ఫీడ్ ఎన్ని ఫీడ్ ఐటెమ్లను మెమరీలో నిల్వ చేయాలి?
మీ వినియోగ ప్రవర్తన ఆధారంగా స్వీకరించండి.
మేము వినియోగదారులందరి కోసం న్యూస్ఫీడ్ను తయారు చేయాలా (మరియు దానిని మెమరీలో భద్రపరచాలి)?
- చాలా తరచుగా లాగిన్ చేయని వ్యక్తుల కోసం.
- LRU-ఆధారిత కాషింగ్ అనేది ఒక సాధారణ విధానం.
- వినియోగదారులు ఎలా లాగిన్ అవుతారో గుర్తించడం ఉత్తమ పరిష్కారం. అది ఎప్పుడు? మీరు ఏ వారం రోజుల గురించి మాట్లాడుతున్నారు?
ఫీడ్ ప్రచురణ
ఫానౌట్ అనేది మీ అనుచరులందరికీ పోస్ట్ను పంపే ప్రక్రియ.
ఫ్యాన్అవుట్ చదవండి(లాగండి)
మీరు వార్తల ఫీడ్ని అభ్యర్థించినప్పుడు, సిస్టమ్ రీడ్ రిక్వెస్ట్ను అందుకుంటుంది. Fanout రీడ్ మీ అనుచరులందరికీ చదవడానికి అభ్యర్థనను పంపుతుంది, వారి కంటెంట్ను చదవమని వారిని అడుగుతుంది.
ప్రోస్:
- వ్రాసే విధానం చవకైనది.
- డేటాను చదివేటప్పుడు, వివిధ అగ్రిగేషన్ అల్గారిథమ్లను ఉపయోగించడం సులభం.
కాన్స్:
- చాలా మంది అనుచరులు ఉన్న వ్యక్తికి, రీడ్ ఆపరేషన్ చాలా ఖరీదైనది.
- వినియోగదారులు దాన్ని లాగే వరకు తాజా డేటాను చూడలేరు.
- మేము క్రమ పద్ధతిలో అత్యంత ఇటీవలి పోస్టింగ్లను పొందడానికి లాగినప్పుడు, సరైన పుల్ కాడెన్స్ను కనుగొనడం కష్టం, మరియు చాలా పుల్ అభ్యర్థనలు ఖాళీ సమాధానాన్ని అందిస్తాయి, వనరులు వృధా అవుతాయి.
ఫ్యాన్అవుట్ రైట్(పుష్)
మీరు కొత్త పోస్ట్ను పంపినప్పుడు సిస్టమ్కి వ్రాత అభ్యర్థన చేయబడుతుంది. ఫానౌట్ రైట్ని ఉపయోగించి వారి న్యూస్ఫీడ్ని అప్డేట్ చేయడానికి మీ అనుచరులందరికీ వ్రాత అభ్యర్థన పంపబడుతుంది.
కోసం
- చదివే ప్రక్రియ చవకైనది.
కాన్
- మిలియన్ల మంది అనుచరులు ఉన్న వినియోగదారు కోసం, ది వ్రాయడానికి విధానం చాలా ఖరీదైనది.
ఫీడ్ యొక్క ర్యాంక్
ఫీడ్లను కాలక్రమానుసారంగా ఆర్డర్ చేయడానికి బదులుగా, నేటి ర్యాంకింగ్ అల్గారిథమ్లు అదనంగా ఎక్కువ ఔచిత్యం కలిగిన అంశాలకు ప్రాధాన్యతనిస్తాయని హామీ ఇవ్వడానికి ప్రయత్నిస్తాయి.
- లైక్లు, కామెంట్లు మరియు షేర్ల సంఖ్య, కథనం ఫోటోలు లేదా వీడియోలను కలిగి ఉన్నట్లయితే అంశం చివరిగా అప్డేట్ చేయబడిన సమయం మొదలైన ఫీడ్ ఐటెమ్ యొక్క ఔచిత్యాన్ని నిర్ణయించడంలో మీకు సహాయపడే అంశాలను ఎంచుకోండి.
- లక్షణాల ఆధారంగా స్కోర్ను లెక్కించండి.
- పోస్ట్లను ర్యాంక్ చేయడానికి స్కోర్ను ఉపయోగించండి.
మా ర్యాంకింగ్ సిస్టమ్ ఎంత ప్రభావవంతంగా ఉందో చూడడానికి వినియోగదారు నిలుపుదల, ప్రకటన ఆదాయం వంటి KPIలను సెటప్ చేయండి.
ముగింపు
ఇన్స్టాగ్రామ్ లేదా దాని పేరెంట్ బిజినెస్ ఫేస్బుక్ భారీ కార్పొరేషన్ అయినప్పటికీ, దీనికి మంచి అవగాహన ఉంది వ్యవస్థ రూపకల్పన.
ఇన్స్టాగ్రామ్ ఫీడ్ యొక్క ఉన్నత-స్థాయి సారాంశాన్ని మీకు అందించడానికి నేను చాలా ప్రయత్నించాను.
ఇది సహాయకారిగా ఉందని మరియు మీరు దానిని సద్వినియోగం చేసుకుంటారని నేను ఆశిస్తున్నాను.
సమాధానం ఇవ్వూ