ઇન્સ્ટાગ્રામ ફીડ એ લોકો અને તમારા માટે મહત્વની વસ્તુઓ સાથે શેર કરવા અને કનેક્ટ થવાનું પ્લેટફોર્મ છે. જ્યારે તમે Instagram ખોલો છો અથવા તમારા ફીડને તાજું કરો છો, ત્યારે અમને લાગે છે કે તમને રુચિ હશે તે ફોટોગ્રાફ્સ અને વિડિઓઝ ટોચ પર દેખાશે.
સમાચાર ફીડ એ તમારા વાંચવા માટે લક્ષ્યાંકિત સિસ્ટમમાં અન્ય એકમો દ્વારા બનાવેલ ટેક્સ્ટ, છબીઓ અથવા વિડિઓઝ ધરાવતી વસ્તુઓનો સંગ્રહ છે. તે હંમેશા બદલાતી રહે છે, જ્યારે અન્ય સંસ્થાઓ નવી પોસ્ટ્સ બનાવી રહી છે.
આ પોસ્ટમાં, અમે Instagram ના ફીડની સિસ્ટમ ડિઝાઇનને નજીકથી જોઈશું. તો, ચાલો શરૂ કરીએ.
1. જરૂરીયાતો
કાર્યાત્મક આવશ્યકતા
- વપરાશકર્તાની ન્યૂઝ ફીડ સિસ્ટમની અન્ય સંસ્થાઓની પોસ્ટ્સમાંથી બનાવવામાં આવે છે જેને વપરાશકર્તાએ અનુસર્યું હોય અથવા તેમાં રસ હોય.
- ટેક્સ્ટ, ચિત્રો અને વિડિયો આ બધું પોસ્ટ્સમાં મળી શકે છે.
- વપરાશકર્તાની ન્યૂઝ ફીડ અન્ય લોકો દ્વારા બનાવવામાં આવેલી નવી પોસ્ટિંગ સાથે અપડેટ થવી જોઈએ.
બિન-કાર્યકારી માપદંડ
- સમાચાર ફીડ્સનું નિર્માણ રીઅલ-ટાઇમમાં થવું જોઈએ. અંતિમ વપરાશકારે માત્ર 12 સેકન્ડના વિલંબનો અનુભવ કરવો જોઈએ.
- નવી પોસ્ટ જોડવી: સિસ્ટમમાં સબમિટ કર્યા પછી ન્યૂઝ ફીડની વિનંતીમાં નવી પોસ્ટ દેખાવા માટે 5 સેકન્ડથી વધુ સમય લાગવો જોઈએ નહીં.
2. ક્ષમતાનો અંદાજ
- માર્ચ 2021 સુધીમાં, વિશ્વની વસ્તી માત્ર 7.8 અબજ લોકો છે. તે દર્શાવે છે કે વિશ્વની 21% વસ્તી ફેસબુક DAU (દૈનિક સક્રિય વપરાશકર્તા) છે અને 32% ફેસબુક MAU (મંથલી એક્ટિવ યુઝર) (મંથલી એક્ટિવ યુઝર) છે. તે અદ્ભુત છે.
- ચાલો ઢોંગ કરીએ કે અમે જે સિસ્ટમ બનાવી રહ્યા છીએ તેમાં વસ્તુઓને સરળ બનાવવા માટે 1 બિલિયન DAU છે.
- ધારો કે કોઈ વ્યક્તિ ફેસબુક પર 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. ડેટાબેઝની રચના
સંસ્થાઓ
- વપરાશકર્તા
- એન્ટિટી આઈડી, નામ, વર્ણન અને ટાઈમસ્ટેમ્પ એ બધા જરૂરી ફીલ્ડ છે.
- નીચેના ફીલ્ડ આવશ્યક છે: પોસ્ટઆઈડી, શીર્ષક, ટેક્સ્ટ, લેખક આઈડી અને ટાઈમસ્ટેમ્પ.
- ટાઇમસ્ટેમ્પ, url અને mediaId
સંબંધો
- અન્ય વપરાશકર્તાઓ અથવા એન્ટિટીને વપરાશકર્તા દ્વારા અનુસરવામાં આવી શકે છે. (m:n)
- લેખક-પોસ્ટ: વપરાશકર્તાઓ અને સંસ્થાઓ બંને પોસ્ટ બનાવી શકે છે. ધારો કે સરળતા ખાતર ફક્ત વપરાશકર્તાઓ જ પોસ્ટ્સ બનાવી શકે છે. (1:n; authorId એમ્બેડ કરવા યોગ્ય છે).
- દરેક પોસ્ટની સાથે મીડિયાના અમુક સ્વરૂપો હોય છે. (1:n)
5. ઉચ્ચ-સ્તરની ડિઝાઇન
આર્કિટેક્ચર
વર્કફ્લો
ફીડ ઉત્પાદન
જ્યારે જય તેના સમાચાર પ્રવાહની વિનંતી કરે છે, ત્યારે સિસ્ટમ નીચે મુજબ કરશે:
- જય ફોલો કરે છે તે તમામ લોકો અને વસ્તુઓના ID પુનઃપ્રાપ્ત કરો.
- એકંદર પોસ્ટ્સ: તે ID આપવામાં આવે છે, સૌથી તાજેતરની, લોકપ્રિય અને સંબંધિત પોસ્ટ્સ મેળવો.
- પોસ્ટ્સને તેમની સુસંગતતા અને સમય અનુસાર રેન્ક આપો.
- કેશ: બનાવેલ ફીડ્સ સાચવો અને જયને ટોચની 20 પોસ્ટ મોકલો.
- જ્યારે જયએ પ્રથમ 20 પોસ્ટ્સ વાંચવાનું સમાપ્ત કર્યું, ત્યારે બીજી 20 પોસ્ટ્સ મેળવવા માટે બીજી વિનંતી મોકલવામાં આવે છે.
ફીડ વિતરણ
ધારો કે જય આયુષને ફોલો કરી રહ્યો છે અને આયુષ કંઈપણ નવું પોસ્ટ કરે છે. જયના સમાચાર ફીડને સિસ્ટમ દ્વારા અપડેટ કરવાની જરૂર પડશે:
- આયુષના અનુયાયીઓનાં ID પુનઃપ્રાપ્ત કરો.
- નવા લેખો ઉમેરો: તે ID ના ફોલોઅર્સના ન્યૂઝ ફીડ પૂલમાં આયુષની પોસ્ટ ઉમેરો.
- પોસ્ટ્સને તેમની સુસંગતતા અને સમય અનુસાર રેન્ક આપો.
- રેન્કિંગ પોસ્ટની કેશ અપડેટ કરો.
- નવી પોસ્ટ્સ પ્રકાશિત થાય ત્યારે અનુયાયીઓને જાણ કરવી જોઈએ.
ઘટકો
વપરાશકર્તાઓના જોડાણો વેબ સર્વર દ્વારા જાળવવામાં આવે છે.
ઉપર દર્શાવેલ પ્રક્રિયાઓ એપ્લિકેશન સર્વર દ્વારા ચલાવવામાં આવે છે.
કેશ અને ડેટાબેઝ:
- રિલેશનલ ડેટાબેઝ વપરાશકર્તા/એન્ટિટી
- રિલેશનલ ડેટાબેઝ (પોસ્ટ)
- છબી/વિડિયો વિશેષતા: આયુષ સ્ટોરેજ
- રિલેશનલ ડેટાબેઝ મેટાડેટા
વ્યક્તિગત સેવાઓ:
- ફીડ ઉત્પાદન
- ફીડ્સની સૂચના
6. વિગતવાર ડિઝાઇન
ફીડની પેઢી
નિષ્કપટ અમલીકરણ વાંચો:
આ અસ્પષ્ટ અમલીકરણની સમસ્યાઓમાં નીચેનાનો સમાવેશ થાય છે:
- મોટી સંખ્યામાં મિત્રો/અનુયાયીઓ ધરાવતા વપરાશકર્તાઓ નોંધપાત્ર મંદી જોશે કારણ કે અમારે મોટી સંખ્યામાં પોસ્ટિંગને ચાળવું, મર્જ કરવું અને ક્રમાંક આપવો પડશે.
- જ્યારે વપરાશકર્તા તેમનું પૃષ્ઠ લોડ કરે છે, ત્યારે અમે સમયરેખા બનાવીએ છીએ. આ સુસ્ત હોઈ શકે છે અને તેમાં ઘણી લેટન્સી હોઈ શકે છે.
- દરેક સ્ટેટસ અપડેટ લાઇવ અપડેટ્સ માટે તમામ અનુયાયીઓ માટે ફીડ અપડેટ્સમાં પરિણમશે. આ અમારી ન્યૂઝફીડ જનરેશન સેવામાં નોંધપાત્ર વિલંબનું કારણ બની શકે છે.
કાર્યક્ષમતા વધારવા માટે આપણે ઘટનાક્રમ પૂર્વ-જનરેટ કરી શકીએ છીએ અને તેને મેમરીમાં સાચવી શકીએ છીએ.
ઑફલાઇન ઉત્પાદન (ફેન-આઉટ લખો)
અમારી પાસે સમર્પિત સર્વર્સ હોઈ શકે છે જે સતત વપરાશકર્તાઓની ન્યૂઝફીડને મેમરીમાં બનાવી અને સંગ્રહિત કરે છે. જ્યારે પણ વપરાશકર્તા ઇચ્છે ત્યારે અમે પૂર્વ-જનરેટેડ, સાચવેલા સ્થાન પરથી સમાચાર ફીડ પહોંચાડી શકીએ છીએ.
વપરાશકર્તાની ફીડ કેટલી ફીડ વસ્તુઓ મેમરીમાં સંગ્રહિત હોવી જોઈએ?
તમારા ઉપયોગની વર્તણૂકના આધારે અનુકૂલન કરો.
શું આપણે બધા વપરાશકર્તાઓ માટે ન્યૂઝફીડ બનાવવી જોઈએ (અને તેને મેમરીમાં સાચવી રાખીએ)?
- એવા લોકો માટે કે જેઓ વારંવાર લૉગ ઇન કરતા નથી.
- LRU-આધારિત કેશીંગ એ એક સરળ અભિગમ છે.
- વપરાશકર્તાઓ કેવી રીતે લૉગ ઇન કરે છે તે શોધવાનો વધુ સારો ઉપાય છે. તે ક્યારે છે? તમે કયા અઠવાડિયાના દિવસો વિશે વાત કરો છો?
ફીડનું પ્રકાશન
Fanout એ તમારા બધા અનુયાયીઓને પોસ્ટ મોકલવાની પ્રક્રિયા છે.
ફેનઆઉટ વાંચો (ખેંચો)
જ્યારે તમે ન્યૂઝ ફીડની વિનંતી કરો છો, ત્યારે સિસ્ટમને વાંચવાની વિનંતી પ્રાપ્ત થાય છે. ફેનઆઉટ રીડ તમારા બધા અનુયાયીઓને વાંચવાની વિનંતી મોકલે છે, તેમને તેમની સામગ્રી વાંચવાનું કહે છે.
ગુણ:
- લખવાની પ્રક્રિયા સસ્તી છે.
- ડેટા વાંચતી વખતે, વિવિધ એકત્રીકરણ અલ્ગોરિધમનો ઉપયોગ કરવો વધુ સરળ છે.
વિપક્ષ:
- ઘણા બધા અનુયાયીઓ ધરાવતી વ્યક્તિ માટે, રીડ ઓપરેશન ખૂબ ખર્ચાળ છે.
- વપરાશકર્તાઓ જ્યાં સુધી તેને ખેંચે નહીં ત્યાં સુધી નવો ડેટા જોઈ શકશે નહીં.
- જ્યારે અમે નિયમિત ધોરણે સૌથી તાજેતરની પોસ્ટિંગ્સ મેળવવા માટે ખેંચીએ છીએ, ત્યારે યોગ્ય પુલ કેડન્સ શોધવાનું મુશ્કેલ છે, અને મોટાભાગની પુલ વિનંતીઓ ખાલી જવાબ આપશે, સંસાધનોનો બગાડ કરશે.
ફેનઆઉટ લખો (દબાણ)
જ્યારે તમે નવી પોસ્ટ મોકલો છો ત્યારે સિસ્ટમને લખવાની વિનંતી કરવામાં આવે છે. ફેનઆઉટ રાઈટનો ઉપયોગ કરીને તેમના ન્યૂઝફીડને અપડેટ કરવા માટે તમારા બધા અનુયાયીઓને લખવાની વિનંતી મોકલવામાં આવે છે.
પ્રો
- વાંચવાની પ્રક્રિયા સસ્તી છે.
સાથે
- લાખો અનુયાયીઓ ધરાવતા વપરાશકર્તા માટે, ધ લખી પ્રક્રિયા ખૂબ ખર્ચાળ છે.
ફીડનો ક્રમ
માત્ર કાલક્રમિક રીતે ફીડ્સનો ઓર્ડર આપવાને બદલે, આજના રેન્કિંગ અલ્ગોરિધમ્સ એ ખાતરી આપવાનો પણ પ્રયાસ કરે છે કે વધુ સુસંગતતા ધરાવતી વસ્તુઓને પ્રાથમિકતા આપવામાં આવે છે.
- એવા પરિબળો પસંદ કરો કે જે તમને ફીડ આઇટમની સુસંગતતા નક્કી કરવામાં મદદ કરી શકે, જેમ કે પસંદ, ટિપ્પણીઓ અને શેર્સની સંખ્યા, જો લેખમાં ફોટા અથવા વિડિઓઝ હોય તો આઇટમ છેલ્લે અપડેટ કરવામાં આવી હતી તે સમય વગેરે.
- લાક્ષણિકતાઓના આધારે સ્કોરની ગણતરી કરો.
- પોસ્ટ્સને ક્રમ આપવા માટે સ્કોરનો ઉપયોગ કરો.
અમારી રેન્કિંગ સિસ્ટમ કેટલી અસરકારક છે તે જોવા માટે વપરાશકર્તાની જાળવણી, જાહેરાતની આવક વગેરે જેવા KPIs સેટ કરો.
ઉપસંહાર
હકીકત એ છે કે Instagram અથવા તેના મૂળ વ્યવસાય ફેસબુક એક વિશાળ કોર્પોરેશન હોવા છતાં, તેની પાસે વધુ સારી સમજ છે સિસ્ટમ ડિઝાઇન.
મેં તમને Instagram ફીડનો ઉચ્ચ-સ્તરનો સારાંશ આપવા માટે મારા સખત પ્રયાસ કર્યા.
હું આશા રાખું છું કે તે મદદરૂપ હતું અને તમે તેનો સારો ઉપયોગ કરશો.
એક જવાબ છોડો