Kaundan[Itago][Ipakita]
Ang Instagram Feed usa ka plataporma alang sa pagpaambit ug pagkonektar sa mga tawo ug mga butang nga hinungdanon kanimo. Kung giablihan nimo ang Instagram o gi-refresh ang imong feed, ang mga litrato ug video nga among gihunahuna nga interesado ka magpakita sa taas.
Ang news feed usa ka koleksyon sa mga butang nga adunay sulod nga teksto, mga imahe, o mga video nga gihimo sa ubang mga entidad sa sistema nga gipunting nga imong basahon. Kanunay kini nga nagbag-o, samtang ang ubang mga organisasyon naghimo og bag-ong mga post.
Sa kini nga post, atong tan-awon pag-ayo ang disenyo sa sistema sa feed sa Instagram. Busa, magsugod kita.
1. Kinahanglanon
Functional nga kinahanglanon
- Ang news feed sa user gihimo gikan sa mga post gikan sa ubang mga entidad sa sistema nga gisundan o interesado sa user.
- Ang teksto, mga litrato, ug mga video makita tanan sa mga post.
- Ang news feed sa user kinahanglan nga ma-update sa mga bag-ong post nga gihimo sa uban.
Non-functional nga sukdanan
- Ang paghimo sa mga feed sa balita kinahanglan mahitabo sa tinuud nga oras. Ang end-user kinahanglan nga makasinati lamang sa 12 segundos sa paglangan.
- Pagdugang ug bag-ong post: Kinahanglang dili mosobra sa 5 segundos ang usa ka bag-ong post nga makita sa hangyo sa news feed human kini masumite sa sistema.
2. Pagbanabana sa Kapasidad
- Kaniadtong Marso 2021, ang populasyon sa kalibutan 7.8 bilyon ka tawo. Gipakita niini nga 21% sa populasyon sa kalibutan usa ka Facebook DAU (Daily Active User) ug 32% usa ka Facebook MAU (Monthly Active User) (Monthly Active User). Talagsaon kana.
- Ibutang ta nga ang sistema nga atong gitukod adunay 1 bilyon nga DAU aron mapasayon ang mga butang.
- Ibutang ta nga ang usa ka tawo nagsunod sa 500 ka tawo o negosyo sa Facebook. Ang usa ka grupo o usa ka panid mahimong isipon nga usa ka entidad.
Gibanabana nga Trapiko
Ibutang ta nga ang usa ka user nag-download sa news feed 10 ka beses kada adlaw sa aberids. Mao nga kini halos 116K QPS ug 1e10 nga mga hangyo matag adlaw.
Pagbanabana sa Pagtipig
Ibutang ta nga nagmentinar kami og 500 ka mga post gikan sa news feed sa matag user sa memorya sa aberids alang sa dali nga pagkuha, ug ang matag post kay 1KB ang gidak-on. Busa 500 KB matag user, 500 TB para sa tanang DAU, ug 5000 ka kompyuter nga adunay 100 GB RAM matag usa.
3. Mga API alang sa Sistema
userId (GUID): ang user kansang news feed gikuha.
Ang mosunod nga mga natad anaa sa opsyonal nga mga opsyon nga parameter:
- afterPostId (GUID): kuhaa ang news feed gikan sa post nga nagsunod niini. Kung wala gitino, kuhaa ang pinakabag-o nga mga post.
- ihap (numero): ang pinakataas nga gidaghanon sa mga post nga mahimong ibalik sa matag hangyo. Ang backend nagtakda og default nga maximum nga numero kung walay gihatag.
- excludeReplies (boolean): nagpugong sa mga tubag nga maapil sa news feed.
- Ang JSON nga gibalik adunay usa ka lista sa mga news feed item.
4. Pagdesinyo ug Database
Mga Entidad
- user
- entityId, ngalan, deskripsyon, ug timestamp tanan gikinahanglan nga mga field.
- Ang mosunod nga mga field gikinahanglan: PostId, titulo, text, authorId, ug timestamp.
- timestamp, url, ug mediaId
mga Relasyon
- Ang ubang mga Gumagamit o Entidad mahimong sundan sa usa ka tiggamit. (m:n)
- Author-Post: Ang mga tiggamit ug entidad makahimo og mga post. Hunahunaa nga ang mga Gumagamit lamang ang makahimo og mga Post alang sa kayano. (1:n; authorId is embeddable).
- Ang matag post giubanan sa pipila ka porma sa media. (1:n)
5. High-Level nga Disenyo
arkitektura
Mga Kalihokan sa Pagtrabaho
Produksyon sa pagpakaon
Kung gihangyo ni Jay ang iyang stream sa balita, buhaton sa sistema ang mga musunud:
- Kuhaa ang mga ID sa tanan nga mga tawo ug mga butang nga gisundan ni Jay.
- Agregate nga mga post: gihatag ang mga ID, kuhaa ang pinakabag-o, sikat, ug may kalabutan nga mga post.
- I-ranggo ang mga post sumala sa ilang kalabutan ug oras.
- Cache: i-save ang gibuhat nga mga feed ug ipadala kang Jay ang top 20 nga mga post.
- Sa dihang nahuman na ni Jay pagbasa ang unang 20 ka post, laing hangyo ang ipadala aron makuha ang sunod nga 20 ka post.
Pag-apod-apod sa feed
Hunahunaa nga si Jay nagsunod kang Aayush ug nga si Aayush nag-post ug bisan unsa nga bag-o. Kinahanglang i-update sa sistema ang news feed ni Jay:
- Kuhaa ang mga ID sa mga sumusunod ni Aayush.
- Pagdugang ug bag-ong mga artikulo: Idugang ang post ni Aayush sa news feed pool sa mga tagasunod sa ID.
- I-ranggo ang mga post sumala sa ilang kalabutan ug oras.
- I-update ang cache sa ranggo nga post.
- Ang mga tagasunod kinahanglan nga ipahibalo kung ang mga bag-ong post gipatik.
components
Ang mga koneksyon sa mga tiggamit gipadayon sa mga web server.
Ang mga pamaagi nga gipakita sa ibabaw gipatuman sa server sa aplikasyon.
Cache ug database:
- Relasyonal nga database user/entity
- Relational database (post)
- Hulagway/video nga hiyas: Aayush storge
- Relational nga database metadata
Personal nga serbisyo:
- Produksyon sa pagpakaon
- Pagpahibalo sa mga feed
6. Detalyadong Disenyo
Pagmugna sa feed
Fan-out read nga walay pulos nga pagpatuman:
Ang mga problema niining palpak nga pagpatuman naglakip sa:
- Ang mga tiggamit nga adunay daghang gidaghanon sa mga higala/sumusunod makamatikod sa usa ka mahinungdanon nga paghinay tungod kay kita kinahanglan nga mag-ayag, maghiusa, ug mag-ranggo sa daghang mga pag-post.
- Kung ang usa ka tiggamit nag-load sa ilang panid, among gimugna ang timeline. Mahimo kini nga hinay ug adunay daghang latency.
- Ang matag update sa status moresulta sa mga update sa feed para sa tanang followers para sa live updates. Mahimo kini nga hinungdan sa daghang mga paglangan sa among Serbisyo sa Pagmugna sa Newsfeed.
Mahimo naton nga pre-generate ang kronolohiya ug i-save kini sa memorya aron madugangan ang kahusayan.
Offline nga Produksyon (Pagsulat sa Fan-out)
Mahimo kaming adunay mga dedikado nga server nga kanunay nga nagmugna ug nagtipig sa mga newsfeed sa mga tiggamit sa memorya. Mahimo ra namon nga ihatud ang feed sa balita gikan sa pre-generated, natipig nga lokasyon kung gusto kini sa usa ka tiggamit.
Pila ka mga feed item ang kinahanglan nga itago sa panumduman sa usa ka tiggamit?
Ipahiangay base sa imong batasan sa paggamit.
Kinahanglan ba nga maghimo kami usa ka newsfeed alang sa tanan nga tiggamit (ug tipigan kini sa memorya)?
- Alang sa mga tawo nga dili kanunay mag log in.
- Ang caching nga nakabase sa LRU usa ka yano nga pamaagi.
- Ang usa ka mas maayo nga solusyon mao ang paghunahuna kung giunsa ang pag-log in sa mga tiggamit. Kanus-a kini? Unsang mga adlaw sa semana ang imong gihisgutan?
Pagmantala sa feed
Ang Fanout mao ang proseso sa pagpadala ug post sa tanan nimong followers.
Pagbasa sa fanout (pagbira)
Kung mangayo ka og news feed, ang sistema makadawat og read request. Ang pagbasa sa Fanout nagpadala usa ka hangyo sa pagbasa sa tanan nimong mga tagasunod, nga gihangyo sila nga basahon ang ilang sulud.
pros:
- Ang pamaagi sa pagsulat dili mahal.
- Kung nagbasa sa datos, mas dali gamiton ang lainlaing mga algorithm sa pagtipon.
disbentaha:
- Alang sa usa ka tawo nga adunay daghang mga tagasunod, ang operasyon sa pagbasa labi ka mahal.
- Ang mga tiggamit dili makakita sa bag-ong datos hangtod nga makuha nila kini.
- Kung magbira kami aron makuha ang labing bag-o nga mga pag-post kanunay, lisud nga makit-an ang husto nga ritmo sa pagbitad, ug kadaghanan sa mga hangyo sa pagbitad magbalik usa ka walay sulod nga tubag, nag-usik sa mga kapanguhaan.
Pagsulat sa Fanout (pagduso)
Ang usa ka hangyo sa pagsulat gihimo sa sistema kung nagpadala ka usa ka bag-ong post. Ang hangyo sa pagsulat ipadala sa tanan nimong mga sumusunod aron ma-update ang ilang newsfeed gamit ang fanout write.
alang sa
- Ang proseso sa pagbasa dili mahal.
Con
- Alang sa usa ka tiggamit nga adunay milyon-milyon nga mga tagasunod, ang isulat mahal kaayo ang procedure.
Ang ranggo sa Feed
Imbis nga pag-order lang sa mga feed sa kronolohikal, ang mga algorithm sa ranggo karon misulay sa paggarantiya nga ang mga butang nga adunay labi ka kalabutan ang gihatagan og prayoridad.
- Pilia ang mga butang nga makatabang kanimo sa pagdesisyon sa kalambigitan sa usa ka butang sa feed, sama sa gidaghanon sa mga gusto, komento, ug mga bahin, ang oras sa katapusan nga gi-update ang butang kung ang artikulo adunay mga litrato o video, ug uban pa.
- Kalkulahin ang iskor base sa mga kinaiya.
- Gamita ang score sa pagranggo sa mga post.
I-set up ang KPIs sama sa user retention, ad income, ug uban pa aron makita kung unsa ka epektibo ang among ranking system.
Panapos
Bisan pa sa kamatuoran nga ang Instagram o ang iyang ginikanan nga negosyo nga Facebook usa ka dako nga korporasyon, kini adunay mas maayo nga pagsabut sa disenyo sa sistema.
Gisulayan nako ang akong labing kakugi aron mahatagan ka usa ka taas nga lebel nga summary sa feed sa Instagram.
Nanghinaut ko nga kini makatabang ug nga imong magamit kini sa maayo.
Leave sa usa ka Reply