Table di cuntinutu[Piattà][Mostra]
WhatsApp hè un prugramma di messageria suciale chì permette à l'utilizatori di scambià missaghji cù l'altri.
Avete mai cunsideratu cumu funziona WhatsApp?
Chì sò i cuncetti chì sustenenu a so creazione è u funziunamentu ?
Questu articulu hà da passà nantu à i principii di WhatsApp cuncepimentu di u sistema.
Andemu ancu attraversu l'architettura generale di WhatsApp, chì pò esse aduprata per custruisce ogni tipu di software di chat.
Dunque, senza più preghjudiziu, fighjemu un ochju à u disignu di u sistema di WhatsApp!
1. Requisiti chjave
WhatsApp hè una tecnulugia altamente scalabile chì hè utilizata da parechje persone in u mondu sanu. In u risultatu, deve esse ben cuncepitu per esse quasi sempre affidabile è funzionante.
In u risultatu, determinà i bisogni critichi di u sistema hè criticu.
Eccu i requisiti minimi per u messenger WhatsApp:
- Capace di facilità l'interazzione unu à unu.
- A ricunniscenza di u messagiu è l'ultima vista sò tramindui pussibuli (Send, Delivered, and Read).
- Permette a crittografia end-to-end è supportu media (imaghjini / video).
Scupritemu quanta capacità u nostru serviziu necessariu richiede.
2. Capacità di stima
U nostru scopu hè di creà una piattaforma capace di gestisce una grande quantità di trafficu. Assumimu chì 10 miliardi di SMS sò mandati per ghjornu. Avemu:
- Ogni ghjornu, 10 miliardi di SMS sò mandati da un miliardo di persone.
- À u trafficu di punta (per seconda), 700,000 6 persone eranu attive (media XNUMXX)
- Durante l'usu di punta, 40 milioni di missaghji sò trasmessi per seconda.
- A durata media di un missaghju hè di 160 caratteri: 10B * 160 = 1.6TB di dati sò generati ogni ghjornu.
- Pigliate deci anni di serviziu per esempiu: 10 * 1.6B * 365 PB
- Tutta l'applicazione serà custituita da microservizi, ognuna di e quali eseguirà un compitu specializatu. Assumimu chì l'inviu di un missaghju dura 20 millisecondi è chì ci sò 100 cunnessione simultanea per servitore. In u risultatu, u numeru anticipatu di servitori di chat necessariu = (messaggi di chat per seconda Latenza) / cunnessione simultanea per servitore = 40M * 20ms / 100 = 8000 servitori.
3. Architettura di altu livellu
Stu sistema hè custruitu nantu à dui servizii core. U serviziu di chat è u serviziu transitoriu, per esempiu. U serviziu di chat gestisce tuttu u trafficu generatu da i missaghji in linea di l'utilizatori. Simultaneamente, u serviziu tempurale gestisce u trafficu quandu l'utilizatore hè offline.
Se l'utilizatore hè in linea, u serviziu di chat hè incaricatu di furnisce i missaghji.
Verificarà se u destinatariu di u messagiu hè in linea o micca; se u destinatariu hè in linea, stu serviziu trasmette u messagiu immediatamente; se u destinatariu ùn hè micca in linea, u serviziu transitoriu mandarà u missaghju à elli quandu tornanu in linea.
U serviziu transitoriu mantene una zona di almacenamiento separata per mantene e dati temporaneamente accessibili finu à chì l'utilizatore offline si riconnette.
Cuncepimentu di API di altu livellu
Stu serviziu hà duie API di funziunamentu d'altu livellu per mandà è leghje missaghji. U sistema pò esse implementatu cù l'architettura REST.
Paràmetri per mandà missaghji
Questa API serà usata per trasmette missaghji trà dui utilizatori.
Paràmetri di cunversazione
Questa API hè aduprata per vede chats threaded. Cunsiderate questu a prima cosa chì vede quandu apre WhatsApp. Vuleriamu solu riceve uni pochi di missaghji per un utilizatore in una sola dumanda API. Per trattà questu, i paràmetri di l'offset è u numeru di messagi sò necessarii.
Chì sò e funzioni di funzioni cum'è l'ultima vista, una sola tick è una doppia tick?
U rolu impurtante in a implementazione di questi servizii hè u serviziu di ricunniscenza. Queste caratteristiche sò state sviluppate postu chì stu serviziu cuntinueghja à generà è verificate risposte di ricunniscenza.
- Ticottu unicu: Quandu un missaghju da l'Usuariu A ghjunghje à l'Usuariu B, u servitore manda una sola tick chì ricunnosce chì u messagiu hè statu trasmessu.
- Doppiu tick: Dopu chì u messagiu di u servitore hè statu mandatu à l'Usuariu B per mezu di a cunnessione propria, l'Usuariu B ricunnoscerà u messagiu à u servitore. U servitore allora furnisce l'Usuariu A cun un altru ricunniscenza. In u risultatu, apparirà una tick duplicata.
- Tick blu: L'Usuariu B mandarà un altru ricunniscenza à u servitore dopu avè verificatu u missaghju. U servitore poi mandarà à l'Usuariu A un missaghju addiziale di ricunniscenza. Una tick blu apparirà nantu à u screnu di l'Usuariu A dopu.
- Vintu vignetu: U mekanismu di u cori hè interamente rispunsevuli di l'ultima funzione vista. Ogni 5 seconde, un battitu di cori hè trasmessu à u servitore, chì mantene a traccia di l'ultimu statu vistu di ogni utilizatore in una tavula chì pò esse facilmente accessibile da qualsiasi altru utilizatore.
4. Designing funziunalità chjave
Interazione persunalizata
Quissa hè una parte necessaria di u serviziu Chat. Un utilizatore pò simpricimenti mandà missaghji à un altru utilizatore utilizendu stu serviziu. Fighjemu cumu funziona questu:
Assume chì Jay vole cumunicà cù Aayush. Jay hè ligatu à un servitore di chat cù quale ellu riceve u messagiu. Jay riceve cunferma da u servitore di chat chì u messagiu hè statu speditu. U servitore di chat ora dumanda infurmazione da u magazzinu di dati nantu à u servitore di chat à quale Aayush hè cunnessu. U servitore di chat di Jay trasmette avà u messagiu à u servitore di chat di Aayush, è Aayush riceve u missaghju per mezu di un mecanismu push. Aayush avà manda un ricunniscenza à u servitore di chat di Jay, chì notifica à Jay chì u messagiu hè statu mandatu. Se Aayush hà lettu u missaghju di novu, un novu ricunniscenza chì u missaghju era statu lettu hè statu mandatu à Jay.
Status of User Activity
L'ultima volta chì una persona era attiva hè una funzione regulare di i messageri instantani.
Un sistema per mantene una cunnessione trà u cliente è u servitore hè illustratu in questu schema. I sockets Web sò stati utilizati per stabilisce una cunnessione bidirezionale trà u servitore è u cliente. Queste cunnessione mandanu batti di cori, chì sò usati per monitorà u statutu di l'attività di l'utilizatori.
Privacità end-to-end
A criptografia end-to-end hè una funzione chjave chì assicura chì solu l'utilizatori di cunversazione ponu leghje e cumunicazioni. Una chjave publica hè sparta trà tutti l'utilizatori implicati in a cumunicazione è hè critica per sustene a criptografia End-to-End. Assumimu chì ci sò dui utilizatori nantu à u canali, Jay è Aayush, chì cumunicanu cù l'altri.
Jay hà a chjave publica di Aayush, è Aayush hà a chjave publica di Jay è a so chjave privata micca spartuta. In u risultatu, quandu Jay trasmette u missaghju, u cripta cù a chjave publica di Aayush, chì pò esse decodificata solu cù a chjave privata di Aayush.
In listessu modu, Jay serà solu capace di decodificà a cumunicazione di Aayush. In u risultatu, solu Jay è Aaysuh puderanu vedà e cumunicazioni di l'altri, è u servitore funziunà solu cum'è una porta in tuttu u prucessu.
5. Bottlenecks
Ogni sistema hè propensu à malfunzionamentu. Per gestisce un voluminu cusì grande di trafficu, u serviziu deve esse operatu è tollerante à i difetti in ogni mumentu per evità i colli di bottiglia. Perchè u nostru serviziu hè cumpletamente dipendente di i servitori di Chat è Transient, duvemu risolve tutti i prublemi chì nascenu da u so funziunamentu.
Fiascu di u Chat Server: Questu hè u core di u nostru sistema. Quandu l'utilizatori sò in linea, hè rispunsevule per gestisce è trasmette i missaghji. In u risultatu, stu sistema mantene ligami cù i so utilizatori.
In u risultatu, se stu serviziu falla, tutta l'architettura soffre. Ci hè dui approcci per gestisce u fallimentu di u servitore di chat. Un metudu hè di trasfurmà e cunnessione TCP à un altru servitore, mentre chì un altru hè di permette à l'utilizatori di inizià e cunnessione automaticamente in casu di perdita di cunnessione.
Fiascu di Storage Transient: Un altru cumpunente propensu à fallimentu chì puderia eventualmente dannà u serviziu tutale hè l'almacenamiento transitori. I missaghji in strada à l'utilizatori offline sò persi se stu serviziu falla.
Pudemu prevene a perdita di missaghju riplichendu l'almacenamiento temporale di ogni utilizatore. In u risultatu, a replica pò esse impiegata per processà e funzioni sempre chì l'utilizatore torna in linea. Se u servitore uriginale diventa accessibile, sia l'istanze originali è replica di l'almacenamiento transitori di l'utilizatori sò cumminati in una sola tenda.
6. Tecniche d'ottimisazione
Latenza: Per furnisce una sperienza cliente perfetta è mejorata, u serviziu di messageria deve esse in tempu reale. In u risultatu, a latenza deve esse ridutta da cachendu parte di e dati spessu accede. Pudemu cache u statutu di l'attività di l'utilizatori è e conversazioni recenti in memoria utilizendu una cache distribuita cum'è Redis.
dispunibilità: Avemu bisognu di u nostru serviziu per esse dispunibule a maiò parte di u tempu. U nostru sistema deve esse tollerante à i difetti, cusì pudemu guardà parechje copie di missaghji transitori per chì ogni missaghju chì hè persu pò esse recuperatu rapidamente da i so duplicati. In cunsiquenza, a dispunibilità di u sistema ùn pò micca esse in periculu.
cunchiusioni
U nostru sistema avà sustene solu uni pochi di capacità, ma pudemu facilmente espansione per aghjunghje chat di gruppu per distribuisce missaghji à parechje persone. Pudete ancu furnisce capacità di video è telefonate. Stu sistema pò ancu esse sviluppatu in modu chì l'utilizatori ponu pubblicà l'aghjurnamenti di statutu o narrative è leghje l'altri.
Aghju travagliatu duramente per furniscevi una panoramica di altu livellu di u disignu di u sistema WhatsApp. Spergu chì vi hà piaciutu è chì l'avete aduprà bè.
Lascia un Audiolibro