Instagram straumur er vettvangur til að deila og tengjast fólki og hlutum sem skipta þig máli. Þegar þú opnar Instagram eða endurnýjar strauminn þinn birtast myndirnar og myndböndin sem við teljum að þú hafir áhuga á efst.
Fréttastraumurinn er safn af atriðum sem innihalda texta, myndir eða myndbönd sem eru búin til af öðrum aðilum í kerfinu sem eru miðuð fyrir þig að lesa. Það er alltaf að breytast á meðan önnur samtök eru að setja inn ferskar færslur.
Í þessari færslu munum við skoða kerfishönnun Instagram-straumsins náið. Svo, við skulum byrja.
1. Kröfur
Virk nauðsyn
- Fréttastraumur notandans er búinn til úr færslum frá öðrum aðilum í kerfinu sem notandinn hefur fylgst með eða hefur áhuga á.
- Texta, myndir og myndbönd má finna í færslum.
- Fréttastraumur notandans ætti að vera uppfærður með nýjum færslum sem aðrir hafa búið til.
Óvirk viðmiðun
- Stofnun fréttastrauma ætti að fara fram í rauntíma. Endanlegur notandi ætti að upplifa aðeins 12 sekúndna seinkun.
- Að bæta við nýrri færslu: Það ætti ekki að taka meira en 5 sekúndur fyrir ný færsla að birtast í fréttastraumsbeiðni eftir að hún er send inn í kerfið.
2. Mat á afkastagetu
- Í mars 2021 eru jarðarbúar aðeins 7.8 milljarðar manna. Það gefur til kynna að 21% jarðarbúa sé Facebook DAU (Daily Active User) og 32% er Facebook MAU (Monthly Active User) (Monthly Active User). Það er ótrúlegt.
- Við skulum láta eins og kerfið sem við erum að smíða hafi 1 milljarð DAU til að gera hlutina auðveldari.
- Gerum ráð fyrir að einstaklingur fylgist með 500 manns eða fyrirtækjum á Facebook. Hópur eða síða gæti talist eining.
Áætluð umferð
Gerum ráð fyrir að einn notandi hali niður fréttastraumnum 10 sinnum á dag að meðaltali. Svo það er um það bil 116K QPS og 1e10 beiðnir á hverjum degi.
Áætlanir um geymslu
Gerum ráð fyrir að við geymum 500 færslur úr fréttastraumi hvers notanda í minni að meðaltali til að hægt sé að sækja þær fljótt og hver færsla er 1KB að stærð. Svo 500 KB á hvern notanda, 500 TB fyrir alla DAU og 5000 tölvur með 100 GB vinnsluminni hver.
3. API fyrir kerfi
userId (GUID): notandinn sem verið er að sækja fréttastraum.
Eftirfarandi reitir eru tiltækir í færibreytunni fyrir valfrjálsa valkosti:
- afterPostId (GUID): fáðu fréttastrauminn úr færslunni á eftir þessari. Ef ekki tilgreint, fáðu nýjustu færslurnar.
- count (number): hámarksfjöldi pósta sem hver beiðni getur skilað. Bakendinn setur sjálfgefið hámarksfjölda ef enginn er til staðar.
- excludeReplies (boolean): kemur í veg fyrir að svör séu tekin með í fréttastraumnum.
- JSON sem skilað er inniheldur lista yfir fréttastraumsatriði.
4. Hönnun gagnagrunns
Aðilar
- Notandi
- entityId, nafn, lýsing og tímastimpill eru allir nauðsynlegir reitir.
- Eftirfarandi reitir eru nauðsynlegir: PostId, title, text, authorId og timestamp.
- tímastimpill, vefslóð og miðlunarnúmer
Sambönd
- Aðrir notendur eða aðilar geta fylgt eftir af notanda. (m:n)
- Höfundarpóstur: Bæði notendur og aðilar geta búið til færslur. Gerum ráð fyrir að aðeins notendur geti búið til færslur til einföldunar. (1:n; authorId er hægt að fella inn).
- Hverri færslu fylgir einhvers konar miðill. (1:n)
5. Hönnun á háu stigi
arkitektúr
Vinnuflæði
Fóðurframleiðsla
Þegar Jay biður um fréttastraum sinn mun kerfið gera eftirfarandi:
- Sæktu skilríki allra fólksins og hlutanna sem Jay fylgist með.
- Samanlagðar færslur: gefið þessi auðkenni, fáðu nýjustu, vinsælustu og viðeigandi færslurnar.
- Raðaðu færslunum eftir mikilvægi þeirra og tímasetningu.
- Skyndiminni: vistaðu stofnaða strauma og sendu Jay 20 efstu færslurnar.
- Þegar Jay hefur lokið við að lesa fyrstu 20 færslurnar er önnur beiðni send um að fá næstu 20 færslurnar.
Dreifing fóðurs
Gerum ráð fyrir að Jay fylgist með Aayush og að Aayush birti eitthvað nýtt. Fréttastraumur Jay þarf að uppfæra af kerfinu:
- Sæktu auðkenni fylgjenda Aayush.
- Bættu nýjum greinum við: Bættu færslu Aayush við fréttastraumsafn fylgjenda þessara auðkenna.
- Raðaðu færslunum eftir mikilvægi þeirra og tímasetningu.
- Uppfærðu skyndiminni í röðunarfærslunni.
- Fylgjendur ættu að fá tilkynningu þegar nýjar færslur eru birtar.
Hluti
Tengingum notenda er viðhaldið af vefþjónum.
Aðferðirnar sem tilgreindar eru hér að ofan eru framkvæmdar af forritaþjóninum.
Skyndiminni og gagnagrunnur:
- Venslagagnagrunnsnotandi/eining
- Venslagagnagrunnur (póstur)
- Mynd/myndband eiginleiki: Aayush storge
- Lýsigögn tengslagagnagrunns
Persónuleg þjónusta:
- Fóðurframleiðsla
- Tilkynning um strauma
6. Ítarleg hönnun
Framleiðsla fóðurs
Fan-out lest barnaleg útfærsla:
Vandamál við þessa slælegu útfærslu eru:
- Notendur með mikinn fjölda vina/fylgjenda munu taka eftir verulega hægagangi þar sem við verðum að sigta, sameina og raða fjölda pósta.
- Þegar notandi hleður síðu sinni, smíðum við tímalínuna. Þetta getur verið tregt og haft mikla leynd.
- Hver stöðuuppfærsla mun leiða til straumuppfærslur fyrir alla fylgjendur fyrir lifandi uppfærslur. Þetta getur valdið verulegum töfum á fréttaveituþjónustunni okkar.
Við getum fyrirfram búið til tímaröðina og vistað hana í minni til að auka skilvirkni.
Offline framleiðsla (Fan-out skrifa)
Við getum haft sérstaka netþjóna sem eru stöðugt að búa til og geyma fréttastrauma notenda í minni. Við getum bara afhent fréttastrauminn frá fyrirfram mynduðum, vistuðum stað hvenær sem notandi vill.
Hversu mörg straumatriði ætti að geyma straum notanda í minni?
Aðlagast út frá notkunarhegðun þinni.
Eigum við að búa til fréttastraum fyrir alla notendur (og varðveita það í minni)?
- Fyrir fólk sem skráir sig ekki mjög oft inn.
- LRU-undirstaða skyndiminni er einföld nálgun.
- Betri lausn er að finna út hvernig notendur skrá sig inn. Hvenær er það? Hvaða virka daga ertu að tala um?
Útgáfa fóðurs
Fanout er ferlið við að senda færslu til allra fylgjenda þinna.
Fanout lestur (draga)
Þegar þú biður um fréttastraum fær kerfið lestrarbeiðni. Fanout read sendir lestrarbeiðni til allra fylgjenda þinna og biður þá um að lesa innihald þeirra.
Kostir:
- Aðferðin við að skrifa er ódýr.
- Þegar gögn eru lesin er auðveldara að nota ýmis söfnunaralgrím.
Gallar:
- Fyrir einstakling með marga fylgjendur er lestraraðgerðin frekar dýr.
- Notendur munu ekki sjá ný gögn fyrr en þeir draga þau.
- Þegar við drögum til að sækja nýjustu færslurnar reglulega, er erfitt að finna rétta dráttarhraðann og flestar dráttarbeiðnir munu skila tómu svari, sóun á fjármagni.
Fanout skrifa (ýta)
Skrifbeiðni er send í kerfið þegar þú sendir nýja færslu. Skrifbeiðnin er send út til allra fylgjenda þinna til að uppfæra fréttastrauminn sinn með fanout skrifum.
Pro
- Lestrarferlið er ódýrt.
með
- Fyrir notanda með milljónir fylgjenda er skrifa aðferðin er of dýr.
Staða straumsins
Í stað þess að raða straumunum bara í tímaröð, reyna röðunaralgrím í dag að tryggja að atriði sem skipta meira máli séu sett í forgang.
- Veldu þætti sem geta hjálpað þér að ákveða mikilvægi straumsatriðis, eins og fjölda líkara, athugasemda og deilna, hvenær atriðið var síðast uppfært ef greinin inniheldur myndir eða myndbönd og svo framvegis.
- Reiknaðu stigið út frá eiginleikum.
- Notaðu stigið til að raða færslunum.
Settu upp KPI eins og varðveislu notenda, auglýsingatekjur og svo framvegis til að sjá hversu árangursríkt röðunarkerfið okkar er.
Niðurstaða
Þrátt fyrir þá staðreynd að Instagram eða móðurfyrirtæki þess Facebook sé risastórt fyrirtæki hefur það betri skilning á kerfishönnun.
Ég reyndi af fremsta megni að veita þér yfirlit yfir Instagram strauminn á háu stigi.
Ég vona að það hafi verið gagnlegt og að þú notir það vel.
Skildu eftir skilaboð