Tabl Cynnwys[Cuddio][Dangos]
Mae Instagram Feed yn blatfform ar gyfer rhannu a chysylltu â'r bobl a'r pethau sy'n bwysig i chi. Pan fyddwch chi'n agor Instagram neu'n adnewyddu'ch porthiant, bydd y ffotograffau a'r fideos rydyn ni'n meddwl y bydd gennych chi ddiddordeb ynddynt yn dangos tuag at y brig.
Mae'r porthwr newyddion yn gasgliad o eitemau sy'n cynnwys testun, delweddau, neu fideos a grëwyd gan endidau eraill yn y system sydd wedi'u targedu i chi eu darllen. Mae bob amser yn newid, tra bod sefydliadau eraill yn gwneud postiadau newydd.
Yn y swydd hon, byddwn yn edrych yn agos ar ddyluniad system porthiant Instagram. Felly, gadewch i ni ddechrau.
1. Gofynion
Anghenraid swyddogaethol
- Mae porthiant newyddion y defnyddiwr yn cael ei greu o bostiadau gan endidau eraill yn y system y mae'r defnyddiwr wedi'i dilyn neu y mae ganddo ddiddordeb ynddi.
- Gellir dod o hyd i destun, lluniau a fideos i gyd mewn postiadau.
- Dylid diweddaru porthiant newyddion y defnyddiwr gyda phostiadau newydd a grëwyd gan eraill.
Maen prawf anweithredol
- Dylid creu ffrydiau newyddion mewn amser real. Dylai'r defnyddiwr terfynol brofi dim ond 12 eiliad o oedi.
- Atodi postiad newydd: Ni ddylai gymryd mwy na 5 eiliad i bostiad newydd ymddangos mewn cais ffrwd newyddion ar ôl iddo gael ei gyflwyno i'r system.
2. Amcangyfrif Gallu
- Ym mis Mawrth 2021, dim ond 7.8 biliwn o bobl yw poblogaeth y byd. Mae'n dangos bod 21% o boblogaeth y byd yn DAU Facebook (Defnyddiwr Gweithredol Dyddiol) a 32% yn MAU Facebook (Defnyddiwr Gweithredol Misol) (Defnyddiwr Gweithredol Misol). Mae hynny'n anhygoel.
- Gadewch i ni esgus bod gan y system rydyn ni'n ei hadeiladu 1 biliwn DAU i wneud pethau'n haws.
- Tybiwch fod person yn dilyn 500 o bobl neu fusnesau ar Facebook. Gall grŵp neu dudalen gael ei ystyried yn endid.
Traffig Amcangyfrif
Tybiwch fod un defnyddiwr yn lawrlwytho'r porthwr newyddion 10 gwaith y dydd ar gyfartaledd. Felly mae'n tua 116K QPS ac 1e10 o geisiadau bob dydd.
Amcangyfrifon Storio
Tybiwch ein bod yn cadw 500 o negeseuon o borthiant newyddion pob defnyddiwr yn y cof ar gyfartaledd i'w hadalw'n gyflym, a bod pob postiad yn 1KB o ran maint. Felly 500 KB fesul defnyddiwr, 500 TB ar gyfer pob DAU, a 5000 o gyfrifiaduron gyda 100 GB RAM yr un.
3. APIs ar gyfer Systemau
userId (GUID): y defnyddiwr y mae ei borthiant newyddion yn cael ei nôl.
Mae'r meysydd canlynol ar gael yn y paramedr opsiynau dewisol:
- afterPostId (GUID): cael y ffrwd newyddion o'r post yn dilyn yr un hwn. Os na nodir, mynnwch y postiadau diweddaraf.
- cyfrif (nifer): uchafswm nifer y swyddi y gall pob cais eu dychwelyd. Mae'r backend yn gosod uchafswm rhagosodedig os na chaiff ei gyflenwi.
- eisiamhReplies (boolean): yn atal atebion rhag cael eu cynnwys yn y ffrwd newyddion.
- Mae'r JSON a ddychwelwyd yn cynnwys rhestr o eitemau porthiant newyddion.
4. Dylunio Cronfa Ddata
Endidau
- Defnyddiwr
- endidId, enw, disgrifiad, a stamp amser i gyd yn feysydd gofynnol.
- Mae angen y meysydd canlynol: PostId, teitl, testun, authorId, a stamp amser.
- stamp amser, url, a mediaId
Perthynas
- Gall Defnyddiwr neu Endidau Eraill gael eu dilyn gan ddefnyddiwr. (m:n)
- Awdur-Swydd: Gall defnyddwyr ac endidau greu postiadau. Tybiwch mai Defnyddwyr yn unig all greu Postiadau er mwyn symlrwydd. (1:n; mae authorId yn fewnosodadwy).
- Mae rhyw fath o gyfrwng yn cyd-fynd â phob post. (1:n)
5. Dylunio Lefel Uchel
pensaernïaeth
Llif Gwaith
Cynhyrchu porthiant
Pan fydd Jay yn gofyn am ei ffrwd newyddion, bydd y system yn gwneud y canlynol:
- Adalw IDs yr holl bobl a'r pethau y mae Jay yn eu dilyn.
- Postiadau cyfanredol: o ystyried yr IDau hynny, sicrhewch y postiadau mwyaf diweddar, poblogaidd a pherthnasol.
- Trefnwch y postiadau yn ôl eu perthnasedd a'u hamseriad.
- Cache: arbedwch y ffrydiau a grëwyd ac anfonwch yr 20 post gorau at Jay.
- Pan fydd Jay wedi gorffen darllen yr 20 post cyntaf, mae cais arall yn cael ei anfon i gael yr 20 post nesaf.
Dosbarthiad porthiant
Cymerwch fod Jay yn dilyn Aayush a bod Aayush yn postio unrhyw beth newydd. Bydd angen i'r system ddiweddaru porthiant newyddion Jay:
- Adalw IDau dilynwyr Aayush.
- Ychwanegu erthyglau newydd: Ychwanegu post Aayush i'r gronfa newyddion o ddilynwyr y IDau hynny.
- Trefnwch y postiadau yn ôl eu perthnasedd a'u hamseriad.
- Diweddaru storfa'r post graddio.
- Dylid hysbysu dilynwyr pan fydd postiadau newydd yn cael eu cyhoeddi.
cydrannau
Mae cysylltiadau defnyddwyr yn cael eu cynnal gan weinyddion gwe.
Mae'r gweithdrefnau a nodir uchod yn cael eu gweithredu gan weinydd y cais.
Cache a chronfa ddata:
- Defnyddiwr/endid cronfa ddata perthynol
- Cronfa ddata berthynol (post)
- Priodoledd delwedd/fideo: storfa Aayush
- Metadata cronfa ddata perthynol
Gwasanaethau personol:
- Cynhyrchu porthiant
- Hysbysiad o borthiant
6. Dyluniad Manwl
Cynhyrchu porthiant
Fan-allan darllen gweithredu naïf:
Mae problemau gyda’r gweithredu blêr hwn yn cynnwys:
- Bydd defnyddwyr sydd â nifer fawr o ffrindiau/dilynwyr yn sylwi ar arafu sylweddol gan fod yn rhaid i ni ddidoli, uno a graddio nifer fawr o bostiadau.
- Pan fydd defnyddiwr yn llwytho ei dudalen, rydym yn adeiladu'r llinell amser. Gall hyn fod yn araf a chael llawer o hwyrni.
- Bydd pob diweddariad statws yn arwain at ddiweddariadau porthiant i bob dilynwr ar gyfer diweddariadau byw. Gall hyn achosi oedi sylweddol yn ein Gwasanaeth Cynhyrchu Newyddion.
Gallwn rag-gynhyrchu'r gronoleg a'i chadw yn y cof i gynyddu effeithlonrwydd.
Cynhyrchu All-lein (Ysgrifennwch Fan-allan)
Gallwn gael gweinyddwyr pwrpasol sy'n creu ac yn storio newyddion defnyddwyr yn y cof yn gyson. Gallwn ddosbarthu'r porthiant newyddion o'r lleoliad a gynhyrchwyd ymlaen llaw, a arbedwyd pryd bynnag y mae defnyddiwr ei eisiau.
Sawl eitem porthiant ddylai porthiant defnyddiwr gael ei storio yn y cof?
Addaswch yn seiliedig ar eich ymddygiad defnydd.
A ddylem ni wneud porthiant newyddion i bob defnyddiwr (a'i gadw yn y cof)?
- Ar gyfer pobl nad ydynt yn mewngofnodi yn aml iawn.
- Mae caching seiliedig ar LRU yn ddull syml.
- Ateb gwell yw darganfod sut mae defnyddwyr yn mewngofnodi. Pryd mae e? Am ba ddyddiau o'r wythnos ydych chi'n siarad?
Cyhoeddi porthiant
Fanout yw'r broses o anfon post at bob un o'ch dilynwyr.
Fanout darllen (tynnu)
Pan fyddwch yn gofyn am lif newyddion, mae'r system yn derbyn cais darllen. Mae Fanout read yn anfon cais darllen at bob un o'ch dilynwyr, gan ofyn iddynt ddarllen eu cynnwys.
Manteision:
- Mae'r drefn o ysgrifennu yn rhad.
- Wrth ddarllen data, mae'n haws defnyddio algorithmau cydgasglu amrywiol.
Cons:
- I berson sydd â llawer o ddilynwyr, mae'r llawdriniaeth ddarllen braidd yn ddrud.
- Ni fydd defnyddwyr yn gweld data ffres nes iddynt ei dynnu.
- Pan fyddwn yn tynnu i nôl y postiadau mwyaf diweddar yn rheolaidd, mae'n anodd dod o hyd i'r diweddeb tynnu cywir, a bydd y rhan fwyaf o geisiadau tynnu yn dychwelyd ateb gwag, gan wastraffu adnoddau.
Fanout ysgrifennu (gwthio)
Gwneir cais ysgrifennu i'r system pan fyddwch yn anfon post newydd. Anfonir y cais ysgrifennu at bob un o'ch dilynwyr i ddiweddaru eu ffrwd newyddion gan ddefnyddio 'fanout write'.
pro
- Mae'r broses ddarllen yn rhad.
gyda
- Ar gyfer defnyddiwr gyda miliynau o ddilynwyr, mae'r ysgrifennu mae'r weithdrefn yn rhy ddrud.
Gradd yr Ymborth
Yn hytrach na dim ond archebu'r porthwyr yn gronolegol, mae algorithmau graddio heddiw hefyd yn ceisio gwarantu bod eitemau mwy perthnasol yn cael eu blaenoriaethu.
- Dewiswch ffactorau a all eich helpu i benderfynu ar berthnasedd eitem porthiant, megis nifer yr hoff bethau, sylwadau, a chyfranddaliadau, yr amser y cafodd yr eitem ei diweddaru ddiwethaf os yw'r erthygl yn cynnwys lluniau neu fideos, ac ati.
- Cyfrifwch y sgôr yn seiliedig ar y nodweddion.
- Defnyddiwch y sgôr i raddio'r postiadau.
Sefydlu DPA fel cadw defnyddwyr, incwm hysbysebion, ac yn y blaen i weld pa mor effeithiol yw ein system raddio.
Casgliad
Er gwaethaf y ffaith bod Instagram neu ei riant fusnes Facebook yn gorfforaeth enfawr, mae ganddo ddealltwriaeth well o dylunio system.
Ceisiais fy ngorau glas i roi crynodeb lefel uchel i chi o'r porthiant Instagram.
Rwy'n gobeithio ei fod yn ddefnyddiol ac y byddwch yn ei ddefnyddio'n dda.
Gadael ymateb