Table of Contents[Veşartin][Rêdan]
Feed Instagram ji bo parvekirin û girêdana bi kes û tiştên ku ji we re girîng in platformek e. Gava ku hûn Instagram-ê vekin an pêdadana xwe nûve bikin, wêne û vîdyoyên ku em difikirin ku hûn ê eleqedar bibin dê ber bi jor ve nîşan bidin.
Gotara nûçeyan berhevokek ji tiştên ku tê de nivîs, wêne, an vîdyoyên ku ji hêla saziyên din ên pergalê ve hatine çêkirin hene ku ji bo xwendinê têne armanc kirin. Ew her gav diguhere, dema ku rêxistinên din postên nû çêdikin.
Di vê postê de, em ê ji nêz ve li sêwirana pergalê ya feed Instagram binêrin. Ji ber vê yekê, em dest pê bikin.
1. Pêdivî ye
Pêdiviya fonksiyonê
- Nûçeya bikarhêner ji postên saziyên din ên pergalê ku bikarhêner şopandiye an jê re eleqedar e tê afirandin.
- Nivîs, wêne û vîdyo hemî di postan de têne dîtin.
- Pêdivî ye ku nûçeyên bikarhêner bi postên nû yên ku ji hêla kesên din ve hatine çêkirin ve were nûve kirin.
Pîvana ne-fonksîyonel
- Divê çêkirina nûçeyên nûçeyan di wextê rast de pêk were. Pêdivî ye ku bikarhênerê dawî tenê 12 çirkeyan dereng biceribîne.
- Zêdekirina postek nû: Ji bo ku postek nû piştî ku ji pergalê re were şandin, di daxwaznameyek nûçeyek nû de xuya bibe divê ji 5 saniyan zêdetir nebe.
2. Texmîna Kapasîteyê
- Ji Adara 2021-an vir ve, nifûsa cîhanê tenê 7.8 mîlyar kes e. Ew destnîşan dike ku 21% ji nifûsa cîhanê Facebook DAU (Bikarhênerek Çalak a Rojane) û 32% Facebook MAU (Bikarhênerek Çalak a mehane) (Bikarhênerek Çalak a mehane) ye. Ew ecêb e.
- Werin em wisa bikin ku pergala ku em ava dikin 1 mîlyar DAU heye da ku tiştan hêsantir bikin.
- Bihesibînin ku kesek 500 kes an karsazî li ser Facebookê dişopîne. Komek an rûpelek dikare wekî saziyek were hesibandin.
Trafîka texmînkirî
Bihesibînin ku bikarhênerek rojane bi navînî 10 caran nûçeyan dakêşîne. Ji ber vê yekê ew her roj bi qasî 116K QPS û 1e10 daxwaz e.
Texmînên Storage
Bihesibînin ku em 500 mesajan ji nûçeyên her bikarhênerek ji bo vegerandina bilez di bîranînê de diparêzin, û mezinahiya her postê 1KB ye. Ji ber vê yekê 500 KB her bikarhênerek, 500 TB ji bo hemî DAU-yan, û 5000 komputerên ku her yek 100 GB RAM hene.
3. APIs ji bo Systems
userId (GUID): bikarhênerê ku nûçeyên wî têne wergirtin.
Zeviyên jêrîn di parametreya vebijarkên vebijarkî de hene:
- afterPostId (GUID): nûçeyê ji posta li dû vê yekê bistînin. Ger ne diyar be, postên herî dawî bistînin.
- jimartin (hejmar): hejmara herî zêde ya postên ku her daxwazek dikare vegere. Ger yek neyê peyda kirin, paşîn hejmarek herî zêde ya xwerû destnîşan dike.
- ExcludeReplies (boolean): nahêle ku bersiv di nav nûçeyan de cih bigirin.
- JSON-a ku hatî vegerandin navnîşek nûçeyên nûçeyê vedihewîne.
4. Dîzaynkirina Database
Kesên
- Bikaranîvan
- entityId, nav, danasîn, û mohra demê hemî qadên pêwîst in.
- Zeviyên jêrîn hewce ne: PostId, sernav, nivîs, nivîskarId, û demjimar.
- timestamp, url, û mediaId
Peywendîyên
- Bikarhêner an Saziyên din dikarin ji hêla bikarhênerek ve werin şopandin. (m:n)
- Nivîskar-Post: Hem bikarhêner û hem jî sazî dikarin postan biafirînin. Bifikirin ku tenê Bikarhêner dikarin ji bo sadebûnê Mesajan biafirînin. (1: n; nasnameyê nivîskarê binavkirî ye).
- Her post bi hin formên medyayê ve tê. (1:n)
5. Design-Asta Bilind
avakarî
Workflows
Hilberîna xwarinê
Dema ku Jay weşana nûçeya xwe daxwaz dike, pergal dê jêrîn bike:
- Nasnameyên hemî kes û tiştên ku Jay dişopîne bistînin.
- Mesajên tevhev: ji ber wan nasnameyan, postên herî dawî, populer û têkildar bistînin.
- Mesajan li gorî têkildarî û dema wan rêz bikin.
- Cache: Feydeyên çêkirî hilînin û Jay 20 postên jorîn bişînin.
- Dema ku Jay xwendina 20 postên pêşîn qedand, daxwazek din tê şandin ku 20 postên din bistînin.
Dabeşkirina xwarinê
Bifikirin ku Jay Aayush dişopîne û ku Aayush tiştek nû dişîne. Pêdivî ye ku nûçeya Jay ji hêla pergalê ve were nûve kirin:
- Nasnameyên şopînerên Eyûş bistînin.
- Gotarên nû lê zêde bikin: Mesaja Aayush li hewza nûçeyan a şopînerên wan nasnameyan zêde bikin.
- Mesajan li gorî têkildarî û dema wan rêz bikin.
- Keşeya posta rêzgirtinê nûve bikin.
- Dema ku postên nû têne weşandin divê şopîner werin agahdar kirin.
Components
Têkiliyên bikarhêneran ji hêla serverên malperê ve têne parastin.
Pêvajoyên ku li jor hatine destnîşan kirin ji hêla servera serîlêdanê ve têne darve kirin.
Cache û databas:
- Bikarhêner / saziyek databasa têkildar
- Databasa peywendîdar (post)
- Taybetmendiya wêne / vîdyoyê: Aayush storge
- Metadata databasa Têkilî
Xizmetên Kesane:
- Hilberîna xwarinê
- Agahdariya feeds
6. Design Detailed
Nifşa xwarinê
Fan-out xwendin pêkanîna naive:
Pirsgirêkên bi vê pêkanîna şikestî ev in:
- Bikarhênerên ku hejmareke mezin ji heval / şopînerên wan hene dê hêdîbûnek girîng bibînin ji ber ku pêdivî ye ku em hejmareke mezin ji postan bişopînin, hev bikin û rêz bikin.
- Dema ku bikarhêner rûpela xwe bar dike, em rêzika demê ava dikin. Ev dikare sist be û gelek dereng be.
- Her nûvekirina statûyê dê ji bo nûvekirinên zindî ji bo hemî şagirtan nûvekirinên xwarinê encam bide. Ev dikare bibe sedema derengiyên girîng di Karûbarê meya Nifşê Newsfeed de.
Em dikarin kronolojiyê pêş-hilberînin û wê di bîranînê de hilînin da ku karbidestiyê zêde bikin.
Hilberîna Offline (Nivîsandina Fan-out)
Em dikarin serverên veqetandî hebin ku bi berdewamî nûçeyên bikarhêneran di bîranînê de diafirînin û hilînin. Dema ku bikarhênerek bixwaze, em dikarin tenê nûçeyê ji cîhê pêş-hilberandî û tomarkirî radest bikin.
Divê fêdeya bikarhênerek çend tiştên xwarinê di bîranînê de were hilanîn?
Li ser bingeha tevgera karanîna xwe adapte bikin.
Ma divê em ji bo hemî bikarhêneran nûçeyek çêbikin (û wê di bîranînê de biparêzin)?
- Ji bo kesên ku pir caran têkevinê nakin.
- Caching-based LRU rêgezek hêsan e.
- Çareseriyek çêtir ew e ku meriv fêr bibe ka bikarhêner çawa têketinê dikin. Kengî ye? Hûn behsa kîjan rojên hefteyê dikin?
Weşana feed
Fanout pêvajoya şandina postek ji hemî şagirtên we re ye.
Fanout xwendin (kişandin)
Dema ku hûn nûçeyek daxwaz dikin, pergal daxwaznameyek xwendinê distîne. Fanout xwendina daxwazek xwendinê ji hemî şagirtên we re dişîne, ji wan dipirse ku naveroka xwe bixwînin.
Pros:
- Prosedûra nivîsandinê erzan e.
- Dema ku daneyan dixwînin, karanîna cûrbecûr algorîtmayên berhevkirinê hêsantir e.
Neyînî:
- Ji bo kesek ku gelek şopînerên wê hene, operasyona xwendinê pir biha ye.
- Bikarhêner dê daneyên nû nebînin heya ku ew nekişînin.
- Gava ku em dikişînin ku bi rêkûpêk postên herî paşîn bistînin, dijwar e ku meriv kadrêya kişandinê ya rast bibîne, û pir daxwazên kişandinê dê bersivek vala vegerînin, çavkaniyan winda bikin.
Fanout nivîsandin (push)
Dema ku hûn postek nû dişînin daxwazek nivîsandinê ji pergalê re tê kirin. Daxwaza nivîsandinê ji hemî şagirtên we re tê şandin da ku nûçeyên xwe bi karanîna nivîsandina fanout nûve bikin.
her
- Pêvajoya xwendinê erzan e.
Con
- Ji bo bikarhênerek ku bi mîlyonan şopînerên wê hene, ya nivîsîn prosedurek pir biha ye.
Rêjeya Feed
Li şûna ku tenê guheztinan bi kronolojîk rêz bikin, algorîtmayên rêzgirtinê yên îroyîn jî hewil didin ku garantî bidin ku tiştên ku bi girîngiya wan mezintir têne pêşîn kirin.
- Faktorên ku dikarin ji we re bibin alîkar ku hûn li ser têkildariya madeyek xwarinê biryar bidin hilbijêrin, wek mînak hejmara ecibandin, şîrove û parvekirinê, dema ku babete herî dawî hate nûve kirin heke gotar wêne an vîdyoy hebe, û hwd.
- Pûan li gorî taybetmendiyan hesab bikin.
- Pûan bikar bînin da ku postan rêz bikin.
KPI-yên mîna ragirtina bikarhêner, hatina reklamê, û hwd saz bikin da ku hûn bibînin ka pergala meya rêzgirtinê çiqas bandorker e.
Xelasî
Tevî vê rastiyê ku Instagram an karsaziya dêûbavê wê Facebook pargîdaniyek mezin e, ew têgihîştinek çêtir heye sêwirana pergalê.
Min herî zêde hewl da ku ji we re kurteyek asta bilind a pêveka Instagram peyda bikim.
Ez hêvî dikim ku ew arîkar bû û hûn ê wê baş bikar bînin.
Leave a Reply