Aplikacionet online në shkallë të gjerë kanë bërë një rrugë të gjatë në dy dekadat e mëparshme. Këto risi kanë ndryshuar perceptimet tona për zhvillimin e softuerit. Facebook, Instagram dhe Twitter, për shembull, janë të gjitha platforma të shkallëzueshme.
Këto sisteme duhet të ndërtohen për të menaxhuar vëllime masive të trafikut dhe të dhënave pasi miliarda njerëz i përdorin ato në të njëjtën kohë në të gjithë botën. Kjo është kur dizajni i sistemit hyn në fotografi.
Procesi i krijimit të arkitekturës, ndërfaqeve dhe të dhënave për një sistem që plotëson disa kritere njihet si dizajni i sistemit. Nëpërmjet sistemeve kohezive dhe efikase, dizajni i sistemit plotëson kërkesat e biznesit ose organizatës suaj.
Pasi kompania ose organizata juaj të ketë përcaktuar kriteret e saj, ju mund të filloni t'i përfshini ato në një dizajn të sistemit fizik që plotëson kërkesat e konsumatorëve tuaj.
Pavarësisht nëse zgjidhni të shkoni me zhvillim me porosi, zgjidhje komerciale ose një kombinim i të dyjave, mënyra se si e dizajnoni sistemin tuaj do të përcaktojë se si do ta ndërtoni atë.
Ne do të hedhim një vështrim të detajuar në hartimin e sistemit të vijës kohore të Twitter në këtë postim, të plotësuar me një tutorial. Le të fillojmë.
Hapi 1: Përvijoni rastin e përdorimit dhe kufizimet
Përdorni rastin
- Një përdorues ngarkon një cicërimë.
- Shërbimi dërgon njoftime shtytëse dhe email tek ndjekësit e tweet-eve.
- Afati kohor i përdoruesit shihet (aktiviteti nga përdoruesi)
- Përdoruesi shikon afatin kohor të shtëpisë (aktivitet nga njerëzit që përdoruesi po ndjek)
- Fjalët kyçe kërkohen nga përdoruesi.
- Shërbimi është vërtet i aksesueshëm.
Jashtë fushës
- Tweet-et dërgohen në Twitter Firehose dhe transmetime të tjera duke përdorur këtë shërbim.
- Shërbimi heq tweet-et bazuar në cilësimet e dukshmërisë së përdoruesit.
- Nëse përdoruesi nuk po ndjek gjithashtu personin të cilit i është përgjigjur, fshihni përgjigjen.
- Vëzhgoni opsionin 'fsheh retweets'.
- analitikë
Kufizimet & supozimet
Supozimet e shtetit
- Trafiku nuk shpërndahet në mënyrë të barabartë.
- Duhet të jetë e thjeshtë të dërgosh një cicërimë.
- Nëse nuk keni miliona ndjekës, dërgimi i një cicërimë për të gjithë ndjekësit tuaj duhet të jetë i shpejtë.
- Ka 100 milionë përdorues aktivë.
- 15 miliardë cicërima çdo muaj ose 500 milionë cicërima çdo ditë
- Çdo cicërim ka mesatarisht 10 dërgesa.
- Çdo ditë, fanout jep 5 miliardë cicërima.
- Fanout jep 150 miliardë cicërima çdo muaj.
- 250 miliardë kërkesa mujore për lexim
- 10 miliardë kërkime mujore
Timeline
- Afati kohor duhet të jetë i lehtë për t'u lundruar.
- Twitter është më shumë për të lexuar sesa për të shkruar.
- Optimizoni për leximin e shpejtë të cicërimave
- Konsumimi i tweet-eve kërkon kohë.
Kërko
- Procesi i kërkimit duhet të jetë i shpejtë.
- Kërkon kohë.
Llogaritni përdorimin
Madhësia e secilit tweet:
- ID-ja e cicërimave 8 bajt
- ID-ja e përdoruesit 32 bajt
- 140 bajt tekst
- media – mesatarisht 10 KB
- Gjithsej: ~ 10 KB
Çdo muaj, krijohen 150 TB përmbajtje të freskëta tweet.
- * 500 milion cicërima çdo ditë * 30 ditë në muaj * 10 KB për tweet
- Në tre vjet, ka pasur 5.4 PB të përmbajtjes së freskët të cicërimave.
Ka 100,000 kërkesa për lexim çdo sekondë.
- * (400 kërkesa në sekondë / 1 miliard kërkesa në muaj) 250 miliardë kërkesa të lexuara çdo muaj
Ka 6,000 tweet-e çdo sekondë.
- * (400 kërkesa në sekondë / 1 miliard kërkesa në muaj) 15 miliardë cicërima çdo muaj
Në fanout, 60 mijë tweet dërgohen çdo sekondë.
- Fanout jep 150 miliardë cicërima çdo muaj* (400 kërkesa në sekondë / 1 miliard kërkesa në muaj).
4,000 kërkesa për informacion çdo sekondë
- * (400 kërkesa në sekondë / 1 miliard kërkesa në muaj) 10 miliardë kërkime çdo muaj
Disa konvertime të dobishme
- Çdo muaj kalojnë 2.5 milionë sekonda.
- 2.5 milionë kërkesa në muaj me 1 kërkesë në sekondë
- 100 milionë kërkesa në muaj x 40 kërkesa në sekondë
- 1 miliard kërkesa në muaj = 400 kërkesa në sekondë
Hapi 2: Diagrami i nivelit të lartë
Hapi 3: Shpjegimi i komponentëve bazë
Ne mund t'i ruajmë tweet-et e vetë përdoruesit për të mbushur afatin kohor të përdoruesit (aktiviteti nga përdoruesi) në një bazë të dhënash relacionale nëse ai dërgon një cicërimë. Është më e vështirë të dërgosh cicërima dhe të zhvillosh afatin kohor të shtëpisë (aktivitet nga individë që përdoruesi ndjek).
Një bazë e të dhënave tipike relacionale do të mbingarkohej nga publikimi i cicërimave për të gjithë ndjekësit (60 mijë cicërima të dorëzuara çdo sekondë). Ne ndoshta do të dëshirojmë të shkojmë me një ruajtje të të dhënave me shkrim të shpejtë si një bazë të dhënash NoSQL ose Memory Cache.
Leximi i 1 MB në mënyrë sekuenciale nga memorja kërkon afërsisht 250 mikrosekonda, por leximi nga SSD zgjat 4 herë më shumë, dhe leximi nga disku zgjat 80 herë më shumë.
Një dyqan objektesh mund të përdoret për të ruajtur të dhëna të tilla si imazhe dhe video.
- Serveri i uebit, i cili vepron si një përfaqësues i kundërt, merr një cicërimë nga Klienti.
- Kërkesa i dërgohet serverit Write API nga Web Server.
- Write API e ruan tweet-in në një bazë të dhënash SQL në afatin kohor të përdoruesit.
Shërbimi Fan-Out kontaktohet nga Write API dhe ai kryen detyrat e mëposhtme.
- Gjen ndjekësit e përdoruesit në Memory Cache duke pyetur Shërbimin e Grafikut të Përdoruesit.
- Në një memorie memorie, cicërima ruhet në vijën kohore kryesore të ndjekësve të përdoruesit.
- 1,000 ndjekës = 1,000 kërkime dhe futje = Operacioni O(n).
- Tweet-i ruhet në Shërbimin e Indeksit të Kërkimit për kërkim të shpejtë.
- Dyqani i objekteve përdoret për të ruajtur mediat.
- Dërgon sinjalizime shtytëse për ndjekësit përmes Shërbimit të Njoftimeve.
- Për të dërguar sinjalizime në mënyrë asinkrone, ai përdor një Radhë.
Ne mund të përdorim një listë amtare Redis me strukturën e mëposhtme nëse memoria jonë e memories është Redis:
Afati kohor i përdoruesit në shtëpi do të përditësohej me tweet-in e ri, i cili do të ruhet në Memory Cache. Ne do të përdorim API-në e mëposhtme publike REST:
Afati kohor i përdoruesit shikohet nga përdoruesi.
- Serveri i uebit merr një kërkesë për afatin kohor të përdoruesit nga Klienti.
- Kërkesa i dërgohet serverit Read API nga Web Server.
- Read API kërkon bazën e të dhënave SQL për kornizën kohore të përdoruesit.
API REST do të funksiononte në mënyrë të ngjashme me afatin kohor të shtëpisë, me përjashtim që të gjitha tweet-et do të kishin origjinën nga përdoruesi dhe jo nga njerëzit që ndjekin.
Një përdorues kërkon për fjalë kyçe:
- Web Server merr një kërkesë kërkimi nga Klienti.
- Kërkesa i dërgohet serverit API të kërkimit nga serveri i uebit.
Hapi 4: Afati kohor i Twitter
Krijimi i afatit kohor është një detyrë e vështirë. Kërkohet një server gjenerues i afatit kohor që lidhet me ueb-in ose serverët e aplikacionit.
Sa herë që një përdorues identifikohet, shërbimi i linjës kohore mban gjurmët e tweet-eve më të reja nga përdoruesit në tabelën e ndjekësve dhe përditëson ose rifreskon afatin kohor të përdoruesit.
Ne nuk zbatojmë asnjë lloj sistemi renditjeje këtu; në vend të kësaj, ne supozojmë se 5 tweet-et kryesore nga ndjekësit e përdoruesit janë paraqitur në afatin kohor sipas kohës së krijimit. Ne mund të mbajmë një ndërprerje të rifreskimit prej 50 cicërimash. Ne vazhdojmë të ndalojmë rifreskimin ose ndërtimin e një afati kohor pasi të arrihet ky prag derisa përdoruesi të rifreskojë faqen.
Shqetësimet e vonesës së lartë dhe të performancës do të vijnë nga krijimi i furnizimit të drejtpërdrejtë të përdoruesve. Në vend të kësaj, krijimi i një transmetimi jashtë linje që mund të paraqitet në çast është mënyra më e mirë për të përmirësuar performancën. Ekzekutoni serverë të dedikuar të linjës kohore që bëjnë ping serverin e aplikacionit në baza të rregullta për të rifreskuar furnizimin bazuar në kohën kur është krijuar.
Algoritmi i renditjes duhet të marrë parasysh sinjalet thelbësore dhe të japë peshë për të garantuar që afati kohor i një përdoruesi nuk dominohet nga materiale nga një ose më shumë llogari që ata ndjekin.
Më saktësisht, ne mund të zgjedhim veçori që lidhen me rëndësinë e çdo artikulli të furnizimit, të tilla si numri i pëlqimeve, komentet, shpërndarjet dhe koha e përditësimit. Secili prej këtyre kritereve duhet të përdoret për të vlerësuar tweet-in, dhe më pas kjo renditje duhet të përdoret për të shfaqur tweet-et në afatin kohor.
A duhet t'i lajmërojmë vazhdimisht përdoruesit kur disponohet përmbajtje e re për furnizimin e lajmeve të tyre? Përdoruesit mund ta kenë të dobishme të njoftohen kur të dhënat e reja bëhen të disponueshme. Në pajisjet celulare, megjithatë, kur përdorimi i të dhënave është mjaft i kushtueshëm, mund të humbasë gjerësinë e brezit.
Si rezultat, ne mund të zgjedhim të mos shtyjmë të dhënat në pajisjet celulare dhe në vend të kësaj t'i lejojmë përdoruesit të "tërheqin për të rifreskuar" për postimet e reja.
Hapi 5: Dizajni i shkallëzimit
Një pengesë e mundshme është Shërbimi Fanout. Përdoruesit e Twitter me miliona ndjekës do të duhet të presin disa minuta që tweet-et e tyre të publikohen. Kjo mund të shkaktojë një garë me përgjigjet në tweet, të cilat ne mund t'i shmangim duke i ri-renditur tweet-et në kohën e shërbimit.
Ne gjithashtu mund të parandalojmë përhapjen e cicërimave nga njerëz me një numër të madh ndjekësish. Në vend të kësaj, ne mund të bëjmë një kërkim për cicërima nga individë shumë të ndjekur, të integrojmë rezultatet e kërkimit me rezultatet e afatit kohor të përdoruesit dhe më pas t'i rirenditim tweet-et në kohën e shërbimit.
Përmirësimet shtesë përfshijnë:
- Mbani vetëm disa qindra cicërima në Memory Cache për çdo afat kohor të shtëpisë.
- Në memorien e memories ruhen vetëm informacionet e linjës kohore të përdoruesve aktivë.
- Ne mund të rindërtojmë kronologjinë nga baza e të dhënave SQL nëse një përdorues nuk ka qenë aktiv në 30 ditët e mëparshme.
- Për të zbuluar se kush është përdoruesi, përdorni Shërbimin e Grafikut të Përdoruesit.
- Shtoni tweet-et në Memory Cache duke i tërhequr ato nga baza e të dhënave SQL.
- Shërbimi i Informacionit të Tweet-it mund të kursejë vetëm një muaj tweet-eve.
- Në Shërbimin e Informacionit të Përdoruesit, ruhen vetëm përdoruesit aktivë.
- Për të mbajtur të ulët vonesën, Klusterit të Kërkimit ka shumë të ngjarë të kenë nevojë të ruajnë tweet-et në memorie.
Përfundim
Megjithëse Twitter është një organizatë e madhe, ai ka një më të mirë të kuptuarit e dizajnit të sistemit. Bëra çmos për t'ju ofruar një pasqyrë të nivelit të lartë të afatit kohor të Twitter.
Shpresoj se keni marrë informacion të dobishëm prej tij dhe mund ta përdorni mirë.
Lini një Përgjigju