Taula de continguts[Amaga][Espectacle]
WhatsApp és un programa de missatgeria social que permet als usuaris intercanviar missatges entre ells.
Has pensat mai com funciona WhatsApp?
Quins són els conceptes que sustenten la seva creació i funcionament?
Aquest article repassarà els conceptes bàsics de WhatsApp disseny del sistema.
També passarem per l'arquitectura general de WhatsApp, que es pot utilitzar per crear qualsevol tipus de programari de xat.
Així que, sense més preàmbuls, fem una ullada al disseny del sistema de WhatsApp!
1. Requisits clau
WhatsApp és una tecnologia altament escalable que és utilitzada per moltes persones a tot el món. Com a resultat, hauria d'estar ben dissenyat per ser pràcticament sempre fiable i funcional.
Com a resultat, determinar les necessitats crítiques del sistema és fonamental.
Aquests són els requisits mínims per al missatger de WhatsApp:
- Capaç de facilitar interaccions individuals.
- El reconeixement del missatge i l'última visualització són possibles (Enviat, Llegit i Llegit).
- Permet el xifratge d'extrem a extrem i suport multimèdia (imatges/vídeos).
Descobrim quina capacitat requereix el nostre servei necessari.
2. Estimació de la capacitat
El nostre objectiu és crear una plataforma capaç de gestionar una gran quantitat de trànsit. Suposem que s'envien 10 milions d'SMS al dia. Tenim:
- Cada dia, mil milions de persones envien 10 milions de SMS.
- En el trànsit màxim (per segon), 700,000 persones estaven actives (6X de mitjana)
- Durant l'ús màxim, es transmeten 40 milions de missatges per segon.
- La longitud mitjana d'un missatge és de 160 caràcters: 10B * 160 = 1.6TB de dades es generen cada dia.
- Preneu com a exemple deu anys de servei: 10 * 1.6B * 365 PB
- Tota l'aplicació estarà formada per microserveis, cadascun dels quals executarà una tasca especialitzada. Suposem que l'enviament d'un missatge triga 20 mil·lisegons i que hi ha 100 connexions concurrents per servidor. Com a resultat, el nombre previst de servidors de xat necessaris = (latència de missatges de xat per segon)/connexions concurrents per servidor = 40M * 20ms / 100 = 8000 servidors.
3. Arquitectura d'alt nivell
Aquest sistema es basa en dos serveis bàsics. Servei de xat i servei transitori, per exemple. El servei de xat gestiona tot el trànsit generat pels missatges en línia dels usuaris. Simultàniament, el servei temporal gestiona el trànsit quan l'usuari està fora de línia.
Si l'usuari està en línia, el servei de xat s'encarrega de lliurar els missatges.
Verificarà si el destinatari del missatge està en línia o no; si el destinatari està en línia, aquest servei lliurarà el missatge immediatament; si el destinatari no està en línia, el servei de transitori li enviarà el missatge quan torni en línia.
El servei transitori manté una àrea d'emmagatzematge separada per mantenir les dades accessibles temporalment fins que l'usuari fora de línia es torni a connectar.
Disseny d'API d'alt nivell
Aquest servei té dues API de funcionament d'alt nivell per enviar i llegir missatges. El sistema es pot implementar mitjançant l'arquitectura REST.
Paràmetres per enviar missatges
Aquesta API s'utilitzarà per transmetre missatges entre dos usuaris.
Paràmetres de conversa
Aquesta API s'utilitza per mostrar xats amb fils. Considereu que això és el primer que veus quan obriu WhatsApp. Només voldríem rebre uns quants missatges per a un usuari en una sola consulta d'API. Per gestionar-ho, calen els paràmetres de compensació i recompte de missatges.
Quines són les funcions de funcions com ara l'última vegada que es va veure, la marca simple i la marca doble?
El paper important en el desplegament d'aquests serveis és el servei de reconeixement. Aquestes característiques es van desenvolupar ja que aquest servei continua generant i verificant respostes de reconeixement.
- Ticket senzill: Quan un missatge de l'Usuari A arriba a l'Usuari B, el servidor envia una sola marca reconeixent que el missatge s'ha transmès.
- Tick doble: un cop el missatge del servidor s'hagi enviat a l'usuari B mitjançant la connexió adequada, l'usuari B acusarà recepció del missatge al servidor. Aleshores, el servidor proporcionarà a l'usuari A un altre reconeixement. Com a resultat, apareixerà una marca duplicada.
- Paparra blava: L'usuari B enviarà un altre reconeixement al servidor després de comprovar el missatge. Aleshores, el servidor enviarà a l'usuari A un missatge de reconeixement addicional. Després d'això, apareixerà una marca blava a la pantalla de l'usuari A.
- Vist per últim cop: El mecanisme del batec del cor és totalment responsable de l'última característica vista. Cada 5 segons, es transmet un batec del cor al servidor, que fa un seguiment de l'últim estat vist de cada usuari en una taula a la qual qualsevol altre usuari pot accedir fàcilment.
4. Dissenyar les característiques clau
Interacció personalitzada
Aquesta és una part necessària del servei de xat. Un usuari simplement pot enviar missatges a un altre usuari mitjançant aquest servei. Fem una ullada a com funciona això:
Suposem que Jay vol comunicar-se amb Aayush. En Jay està vinculat a un servidor de xat amb el qual rep el missatge. Jay rep la confirmació del servidor de xat que el missatge s'ha enviat. El servidor de xat ara demana informació al magatzem de dades sobre el servidor de xat al qual està connectat Aayush. El servidor de xat d'en Jay ara transmet el missatge al servidor de xat d'Aayush, i l'Aayush rep el missatge mitjançant un mecanisme push. Ara l'Aayush envia un reconeixement al servidor de xat de Jay, que li notifica que el missatge s'ha lliurat. Si l'Aayush tornava a llegir el missatge, en Jay es va lliurar un nou reconeixement que el missatge havia estat llegit.
Estat de l'activitat de l'usuari
L'última vegada que una persona va estar activa és una característica habitual dels missatgers instantanis.
En aquest diagrama es mostra un sistema per mantenir una connexió entre el client i el servidor. Els connectors web es van utilitzar per establir una connexió bidireccional entre el servidor i el client. Aquestes connexions envien batecs del cor, que s'utilitzen per controlar l'estat d'activitat de l'usuari.
Privadesa d'extrem a extrem
El xifratge d'extrem a extrem és una característica clau que garanteix que només els usuaris que conversen puguin llegir les comunicacions. Una clau pública es comparteix entre tots els usuaris implicats en la comunicació i és fonamental per mantenir l'encriptació d'extrem a extrem. Suposem que hi ha dos usuaris al canal, Jay i Aayush, que es comuniquen entre ells.
En Jay té la clau pública d'Aayush, i l'Aayush té la clau pública d'en Jay així com la seva clau privada no compartida. Com a resultat, quan en Jay transmet el missatge, el xifra amb la clau pública d'Aayush, que només es pot descodificar amb la clau privada d'Aayush.
De la mateixa manera, en Jay només podrà descodificar la comunicació d'Aayush. Com a resultat, només Jay i Aaysuh podran veure les comunicacions de l'altre, i el servidor només funcionarà com a porta d'entrada en tot el procés.
5. Colls d'ampolla
Cada sistema és propens a mal funcionament. Per gestionar un volum de trànsit tan gran, el servei ha de mantenir-se operatiu i tolerant a errors en tot moment per evitar colls d'ampolla. Com que el nostre servei depèn completament dels servidors de xat i transitori, hem de resoldre tots els problemes que sorgeixen del seu funcionament.
Falla del servidor de xat: Aquest és el cor del nostre sistema. Quan els usuaris estan en línia, és responsable de gestionar i lliurar els missatges. Com a resultat, aquest sistema manté vincles amb els seus usuaris.
Com a resultat, si aquest servei falla, tota l'arquitectura patirà. Hi ha dos enfocaments per gestionar la fallada del servidor de xat. Un mètode és canviar les connexions TCP a un altre servidor, mentre que un altre és permetre als usuaris iniciar connexions automàticament en cas de pèrdua de connexió.
Falla de l'emmagatzematge transitori: Un altre component propens a fallar que podria danyar tot el servei és l'emmagatzematge transitori. Els missatges en ruta als usuaris fora de línia es perden si aquest servei falla.
Podem evitar la pèrdua de missatges replicant l'emmagatzematge temporal de cada usuari. Com a resultat, la rèplica es pot utilitzar per processar les funcions sempre que l'usuari torni en línia. Si el servidor original es fa accessible, tant les instàncies originals com les rèpliques de l'emmagatzematge transitori de l'usuari es combinen en una única botiga.
6. Tècniques d'optimització
Latència: Per oferir una experiència al client perfecta i millorada, el servei de missatgeria ha de ser en temps real. Com a resultat, la latència s'ha de reduir mitjançant la memòria cau part de les dades a les quals s'accedeix sovint. Podem emmagatzemar a la memòria l'estat de l'activitat dels usuaris i les converses recents mitjançant una memòria cau distribuïda com Redis.
Disponibilitat: Necessitem que el nostre servei estigui disponible la major part del temps. El nostre sistema ha de ser tolerant a errors, així podem conservar diverses còpies dels missatges transitoris perquè qualsevol missatge que es perdi es pugui recuperar ràpidament dels seus duplicats. Com a resultat, la disponibilitat del sistema no es pot posar en perill.
Conclusió
El nostre sistema ara només admet unes poques capacitats, però el podem ampliar fàcilment per afegir xats de grup per distribuir missatges a diverses persones. També podeu proporcionar capacitats de trucada telefònica i de vídeo. Aquest sistema també es pot desenvolupar de manera que els usuaris puguin publicar actualitzacions d'estat o narracions i llegir-se entre ells.
Vaig treballar dur per oferir-vos una visió general d'alt nivell del disseny del sistema de WhatsApp. Espero que us hagi agradat i que en feu un bon ús.
Deixa un comentari