Sisällysluettelo[Piilottaa][Näytä]
Instagram Feed on alusta, jolla voit jakaa ja pitää yhteyttä sinulle tärkeisiin ihmisiin ja asioihin. Kun avaat Instagramin tai päivität syötteesi, valokuvat ja videot, joista uskomme sinua kiinnostavan, näkyvät yläosassa.
Uutissyöte on kokoelma kohteita, jotka sisältävät tekstiä, kuvia tai videoita, jotka ovat järjestelmän muiden entiteettien luomia ja jotka on tarkoitettu sinulle luettavaksi. Se muuttuu aina, kun muut organisaatiot tekevät uusia viestejä.
Tässä viestissä tarkastelemme tarkasti Instagram-syötteen järjestelmäsuunnittelua. Joten aloitetaan.
1. vaatimukset
Toiminnallinen välttämättömyys
- Käyttäjän uutissyöte luodaan muiden järjestelmän entiteettien viesteistä, joita käyttäjä on seurannut tai joista hän on kiinnostunut.
- Teksti, kuvat ja videot löytyvät kaikki viesteistä.
- Käyttäjän uutissyöte tulee päivittää muiden luomilla uusilla julkaisuilla.
Ei-toiminnallinen kriteeri
- Uutissyötteiden luomisen tulisi tapahtua reaaliajassa. Loppukäyttäjän pitäisi kokea vain 12 sekunnin viive.
- Uuden viestin liittäminen: Uuden postauksen ilmestyminen uutissyötepyyntöön ei saa kestää yli 5 sekuntia sen jälkeen, kun se on lähetetty järjestelmään.
2. Kapasiteetin arvio
- Maaliskuussa 2021 maailman väkiluku on vain 7.8 miljardia ihmistä. Se osoittaa, että 21 % maailman väestöstä on Facebook DAU (Daily Active User) ja 32 % on Facebook MAU (Monthly Active User) (Monthly Active User). Se on hämmästyttävää.
- Oletetaan, että rakentamassamme järjestelmässä on miljardi DAU:ta asioiden helpottamiseksi.
- Oletetaan, että henkilö seuraa 500 ihmistä tai yritystä Facebookissa. Ryhmää tai sivua voidaan pitää kokonaisuutena.
Arvioitu liikenne
Oletetaan, että yksi käyttäjä lataa uutissyötteen keskimäärin 10 kertaa päivässä. Joten se on noin 116 1 QPS ja 10eXNUMX pyyntöä joka päivä.
Varastoinnin arviot
Oletetaan, että säilytämme muistissa keskimäärin 500 viestiä kunkin käyttäjän uutissyötteestä nopeaa hakua varten, ja jokainen viesti on kooltaan 1 kt. Joten 500 kt käyttäjää kohti, 500 TB kaikille DAU:ille ja 5000 tietokonetta, joissa kussakin on 100 Gt RAM-muistia.
3. Sovellusliittymät järjestelmille
userId (GUID): käyttäjä, jonka uutissyöte noudetaan.
Seuraavat kentät ovat käytettävissä valinnaisessa vaihtoehtoparametrissa:
- afterPostId (GUID): hanki uutissyöte tätä seuraavasta viestistä. Jos ei ole määritetty, hanki uusimmat viestit.
- määrä (lukumäärä): viestien enimmäismäärä, jonka jokainen pyyntö voi palauttaa. Taustaohjelma määrittää oletusarvoisen enimmäismäärän, jos sitä ei ole annettu.
- includeReplies (looginen): estää vastausten sisällyttämisen uutissyötteeseen.
- Palautettu JSON sisältää luettelon uutissyötekohteista.
4. Tietokannan suunnittelu
yhteisöt
- käyttäjä
- entityId, nimi, kuvaus ja aikaleima ovat kaikki pakollisia kenttiä.
- Seuraavat kentät ovat pakollisia: PostId, title, text, authorId ja timestamp.
- aikaleima, url ja mediaId
Ihmissuhteet
- Käyttäjä voi seurata muita käyttäjiä tai entiteettejä. (m:n)
- Author-post: Sekä käyttäjät että entiteetit voivat luoda viestejä. Oletetaan, että vain Käyttäjät voivat luoda viestejä yksinkertaisuuden vuoksi. (1:n; authorId on upotettava).
- Jokaiseen viestiin liittyy jonkinlainen media. (1:n)
5. Korkean tason suunnittelu
arkkitehtuuri
työnkulkuja
Rehun tuotanto
Kun Jay pyytää uutisvirtaansa, järjestelmä tekee seuraavaa:
- Hae kaikkien Jayn seuraamien ihmisten ja asioiden tunnukset.
- Kootut viestit: hanki uusimmat, suosituimmat ja asiaankuuluvat viestit näiden tunnuksien perusteella.
- Järjestä viestit niiden osuvuuden ja ajoituksen mukaan.
- Välimuisti: tallenna luodut syötteet ja lähetä Jaylle 20 parasta viestiä.
- Kun Jay on lukenut ensimmäiset 20 viestiä, lähetetään uusi pyyntö saada seuraavat 20 viestiä.
Rehun jakelu
Oletetaan, että Jay seuraa Aayushia ja että Aayush julkaisee jotain uutta. Järjestelmän on päivitettävä Jayn uutissyöte:
- Hae Aayushin seuraajien tunnukset.
- Lisää uusia artikkeleita: Lisää Aayushin viesti näiden tunnusten seuraajien uutissyötteeseen.
- Järjestä viestit niiden osuvuuden ja ajoituksen mukaan.
- Päivitä sijoitusviestin välimuisti.
- Seuraajille tulee ilmoittaa, kun uusia julkaisuja julkaistaan.
komponentit
Käyttäjien yhteyksiä ylläpitävät web-palvelimet.
Sovelluspalvelin suorittaa yllä mainitut toimenpiteet.
Välimuisti ja tietokanta:
- Relaatiotietokannan käyttäjä/entiteetti
- Relaatiotietokanta (viesti)
- Kuvan/videon attribuutti: Aayush storge
- Relaatiotietokannan metatiedot
Yksilölliset palvelut:
- Rehun tuotanto
- Ilmoitus syötteistä
6. Yksityiskohtainen suunnittelu
Rehun sukupolvi
Fan-out lukea naiivi toteutus:
Tämän huolimattoman toteutuksen ongelmia ovat mm.
- Käyttäjät, joilla on paljon ystäviä/seuraajia, huomaavat merkittävän hidastumisen, koska meidän on seulottava, yhdistettävä ja järjestettävä suuri määrä julkaisuja.
- Kun käyttäjä lataa sivunsa, rakennamme aikajanan. Tämä voi olla hidasta ja siinä voi olla paljon latenssia.
- Jokainen tilapäivitys johtaa syötepäivityksiin kaikille seuraajille live-päivityksiä varten. Tämä voi aiheuttaa merkittäviä viiveitä uutissyötteiden luontipalvelussamme.
Voimme luoda kronologian etukäteen ja tallentaa sen muistiin tehokkuuden lisäämiseksi.
Offline-tuotanto (fan-out-kirjoitus)
Meillä voi olla omat palvelimet, jotka luovat ja tallentavat jatkuvasti käyttäjien uutissyötteitä muistiin. Voimme vain toimittaa uutissyötteen valmiiksi luodusta, tallennetusta sijainnista aina, kun käyttäjä sitä haluaa.
Kuinka monta syötekohdetta käyttäjän syöte tulee tallentaa muistiin?
Mukauta käyttökäyttäytymisesi perusteella.
Pitäisikö meidän tehdä uutissyöte kaikille käyttäjille (ja säilyttää se muistissa)?
- Ihmisille, jotka eivät kirjaudu sisään kovin usein.
- LRU-pohjainen välimuisti on yksinkertainen tapa.
- Parempi ratkaisu on selvittää, kuinka käyttäjät kirjautuvat sisään. Milloin se on? Mistä arkipäivistä puhut?
Rehun julkaiseminen
Fanout on prosessi, jossa lähetetään viesti kaikille seuraajillesi.
Fanout lue (vedä)
Kun pyydät uutissyötettä, järjestelmä vastaanottaa lukupyynnön. Fanout read lähettää lukupyynnön kaikille seuraajillesi ja pyytää heitä lukemaan heidän sisältönsä.
Plussat:
- Kirjoitusprosessi on edullinen.
- Dataa luettaessa on helpompi käyttää erilaisia aggregointialgoritmeja.
Miinukset:
- Ihmiselle, jolla on paljon seuraajia, lukutoiminto on melko kallista.
- Käyttäjät eivät näe tuoretta dataa ennen kuin he hakevat ne.
- Kun haemme säännöllisesti viimeisimmät viestit, on vaikea löytää oikeaa vetoa, ja useimmat vetopyynnöt palauttavat tyhjän vastauksen, mikä tuhlaa resursseja.
Fanout kirjoittaa (push)
Järjestelmään tehdään kirjoituspyyntö, kun lähetät uuden viestin. Kirjoituspyyntö lähetetään kaikille seuraajillesi, jotta he voivat päivittää uutissyötteen fanout-kirjoituksen avulla.
kohti
- Lukuprosessi on edullinen.
kanssa
- Käyttäjälle, jolla on miljoonia seuraajia, kirjoittaa menettely on liian kallis.
Syötteen sijoitus
Sen sijaan, että syötteet järjestettäisiin vain kronologisesti, nykyiset luokitusalgoritmit yrittävät lisäksi taata, että merkityksellisemmät kohteet asetetaan etusijalle.
- Valitse tekijöitä, jotka voivat auttaa sinua päättämään syötekohteen osuvuudesta, kuten tykkäysten, kommenttien ja jakojen määrä, ajankohta, jolloin kohde on viimeksi päivitetty, jos artikkeli sisältää valokuvia tai videoita ja niin edelleen.
- Laske pisteet ominaisuuksien perusteella.
- Käytä pistemäärää postausten luokitteluun.
Määritä KPI:t, kuten käyttäjien säilyttäminen, mainostulot ja niin edelleen, jotta näet, kuinka tehokas sijoitusjärjestelmämme on.
Yhteenveto
Huolimatta siitä, että Instagram tai sen emoyritys Facebook on valtava yritys, se ymmärtää paremmin Järjestelmäsuunnittelu.
Yritin parhaani mukaan tarjota sinulle korkeatasoisen yhteenvedon Instagram-syötteestä.
Toivottavasti siitä oli apua ja käytät sitä hyvään käyttöön.
Jätä vastaus