L'applicazioni in linea à grande scala anu fattu una longa strada in i dui decennii precedenti. Queste innovazioni anu cambiatu a nostra percepzione di u sviluppu di software. Facebook, Instagram è Twitter, per esempiu, sò tutte e plataforme scalabili.
Questi sistemi devenu esse custruitu per gestisce volumi massivi di trafficu è dati postu chì miliardi di persone l'utilizanu à u stessu tempu in u mondu. Questu hè quandu cuncepimentu di u sistema entre in u ritrattu.
U prucessu di stabilisce l'architettura, l'interfaccia è i dati per un sistema chì risponde à certi criterii hè cunnisciutu com'è design di sistema. Per mezu di sistemi coesivi è efficaci, u disignu di u sistema satisface e richieste di a vostra attività o urganizazione.
Una volta chì a vostra cumpagnia o urganizazione hà determinatu i so criteri, pudete cumincià à incorpore in un disignu di sistema fisicu chì risponde à e richieste di i vostri cunsumatori.
Sia chì sceglite di andà cun u sviluppu su misura, suluzioni cummirciali, o una cumminazione di i dui, cumu cuncepisce u vostru sistema determinarà cumu si custruisce.
Faremu un sguardu detallatu à u disignu di u sistema di a cronologia di Twitter in questu post, cumpletu cù un tutoriale. Cuminciamu.
Passu 1: Delineate u casu d'usu è e limitazioni
Casu d'usu
- Un utilizatore carica un tweet.
- U serviziu manda notifiche push è email à i seguitori di tweets.
- A cronologia di l'utilizatore hè vista (attività da l'utilizatore)
- L'utilizatore guarda a cronologia di casa (attività da e persone chì l'utilizatore seguita)
- E parolle chjave sò cercate da l'utilizatore.
- U serviziu hè veramente accessibile.
Fora di u scopu
- I tweets sò mandati à Twitter Firehose è altri flussi chì utilizanu stu serviziu.
- U serviziu sguassate i tweets basatu nantu à i paràmetri di visibilità di l'utilizatore.
- Se l'utilizatore ùn seguita ancu a persona chì hè stata rispostu, oculte a risposta.
- Osservate l'opzione "nascondi retweets".
- Analytics
Limitazioni è supposizioni
Assunzioni statali
- U trafficu ùn hè micca spargugliatu ugualmente.
- Hè da esse simplice per mandà un tweet.
- A menu chì ùn avete milioni di seguitori, mandà un tweet à tutti i vostri seguitori deve esse rapidu.
- Ci sò 100 milioni di utilizatori attivi.
- 15 miliardi di tweets ogni mese o 500 milioni di tweets ogni ghjornu
- Ogni tweet hà un fanout di 10 consegna in media.
- Ogni ghjornu, fanout furnisce 5 miliardi di tweets.
- Fanout furnisce 150 miliardi di tweets ogni mese.
- 250 miliardi di richieste di lettura mensili
- 10 miliardi di ricerche mensili
Timeline
- A cronologia deve esse faciule per navigà.
- Twitter hè più di leghje chè di scrive.
- Ottimisate per una lettura rapida di tweets
- U cunsumu di Tweet hè assai tempu.
Search
- U prucessu di ricerca deve esse prestu.
- Hè assai tempu per circà.
Calculate l'usu
Dimensione di ogni tweet:
- 8 bytes tweet id
- 32 bytes di user-id
- 140 bytes di testu
- media - media di 10 KB
- Totale: ~ 10 KB
Ogni mese, 150 TB di cuntenutu frescu di tweet hè generatu.
- * 500 milioni di tweets ogni ghjornu * 30 ghjorni per mese * 10 KB per tweet
- In trè anni, ci hè statu 5.4 PB di cuntenutu di tweet frescu.
Ci sò 100,000 richieste di lettura ogni secondu.
- * (400 richieste per seconda / 1 miliardi di richieste per mese) 250 miliardi di richieste di lettura ogni mese
Ci sò 6,000 XNUMX tweets ogni secondu.
- * (400 richieste per seconda / 1 miliardi di richieste per mese) 15 miliardi di tweets ogni mese
In u fanout, 60 mila tweets sò mandati ogni secondu.
- Fanout furnisce 150 miliardi di tweets ogni mese* (400 richieste per seconda / 1 miliardi di richieste per mese).
4,000 XNUMX dumande d'infurmazioni ogni secondu
- * (400 richieste per seconda / 1 miliardi di richieste per mese) 10 miliardi di ricerche ogni mese
Qualchì cunversione utile
- Ogni mese passanu 2.5 milioni di seconde.
- 2.5 milioni di richieste per mese à 1 dumanda per seconda
- 100 milioni di richieste per mese x 40 richieste per seconda
- 1 miliardi di richieste per mese = 400 richieste per seconda
Passu 2: Diagramma di altu livellu
Passu 3: Spiegà i cumpunenti core
Puderemu salvà i tweets di l'utilizatori per populà a cronologia di l'utilizatori (attività da l'utilizatore) in una basa di dati relazionale si sottumettenu un tweet. Hè più difficiuli di furnisce i tweets è di sviluppà a cronologia di casa (attività da e persone chì l'utilizatore seguita).
Una basa di dati relazionale tipica seria sopraffatta da sparghje tweets à tutti i seguitori (60 mila tweets consegnati ogni secondu). Probabilmente vulemu andà cun un almacenamentu di dati di scrittura veloce cum'è una basa di dati NoSQL o Cache di Memoria.
A lettura di 1 MB in sequenza da a memoria dura circa 250 microsecondi, ma a lettura da SSD dura 4 volte più, è a lettura da u discu dura 80 volte più.
Un Object Store pò esse usatu per almacenà dati cum'è l'imaghjini è i video.
- U Servitore Web, chì agisce cum'è un proxy inversu, riceve un tweet da u Cliente.
- A dumanda hè mandata à u servitore Write API da u Web Server.
- L'API di Scrittura salva u tweet in una basa di dati SQL in u timeline di l'utilizatori.
U Fan-Out Service hè cuntattatu da l'API di Scrittura, è eseguisce e seguenti attività.
- Truva i seguitori di l'utilizatori in u Cache di Memoria interroghendu u Serviziu Graficu d'Usuariu.
- In un Cache di Memoria, u tweet hè salvatu in a timeline di casa di i seguitori di l'utilizatori.
- 1,000 seguitori = 1,000 ricerche è inseriti = operazione O(n).
- U tweet hè salvatu in u Serviziu di l'Indice di Ricerca per una ricerca rapida.
- U Object Store hè utilizatu per almacenà i media.
- Invia alerti push à i seguitori via u Serviziu di Notificazione.
- Per mandà alerti in modu asincronu, usa una Coda.
Pudemu aduprà una lista Redis nativa cù a struttura seguente se u nostru Cache di Memoria hè Redis:
A cronologia di a casa di l'utilizatore serà aghjurnata cù u novu tweet, chì serà guardatu in u Cache di Memoria. Utilizemu a seguente API REST publica:
A cronologia di l'utilizatori hè vista da l'utilizatore.
- U Web Server riceve una dumanda di cronologia di l'utilizatori da u Cliente.
- A dumanda hè mandata à u servitore Read API da u Web Server.
- L'API di lettura dumanda à a basa di dati SQL per u tempu di l'utilizatori.
L'API REST hà da travaglià in modu simile à a cronologia di casa, cù l'eccezzioni chì tutti i tweets venenu da l'utilizatori piuttostu chè da e persone chì seguitanu.
Un utilizatore cerca e parolle chjave:
- U Web Server riceve una dumanda di ricerca da u Cliente.
- A dumanda hè mandata à u servore API di ricerca da u Web Server.
Passu 4: Timeline di Twitter
A creazione di timeline hè un compitu difficiule. Un servitore di generazione di timeline chì ligami cù u web o i servitori di l'applicazione hè necessariu.
Ogni volta chì un utilizatore accede, u serviziu di cronologia mantene a traccia di i tweets più recenti da l'utilizatori in a tavola di seguitori è aghjurnà o rinfriscà a cronologia di l'utilizatori.
Ùn implementemu nisun sistema di classificazione quì; invece, presumemu chì i top 5 tweets da i seguitori di l'utilizatori sò presentati in u timeline in ordine di u tempu di creazione. Pudemu mantene un cutoff di rinfrescante di 50 tweets. Cessemu sempre di rinfriscà o di custruisce una cronologia dopu chì quellu limitu hè righjuntu finu à chì l'utilizatore rinfresce a pagina.
L'alta latenza è i prublemi di rendiment venenu da a creazione di feed d'utilizatori in diretta. Invece, a creazione di un flussu offline chì pò esse presentatu istantaneamente hè u megliu modu per migliurà u rendiment. Eseguite servitori di timeline dedicati chì ping u servitore di l'applicazioni nantu à una basa regulare per rinfriscà l'alimentu basatu annantu à u tempu chì hè statu creatu.
L'algoritmu di classificazione deve piglià in cunsiderà i segnali cruciali è furnisce u pesu per guarantiscenu chì a cronologia di l'utilizatori ùn hè micca duminata da materiale da unu o più di i cunti chì seguitanu.
Più precisamente, pudemu sceglie e funzioni ligati à a rilevanza di qualsiasi articulu di l'alimentu, cum'è u numeru di mi piace, cumenti, sparte è u tempu d'aghjurnamentu. Ciascunu di sti criterii deve esse usatu per valutà u tweet, è dopu chì u ranking deve esse usatu per mustrà i tweets nantu à u timeline.
Duvemu sempre avvisà l'utilizatori quandu un novu cuntenutu per u so nutizie diventa dispunibule? L'utilizatori ponu truvà benefiziu per esse avvisati quandu novi dati sò dispunibili. In i dispositi mobili, però, quandu l'usu di dati hè abbastanza caru, pò perde a larghezza di banda.
In u risultatu, pudemu optà per ùn spinghje micca e dati à i dispositi mobili è invece permettenu à l'utilizatori di "Pull to Refresh" per novi publicazioni.
Passu 5: Scaling design
Un putenziale strottu hè u serviziu Fanout. L'utilizatori di Twitter cù milioni di seguitori duveranu aspittà parechji minuti per chì i so tweets si sparghjenu. Questu puderia causà una corsa cù risposti à u tweet, chì pudemu evità riordendu i tweets à u tempu di serve.
Pudemu ancu impedisce a diffusione di tweets da persone cun un gran numaru di seguitori. Invece, pudemu fà una ricerca di tweets da individui assai seguiti, integrà i risultati di ricerca cù i risultati di a cronologia di casa di l'utilizatori, è dopu riordene i tweets à u tempu di serve.
I miglioramenti supplementari includenu:
- Mantene solu qualchì centu di tweets in u Cache di Memoria per ogni timeline di casa.
- In u Cache di Memoria, solu l'infurmazioni di a cronologia di casa di l'utilizatori attivi sò salvate.
- Pudemu ricustruisce a cronologia da a basa di dati SQL se un utilizatore ùn era micca attivu in i 30 ghjorni precedenti.
- Per sapè quale hè l'utilizatore, utilizate u Serviziu Graficu d'Usuariu.
- Aghjunghjite i tweets à u Cache di Memoria ricuperendu da a basa di dati SQL.
- U Tweet Info Service pò salvà solu un mese di tweets.
- In u serviziu d'infurmazione d'utilizatori, solu l'utilizatori attivi sò salvati.
- Per mantene a latenza bassa, u Cluster di Ricerca avaristi probabilmente bisognu di mantene i tweets in memoria.
cunchiusioni
Ancu Twitter hè una grande urganizazione, hà un megliu cunniscenza di u disignu di u sistema. Aghju fattu u mo megliu per furniscevi una panoramica d'altu livellu di a cronologia di Twitter.
Spergu chì avete acquistatu infurmazioni utili da ellu è pudete aduprà bè.
Lascia un Audiolibro