Ang dagkong mga aplikasyon sa online dugay na nga naabot sa miaging duha ka dekada. Kini nga mga inobasyon nagbag-o sa among mga panglantaw sa pagpalambo sa software. Pananglitan, ang Facebook, Instagram, ug Twitter, tanan nga mga scalable platform.
Kini nga mga sistema kinahanglan nga matukod aron madumala ang daghang mga volume sa trapiko ug datos tungod kay bilyon-bilyon nga mga tawo ang naggamit niini sa parehas nga oras sa tibuuk kalibutan. Kini mao ang sa diha nga disenyo sa sistema nisulod sa picture.
Ang proseso sa pag-establisar sa arkitektura, mga interface, ug mga datos alang sa usa ka sistema nga nakab-ot sa piho nga mga pamatasan nailhan nga disenyo sa sistema. Pinaagi sa nagkahiusa ug episyente nga mga sistema, ang disenyo sa sistema nagtagbaw sa mga gipangayo sa imong negosyo o organisasyon.
Kung matino na sa imong kompanya o organisasyon ang mga pamatasan niini, mahimo nimong sugdan ang pag-apil niini sa usa ka disenyo sa pisikal nga sistema nga makatubag sa mga gipangayo sa imong mga konsumedor.
Kung gipili nimo ang pag-uban sa pinasadya nga pag-uswag, mga solusyon sa komersyo, o kombinasyon sa duha, kung giunsa nimo pagdesinyo ang imong sistema ang magtino kung giunsa nimo kini paghimo.
Atong tan-awon ang usa ka detalyado nga pagtan-aw sa disenyo sa sistema sa timeline sa Twitter sa kini nga post, kompleto sa usa ka panudlo. Magsugod na ta.
Lakang 1: Outline ang kaso sa paggamit ug mga limitasyon
Gamit nga kaso
- Usa ka user nag-upload og tweet.
- Ang serbisyo nagpadala sa mga pahibalo sa pagduso ug mga email sa mga sumusunod sa mga tweet.
- Ang timeline sa user gitan-aw (kalihokan gikan sa user)
- Ang user motan-aw sa home timeline (kalihokan gikan sa mga tawo nga gisunod sa user)
- Ang mga keyword gipangita sa tiggamit.
- Ang serbisyo ma-access gyud.
Wala sa kasangkaran
- Ang mga tweet gipadala sa Twitter Firehose ug uban pang mga sapa gamit kini nga serbisyo.
- Gikuha sa serbisyo ang mga tweet base sa mga setting sa visibility sa user.
- Kung ang user dili usab mosunod sa tawo nga gitubag, itago ang tubag.
- Tan-awa ang opsyon nga 'itago ang mga retweet'.
- Analytics
Mga limitasyon ug mga pangagpas
Mga Assumption sa Estado
- Ang trapiko dili parehas nga pagkatibulaag.
- Kini kinahanglan nga yano nga magpadala usa ka tweet.
- Gawas kung adunay ka milyon-milyon nga mga tagasunod, ang pagpadala usa ka tweet sa tanan nimong mga tagasunod kinahanglan nga dali.
- Adunay 100 milyon nga aktibo nga tiggamit.
- 15 bilyon nga tweet matag bulan o 500 milyon nga tweet matag adlaw
- Ang matag tweet adunay usa ka fanout nga 10 nga pagpadala sa kasagaran.
- Kada adlaw, ang fanout naghatod ug 5 ka bilyong tweets.
- Naghatag ang Fanout og 150 bilyon nga tweet matag bulan.
- 250 bilyon nga binulan nga mga hangyo sa pagbasa
- 10 bilyon nga binulan nga pagpangita
Timeline
- Ang timeline kinahanglan nga sayon sa pag-navigate.
- Ang Twitter labi pa bahin sa pagbasa kaysa pagsulat.
- Pag-optimize alang sa dali nga pagbasa sa tweet
- Ang pagkonsumo sa tweet nag-usik sa oras.
Pangita
- Ang proseso sa pagpangita kinahanglan nga dali.
- Ubos sa panahon ang pagpangita.
Kalkulahin ang paggamit
Gidak-on sa matag tweet:
- 8 bytes nga tweet id
- 32 bytes user-id
- 140 bytes sa teksto
- media – aberids nga 10 KB
- Kinatibuk-ang: ~10 KB
Matag bulan, 150 TB sa bag-ong tweet content ang namugna.
- * 500 milyon nga mga tweet matag adlaw * 30 ka adlaw matag bulan * 10 KB matag tweet
- Sa tulo ka tuig, adunay 5.4 PB sa bag-ong tweet content.
Adunay 100,000 nga mga hangyo sa pagbasa matag segundo.
- * (400 ka hangyo matag segundo / 1 bilyon nga hangyo matag bulan) 250 bilyon nga pagbasa nga hangyo matag bulan
Adunay 6,000 ka tweet matag segundo.
- * (400 nga mga hangyo matag segundo / 1 bilyon nga hangyo matag bulan) 15 bilyon nga mga tweet matag bulan
Sa fanout, 60 ka libo ka mga tweet ang ipadala kada segundo.
- Ang Fanout naghatud ug 150 ka bilyong tweet kada bulan* (400 ka hangyo kada segundo / 1 ka bilyon nga hangyo kada bulan).
4,000 ka hangyo alang sa impormasyon matag segundo
- * (400 ka hangyo matag segundo / 1 bilyon nga hangyo matag bulan) 10 bilyon nga pagpangita matag bulan
Pipila ka mapuslanon nga pagkakabig
- Kada bulan, 2.5 milyones ka segundos ang molabay.
- 2.5 milyon nga mga hangyo matag bulan sa 1 nga hangyo matag segundo
- 100 milyon nga mga hangyo matag bulan x 40 nga mga hangyo matag segundo
- 1 bilyon nga hangyo matag bulan = 400 nga hangyo matag segundo
Lakang 2: Taas nga lebel nga diagram
Lakang 3: Pagpatin-aw sa kinauyokan nga mga sangkap
Mahimo namon nga i-save ang kaugalingon nga mga tweet sa tiggamit aron mapuno ang timeline sa gumagamit (kalihokan gikan sa tiggamit) sa usa ka relational database kung magsumite sila usa ka tweet. Mas lisud ang paghatud sa mga tweet ug paghimo sa timeline sa balay (kalihokan gikan sa mga indibidwal nga gisundan sa tiggamit).
Ang usa ka tipikal nga relational database mahimong mabug-atan pinaagi sa pagpalupad sa mga tweet sa tanan nga mga sumusunod (60 ka libo nga mga tweet nga gihatag matag segundo). Tingali gusto namong moadto sa usa ka paspas nga pagsulat sa pagtipig sa datos sama sa database sa NoSQL o Memory Cache.
Ang pagbasa sa 1 MB nga sunud-sunod gikan sa memorya nagkinahanglan og halos 250 microseconds, apan ang pagbasa gikan sa SSD nagkinahanglan og 4 ka beses ang gitas-on, ug ang pagbasa gikan sa disk nagkinahanglan og 80 ka pilo ang gitas-on.
Ang usa ka Tindahan sa Butang mahimong magamit sa pagtipig sa datos sama sa mga imahe ug mga video.
- Ang Web Server, nga naglihok isip reverse proxy, nakadawat og tweet gikan sa Kliyente.
- Ang hangyo gipadala ngadto sa Write API server sa Web Server.
- Ang Write API nagtipig sa tweet sa usa ka database sa SQL sa timeline sa user.
Ang Fan-Out Service gikontak sa Write API, ug kini naghimo sa mosunod nga mga buluhaton.
- Pangitaa ang mga sumusunod sa user sa Memory Cache pinaagi sa pagpangutana sa User Graph Service.
- Sa usa ka Memory Cache, ang tweet gitipigan sa timeline sa balay sa mga sumusunod sa user.
- 1,000 followers = 1,000 lookups ug inserts = O(n) operation.
- Ang tweet gitipigan sa Search Index Service alang sa dali nga pagpangita.
- Ang Object Store gigamit sa pagtipig sa media.
- Nagpadala mga alerto sa pagduso sa mga sumusunod pinaagi sa Serbisyo sa Pagpahibalo.
- Aron ipadala ang mga alert nga asynchronously, naggamit kini og Queue.
Mahimo natong gamiton ang usa ka lumad nga listahan sa Redis nga adunay mosunod nga istruktura kung ang atong Memory Cache kay Redis:
Ang timeline sa balay sa user ma-update sa bag-ong tweet, nga itago sa Memory Cache. Atong gamiton ang mosunod nga publikong REST API:
Ang timeline sa user gitan-aw sa user.
- Ang Web Server nakadawat og hangyo sa timeline sa user gikan sa Kliyente.
- Ang hangyo gipadala ngadto sa Read API server sa Web Server.
- Ang Read API nangutana sa SQL Database alang sa timeframe sa user.
Ang REST API molihok nga parehas sa timeline sa balay, gawas nga ang tanan nga mga tweet maggikan sa tiggamit kaysa sa mga tawo nga ilang gisundan.
Ang usa ka tiggamit nangita alang sa mga keyword:
- Ang Web Server nakadawat usa ka hangyo sa pagpangita gikan sa Kliyente.
- Ang hangyo gipadala ngadto sa Search API server sa Web Server.
Lakang 4: Twitter timeline
Ang paghimo sa timeline usa ka lisud nga buluhaton. Gikinahanglan ang usa ka timeline generating server nga nag-link sa web o application server.
Matag higayon nga mag-sign in ang usa ka user, ang serbisyo sa timeline nagmintinar sa track sa pinakabag-o nga mga tweet gikan sa mga tiggamit sa lamesa sa follower ug nag-update o nag-refresh sa timeline sa user.
Wala kami mag-implementar og bisan unsang matang sa sistema sa pagranggo dinhi; sa baylo, atong gituohan nga ang top 5 tweets gikan sa user's followers gipresentar sa timeline sa han-ay sa panahon sa paghimo. Mahimo namon nga magpadayon ang usa ka 50-tweet nga pag-refresh cutoff. Mohunong gihapon mi sa pag-refresh o paghimo og timeline human maabot ang threshold hangtod nga ma-refresh sa user ang panid.
Ang taas nga latency ug mga kabalaka sa performance magagikan sa paghimo sa live user feed. Hinuon, ang paghimo ug offline nga sapa nga mahimong ipresentar dayon mao ang labing kaayo nga paagi aron mapaayo ang pasundayag. Pagdalag dedikado nga timeline server nga regular nga nag-ping sa application server aron i-refresh ang feed base sa panahon nga kini gibuhat.
Kinahanglang tagdon sa algorithm sa ranggo ang hinungdanon nga mga signal ug maghatag gibug-aton aron magarantiya nga ang timeline sa usa ka tiggamit wala gidominar sa materyal gikan sa usa o daghan pa nga mga account nga ilang gisundan.
Sa mas tukma, makapili kita og mga feature nga may kalabutan sa kalambigitan sa bisan unsang feed item, sama sa gidaghanon sa mga likes, comments, shares, ug update time. Ang matag usa niini nga mga pamatasan kinahanglan gamiton sa pag-rate sa tweet, ug dayon kana nga ranggo kinahanglan gamiton aron ipakita ang mga tweet sa timeline.
Kinahanglan ba nga kanunay natong alerto ang mga tiggamit kung ang bag-ong sulud alang sa ilang newsfeed mahimong magamit? Makaplagan sa mga tiggamit nga mapuslanon nga maalerto kung adunay bag-ong datos. Sa mga mobile device, bisan pa, kung ang paggamit sa datos medyo mahal, mahimo’g mag-usik sa bandwidth.
Ingon usa ka sangputanan, mahimo namon nga pilion nga dili iduso ang data sa mga mobile device ug imbes tugutan ang mga tiggamit nga "Pagbitad aron Pag-refresh" alang sa mga bag-ong pag-post.
Lakang 5: Pag-scale sa disenyo
Ang usa ka potensyal nga bottleneck mao ang Fanout Service. Ang mga tiggamit sa Twitter nga adunay milyon-milyon nga mga tagasunod kinahanglan nga maghulat pipila ka minuto alang sa ilang mga tweet nga ipagawas. Mahimo kini nga hinungdan sa usa ka lumba nga adunay mga tubag sa tweet, nga mahimo naton malikayan pinaagi sa pag-order pag-usab sa mga tweet sa oras sa pagserbisyo.
Mahimo usab namon mapugngan ang pagkaylap sa mga tweet gikan sa mga tawo nga adunay daghang mga tagasunod. Hinoon, mahimo namong pangitaon ang mga tweet gikan sa mga tawo nga gisunod pag-ayo, i-integrate ang mga resulta sa pagpangita sa mga resulta sa timeline sa balay sa user, ug dayon ihan-ay pag-usab ang mga tweet sa oras sa pagserbisyo.
Ang mga dugang nga pagdugang naglakip sa:
- Pagtipig lang ug pipila ka gatos ka tweets sa Memory Cache para sa matag home timeline.
- Sa Memory Cache, ang impormasyon sa timeline sa balay lamang sa mga aktibo nga tiggamit ang gitipigan.
- Mahimo natong tukuron pag-usab ang kronolohiya gikan sa SQL Database kung ang usa ka user dili aktibo sa miaging 30 ka adlaw.
- Aron mahibal-an kung kinsa ang tiggamit, gamita ang Serbisyo sa Graph sa Gumagamit.
- Idugang ang mga tweet sa Memory Cache pinaagi sa pagkuha niini gikan sa SQL Database.
- Ang Serbisyo sa Impormasyon sa Tweet mahimo ra makatipig usa ka bulan nga kantidad sa mga tweet.
- Sa Serbisyo sa Impormasyon sa Gumagamit, ang mga aktibo nga tiggamit lamang ang maluwas.
- Aron magpabilin nga ubos ang latency, ang Search Cluster lagmit kinahanglan nga ipadayon ang mga tweet sa memorya.
Panapos
Bisan kung ang Twitter usa ka dako nga organisasyon, kini adunay mas maayo pagsabot sa disenyo sa sistema. Gibuhat nako kutob sa akong mahimo aron mahatagan ka usa ka taas nga lebel nga pagtan-aw sa timeline sa Twitter.
Nanghinaut ko nga nakakuha ka mapuslanon nga kasayuran gikan niini ug magamit kini sa maayo.
Leave sa usa ka Reply