Edukien aurkibidea[Ezkutatu][Erakutsi]
Instagram Feed zuretzako garrantzitsuak diren pertsonekin eta gauzak partekatzeko eta konektatzeko plataforma bat da. Instagram irekitzen duzunean edo zure jarioa freskatzen duzunean, interesatuko zaizkizun argazkiak eta bideoak goiko aldera agertuko dira.
Albiste-jarioa sistemako beste entitate batzuek sortutako testuak, irudiak edo bideoak dituzten elementuen bilduma da, zuk irakurtzeko zuzenduta daudenak. Beti aldatzen ari da, beste erakunde batzuk argitalpen berriak egiten ari diren bitartean.
Argitalpen honetan, arreta handiz aztertuko dugu Instagramen jarioaren sistemaren diseinua. Beraz, has gaitezen.
1. Baldintzak
Behar funtzionala
- Erabiltzailearen albiste-jarioa erabiltzaileak jarraitu duen edo interesatzen zaion sistemako beste entitateetako mezuetatik sortzen da.
- Testua, irudiak eta bideoak argitalpenetan aurki daitezke.
- Erabiltzailearen albiste-jarioa besteek sortutako argitalpen berriekin eguneratu behar da.
Irizpide ez-funtzionala
- Albiste-jarioen sorrera denbora errealean egin behar da. Azken erabiltzaileak 12 segundoko atzerapena baino ez du jasan behar.
- Argitalpen berri bat eranstea: sistemara bidali ondoren, mezu berri bat albiste-jarioen eskaera batean agertzeko 5 segundo baino gehiago behar izan behar ditu.
2. Ahalmenaren estimazioa
- 2021eko martxoan, munduko biztanleria 7.8 mila milioi pertsona besterik ez da. Munduko biztanleriaren %21 Facebook DAU (Eguneroko Erabiltzaile Aktiboa) eta %32 Facebook MAU (Hileroko Erabiltzaile Aktiboa) (Hileroko Erabiltzaile Aktiboa) dela adierazten du. Hori harrigarria da.
- Egin dezagun eraikitzen ari garen sistemak 1 mila milioi DAU dituela gauzak errazteko.
- Demagun pertsona batek Facebook-en 500 pertsona edo negozio jarraitzen dituela. Talde edo orri bat entitatetzat har daiteke.
Kalkulatutako Trafikoa
Demagun erabiltzaile batek batez beste egunean 10 aldiz deskargatzen duela albiste-jarioa. Beraz, gutxi gorabehera 116K QPS eta 1e10 eskaera dira egunero.
Biltegiratze estimazioak
Demagun, batez beste, erabiltzaile bakoitzaren albiste-jarioko 500 mezu gordetzen ditugula memorian, azkar berreskuratzeko, eta mezu bakoitzak 1KB-ko tamaina duela. Beraz, 500 KB erabiltzaile bakoitzeko, 500 TB DAU guztietarako eta 5000 ordenagailu bakoitzak 100 GB RAM.
3. Sistemetarako APIak
userId (GUID): albiste-jarioa eskuratzen ari den erabiltzailea.
Aukerako aukeren parametroan eremu hauek daude eskuragarri:
- afterPostId (GUID): lortu albiste-jarioa honen ondorengo mezutik. Zehazten ez bada, lortu azken mezuak.
- zenbaketa (kopurua): eskaera bakoitzak itzul ditzakeen gehienezko mezu kopurua. Backend-ak gehienezko kopuru lehenetsia ezartzen du, bat ere ez bada hornitzen.
- excludeReplies (boolearra): erantzunak albiste-jarioan sartzea eragozten du.
- Itzulitako JSONak albiste-jarioen elementuen zerrenda dauka.
4. Datu-base bat diseinatzea
erakundeak
- Erabiltzaileak
- entityId, izena, deskribapena eta denbora-zigilua beharrezkoak diren eremuak dira.
- Eremu hauek beharrezkoak dira: PostId, izenburua, testua, egilearen Id. eta denbora-zigilua.
- denbora-zigilua, URLa eta mediaId
Harremanak
- Beste erabiltzaile edo entitate batzuk erabiltzaile batek jarraitu ditzake. (m:n)
- Egilea-Mezua: erabiltzaileek zein entitateek argitalpenak sor ditzakete. Demagun erabiltzaileek soilik sortu ditzaketela argitalpenak sinpletasunaren mesedetan. (1:n; authorId txertagarria da).
- Mezu bakoitzari euskarriren bat dator. (1:n)
5. Goi Mailako Diseinua
Arkitektura
Fluxuak
Pentsuen ekoizpena
Jayk bere albisteen korrontea eskatzen duenean, sistemak honako hau egingo du:
- Jay-k jarraitzen duen pertsona eta gauza guztien IDak berreskuratu.
- Mezu agregatuak: ID horiek emanda, lortu mezu berrienak, ezagunenak eta garrantzitsuenak.
- Sailkatu mezuak garrantziaren eta denboraren arabera.
- Cachea: gorde sortutako jarioak eta bidali Jayri lehen 20 mezuak.
- Jayk lehenengo 20 mezuak irakurtzen amaitzen duenean, beste eskaera bat bidaltzen da hurrengo 20 mezuak lortzeko.
Pentsuen banaketa
Demagun Jay Aayush jarraitzen ari dela eta Aayush-ek ezer berria argitaratzen duela. Jayren albiste-jarioa sistemak eguneratu beharko du:
- Berreskuratu Aayush-en jarraitzaileen IDak.
- Gehitu artikulu berriak: Gehitu Aayush-en argitalpena ID horien jarraitzaileen albiste-jarioan.
- Sailkatu mezuak garrantziaren eta denboraren arabera.
- Eguneratu sailkapeneko mezuaren cachea.
- Jarraitzaileei mezu berriak argitaratzen direnean jakinarazi behar zaie.
Osagaiak
Erabiltzaileen konexioak web zerbitzariek mantentzen dituzte.
Goian adierazitako prozedurak aplikazio zerbitzariak exekutatzen ditu.
Cachea eta datu-basea:
- Datu-base erlazionalaren erabiltzailea/entitatea
- Datu-base erlazional (post)
- Irudia/bideoaren atributua: Aayush storge
- Datu-base erlazionalaren metadatuak
Zerbitzu pertsonalizatuak:
- Pentsuen ekoizpena
- Jarioen jakinarazpena
6. Diseinu xehatua
Pentsuaren sorrera
Fan-out irakurtzeko inplementazio inozoa:
Inplementazio gaizto honen arazoak honako hauek dira:
- Lagun/jarraitzaile kopuru handia duten erabiltzaileek moteltze nabarmena nabarituko dute, argitalpen kopuru handia bahetu, batu eta sailkatu behar baitugu.
- Erabiltzaile batek bere orria kargatzen duenean, denbora-lerroa eraikitzen dugu. Hau geldoa izan daiteke eta latentzia handia izan dezake.
- Egoera-eguneratze bakoitzak jarraitzaile guztien jarioaren eguneraketak eragingo ditu zuzeneko eguneraketak egiteko. Horrek atzerapen handiak eragin ditzake gure Albisteak Sortzeko Zerbitzuan.
Aurrez kronologia sor dezakegu eta memorian gorde dezakegu eraginkortasuna areagotzeko.
Lineaz kanpoko ekoizpena (Idazketa fan-out)
Erabiltzaileen albisteak memorian etengabe sortzen eta gordetzen dituzten zerbitzari dedikatuak izan ditzakegu. Albiste-jarioa aurrez sortutako eta gordetako kokapenetik bidali dezakegu erabiltzaile batek nahi duenean.
Zenbat jario-elementu gorde behar dira erabiltzailearen jarioak memorian?
Egokitu zure erabilera-jokaeraren arabera.
Erabiltzaile guztientzat albiste-jario bat egin behar al dugu (eta memorian gorde)?
- Sarritan sartzen ez diren pertsonentzat.
- LRU-n oinarritutako cachea hurbilketa sinplea da.
- Irtenbide hobe bat erabiltzaileak nola hasten diren jakitea da. Noiz da? Zein astegunez ari zara hitz egiten?
Jarioaren argitalpena
Fanout zure jarraitzaile guztiei mezu bat bidaltzeko prozesua da.
Fanout irakurri (tira)
Albiste-jario bat eskatzen duzunean, sistemak irakurketa-eskaera bat jasotzen du. Fanout-en irakurketak irakurtzeko eskaera bat bidaltzen die zure jarraitzaile guztiei, haien edukia irakurtzeko eskatuz.
Pros:
- Idazteko prozedura merkea da.
- Datuak irakurtzean, errazagoa da agregazio-algoritmo desberdinak erabiltzea.
Cons:
- Jarraitzaile asko dituen pertsona batentzat, irakurketa eragiketa nahiko garestia da.
- Erabiltzaileek ez dituzte datu freskoak ikusiko haiek atera arte.
- Aldian-aldian azken argitalpenak lortzeko tira egiten dugunean, zaila da tira-kadentzia egokia aurkitzea, eta tira-eskaera gehienek erantzun hutsa itzuliko dute, baliabideak alferrik galduz.
Fanout idazteko (bulkatu)
Idazteko eskaera bat egiten zaio sistemari mezu berri bat bidaltzen duzunean. Idazteko eskaera zure jarraitzaile guztiei bidaltzen zaie beren albisteak eguneratzeko fanout idazketa erabiliz.
per
- Irakurketa prozesua merkea da.
With
- Milioika jarraitzaile dituen erabiltzailearentzat, idatzi prozedura garestiegia da.
Jarioaren maila
Jarioak kronologikoki ordenatu beharrean, gaurko sailkapen-algoritmoek, gainera, garrantzi handiagoa duten elementuak lehenesten direla bermatzen saiatzen dira.
- Aukeratu jario-elementu baten garrantzia erabakitzen lagunduko dizuten faktoreak, hala nola, gustatu izanaren, iruzkinen eta partekatzeen kopurua, elementua azken aldiz eguneratu zeneko denbora artikuluak argazkiak edo bideoak baditu, eta abar.
- Kalkulatu puntuazioa ezaugarrien arabera.
- Erabili puntuazioa mezuak sailkatzeko.
Konfiguratu KPIak, hala nola erabiltzaileen atxikipena, iragarkien diru-sarrerak eta abar, gure sailkapen-sistema zein eraginkorra den ikusteko.
Ondorioa
Instagram edo bere negozio nagusia Facebook korporazio erraldoia den arren, hobeto ulertzen du sistemaren diseinua.
Ahalegin handia egin nuen Instagrameko jarioaren goi-mailako laburpena ematen.
Lagungarria izan dela eta erabilera ona emango diozula espero dut.
Utzi erantzun bat