Índice analítico[Ocultar][Mostrar]
WhatsApp é un programa de mensaxería social que permite aos usuarios intercambiar mensaxes entre eles.
Pensaches algunha vez como funciona WhatsApp?
Cales son os conceptos que sustentan a súa creación e funcionamento?
Este artigo repasará os conceptos básicos de WhatsApp deseño do sistema.
Tamén pasaremos pola arquitectura xeral de WhatsApp, que se pode usar para crear calquera tipo de software de chat.
Entón, sen máis preámbulos, vexamos o deseño do sistema de WhatsApp.
1. Requisitos clave
WhatsApp é unha tecnoloxía altamente escalable que é utilizada por moitas persoas en todo o mundo. Como resultado, debería estar ben deseñado para ser case sempre fiable e funcional.
Como resultado, determinar as necesidades críticas do sistema é fundamental.
Estes son os requisitos mínimos para o WhatsApp messenger:
- Capaz de facilitar as interaccións individuais.
- O recoñecemento da mensaxe e a última vista son posibles (Enviado, Entregado e Lido).
- Permitir cifrado de extremo a extremo e soporte multimedia (imaxes/vídeos).
Descubramos canta capacidade require o noso servizo necesario.
2. Estimación da capacidade
O noso obxectivo é crear unha plataforma capaz de xestionar unha gran cantidade de tráfico. Supoña que se envían 10 millóns de SMS ao día. Temos:
- Cada día, mil millóns de persoas envían 10 millóns de SMS.
- No pico de tráfico (por segundo), 700,000 persoas estaban activas (6X media)
- Durante o pico de uso, transmítense 40 millóns de mensaxes por segundo.
- A lonxitude media dunha mensaxe é de 160 caracteres: 10B * 160 = 1.6TB de datos xéranse todos os días.
- Tome dez anos de servizo como exemplo: 10 * 1.6B * 365 PB
- Toda a aplicación estará formada por microservizos, cada un dos cales executará unha tarefa especializada. Supoña que enviar unha mensaxe leva 20 milisegundos e que hai 100 conexións simultáneas por servidor. Como resultado, o número previsto de servidores de chat necesarios = (mensaxes de chat por segundo Latencia)/conexións simultáneas por servidor = 40M * 20ms / 100 = 8000 servidores.
3. Arquitectura de alto nivel
Este sistema está construído sobre dous servizos fundamentais. Servizo de chat e servizo transitorio, por exemplo. O servizo de chat xestiona todo o tráfico xerado polas mensaxes en liña dos usuarios. Simultaneamente, o servizo temporal xestiona o tráfico cando o usuario está fóra de liña.
Se o usuario está en liña, o servizo de chat encárgase de entregar as mensaxes.
Verificará se o destinatario da mensaxe está en liña ou non; se o destinatario está en liña, este servizo entregará a mensaxe inmediatamente; se o destinatario non está en liña, o servizo de transición enviaralle a mensaxe cando volva en liña.
O servizo transitorio mantén unha área de almacenamento separada para manter os datos accesibles temporalmente ata que o usuario sen conexión se volva conectar.
Deseño de API de alto nivel
Este servizo ten dúas API de alto nivel para enviar e ler mensaxes. O sistema pódese implementar mediante a arquitectura REST.
Parámetros para enviar mensaxes
Esta API empregarase para transmitir mensaxes entre dous usuarios.
Parámetros da conversa
Esta API úsase para mostrar conversas en conversas. Considera isto o primeiro que ves cando abres WhatsApp. Só queremos recibir algunhas mensaxes para un usuario nunha única consulta da API. Para xestionar isto, son necesarios os parámetros de compensación e conta de mensaxes.
Cales son as funcións de funcións como a última vista, o tick simple e o dobre?
O papel importante no despregamento destes servizos é o servizo de recoñecemento. Estas funcións desenvolvéronse xa que este servizo segue xerando e verificando respostas de recoñecemento.
- Marca única: Cando unha mensaxe do Usuario A chega ao Usuario B, o servidor envía un único tick confirmando que a mensaxe foi transmitida.
- Tick dobre: Despois de que a mensaxe do servidor foi enviada ao usuario B mediante a conexión adecuada, o usuario B acusará recibo da mensaxe ao servidor. A continuación, o servidor proporcionará ao usuario A outro recoñecemento. Como resultado, aparecerá unha marca duplicada.
- Carrapata azul: O usuario B enviará outro acuse de recibo ao servidor despois de comprobar a mensaxe. A continuación, o servidor enviará ao Usuario A unha mensaxe de recoñecemento adicional. Despois diso, aparecerá unha marca azul na pantalla do usuario A.
- Visto por última vez: O mecanismo do latido do corazón é totalmente responsable da última característica vista. Cada 5 segundos, envíase un latexo ao servidor, que fai un seguimento do último estado visto de cada usuario nunha táboa á que calquera outro usuario pode acceder facilmente.
4. Deseño de características clave
Interacción personalizada
Esta é unha parte necesaria do servizo de chat. Un usuario pode simplemente enviar mensaxes a outro usuario mediante este servizo. Vexamos como funciona isto:
Supoña que Jay quere comunicarse con Aayush. Jay está ligado a un servidor de chat co que recibe a mensaxe. Jay recibe a confirmación do servidor de chat de que a mensaxe foi enviada. O servidor de chat agora solicita información do almacén de datos sobre o servidor de chat ao que está conectado Aayush. O servidor de chat de Jay agora transmite a mensaxe ao servidor de chat de Aayush, e Aayush recibe a mensaxe mediante un mecanismo push. Agora Aayush envía un acuse de recibo ao servidor de chat de Jay, que notifica a Jay que a mensaxe foi entregada. Se Aayush volveu ler a mensaxe, entrégaselle a Jay un novo recoñecemento de que a mensaxe fora lida.
Estado da actividade do usuario
A última vez que unha persoa estivo activa é unha característica habitual dos mensaxeiros instantáneos.
Neste diagrama represéntase un sistema para manter unha conexión entre o cliente e o servidor. Utilizáronse sockets web para establecer unha conexión bidireccional entre o servidor e o cliente. Estas conexións envían latexos, que se usan para supervisar o estado da actividade do usuario.
Privacidade de extremo a extremo
O cifrado de extremo a extremo é unha característica clave que garante que só os usuarios que conversan poidan ler as comunicacións. Unha chave pública compártese entre todos os usuarios implicados na comunicación e é fundamental para manter o cifrado de extremo a extremo. Supoña que hai dous usuarios na canle, Jay e Aayush, que se comunican entre si.
Jay ten a chave pública de Aayush, e Aayush ten a clave pública de Jay así como a súa clave privada non compartida. Como resultado, cando Jay transmite a mensaxe, cífraa coa clave pública de Aayush, que só se pode descodificar coa clave privada de Aayush.
Do mesmo xeito, Jay só poderá decodificar a comunicación de Aayush. Como resultado, só Jay e Aaysuh poderán ver as comunicacións do outro e o servidor só funcionará como unha pasarela en todo o proceso.
5. Pescozos de botella
Cada sistema é propenso a mal funcionamento. Para xestionar un volume de tráfico tan grande, o servizo debe permanecer operativo e tolerante a avarías en todo momento para evitar colos de botella. Dado que o noso servizo depende enteiramente dos servidores de Chat e Transient, debemos resolver todos os problemas que se derivan do seu funcionamento.
Fallo do servidor de chat: Este é o corazón do noso sistema. Cando os usuarios están en liña, é responsable de xestionar e entregar as mensaxes. Como resultado, este sistema mantén vínculos cos seus usuarios.
Como resultado, se este servizo falla, toda a arquitectura sufrirá. Hai dous enfoques para xestionar o fallo do servidor de chat. Un método é cambiar as conexións TCP a outro servidor, mentres que outro é permitir que os usuarios inicien conexións automaticamente en caso de perda de conexión.
Fallo do almacenamento transitorio: Outro compoñente propenso a fallas que pode eventualmente danar todo o servizo é o almacenamento transitorio. As mensaxes en ruta para os usuarios sen conexión pérdense se este servizo falla.
Podemos evitar a perda de mensaxes replicando o almacenamento temporal de cada usuario. Como resultado, a réplica pódese empregar para procesar as funcións sempre que o usuario volva en liña. Se o servidor orixinal se fai accesible, tanto as instancias orixinais como as réplicas do almacenamento transitorio do usuario combínanse nunha única tenda.
6. Técnicas de optimización
Latencia: Para ofrecer unha experiencia ao cliente perfecta e mellorada, o servizo de mensaxería debe ser en tempo real. Como resultado, a latencia debe reducirse almacenando en caché parte dos datos aos que se accede con frecuencia. Podemos almacenar na memoria o estado da actividade do usuario e as conversas recentes mediante unha caché distribuída como Redis.
Dispoñibilidade: Necesitamos que o noso servizo estea dispoñible a maior parte do tempo. O noso sistema debe ser tolerante a fallos, polo que podemos gardar varias copias de mensaxes transitorias para que calquera mensaxe que se perda poida recuperarse rapidamente dos seus duplicados. Como resultado, a dispoñibilidade do sistema non se pode poñer en perigo.
Conclusión
O noso sistema agora só admite algunhas capacidades, pero podemos amplialo facilmente para engadir chats de grupo para distribuír mensaxes a varias persoas. Tamén pode proporcionar capacidades de vídeo e chamadas telefónicas. Este sistema tamén se pode desenvolver para que os usuarios poidan publicar actualizacións de estado ou narracións e lerse entre si.
Traballei duro para ofrecerche unha visión xeral de alto nivel do deseño do sistema WhatsApp. Espero que vos guste e que o fagades ben.
Deixe unha resposta