Table des matières[Cacher][Montrer]
WhatsApp est un programme de messagerie sociale qui permet aux utilisateurs d'échanger des messages entre eux.
Avez-vous déjà réfléchi au fonctionnement de WhatsApp ?
Quels sont les concepts qui sous-tendent sa création et son fonctionnement ?
Cet article passera en revue les bases de WhatsApp conception du système.
Nous passerons également en revue l'architecture générale de WhatsApp, qui peut être utilisée pour créer n'importe quel type de logiciel de chat.
Alors, sans plus tarder, jetons un coup d'œil à la conception du système de WhatsApp !
1. Exigences clés
WhatsApp est une technologie hautement évolutive utilisée par de nombreuses personnes dans le monde entier. Par conséquent, il doit être bien conçu pour être pratiquement toujours fiable et fonctionnel.
Par conséquent, la détermination des besoins critiques du système est essentielle.
Voici les exigences minimales pour le messager WhatsApp :
- Capable de faciliter les interactions individuelles.
- L'accusé de réception du message et le dernier vu sont tous deux possibles (Envoyé, Remis et Lu).
- Autoriser le chiffrement de bout en bout et la prise en charge des médias (images/vidéos).
Découvrons la capacité dont notre service nécessaire a besoin.
2. Estimation de la capacité
Notre objectif est de créer une plateforme capable de gérer une grande quantité de trafic. Supposons que 10 milliards de SMS sont envoyés par jour. Nous avons:
- Chaque jour, 10 milliards de SMS sont envoyés par un milliard de personnes.
- Au pic de trafic (par seconde), 700,000 6 personnes étaient actives (moyenne XNUMXX)
- Lors des pics d'utilisation, 40 millions de messages sont transmis par seconde.
- La longueur moyenne d'un message est de 160 caractères : 10B * 160 = 1.6 To de données sont générées chaque jour.
- Prenons l'exemple de dix ans de service : 10 * 1.6 milliard * 365 PB
- L'ensemble de l'application sera composé de microservices, chacun exécutant une tâche spécialisée. Supposons que l'envoi d'un message prend 20 millisecondes et qu'il existe 100 connexions simultanées par serveur. En conséquence, le nombre prévu de serveurs de chat requis = (messages de chat par seconde de latence)/connexions simultanées par serveur = 40M * 20ms / 100 = 8000 serveurs.
3. Architecture de haut niveau
Ce système est construit sur deux services de base. Service de chat et service transitoire, par exemple. Le service de chat gère tout le trafic généré par les messages en ligne des utilisateurs. Simultanément, le service temporaire gère le trafic lorsque l'utilisateur est hors ligne.
Si l'utilisateur est en ligne, le service de chat se charge de délivrer les messages.
Il vérifiera si le destinataire du message est en ligne ou non ; si le destinataire est en ligne, ce service délivrera le message immédiatement ; si le destinataire n'est pas en ligne, le service transitoire lui enverra le message lorsqu'il reviendra en ligne.
Le service transitoire conserve une zone de stockage séparée pour conserver les données temporairement accessibles jusqu'à ce que l'utilisateur hors ligne se reconnecte.
Conception d'API de haut niveau
Ce service dispose de deux API fonctionnelles de haut niveau pour l'envoi et la lecture de messages. Le système peut être implémenté en utilisant l'architecture REST.
Paramètres d'envoi de messages
Cette API sera utilisée pour transmettre des messages entre deux utilisateurs.
Paramètres de conversation
Cette API est utilisée pour afficher les discussions en fils de discussion. Considérez ceci comme la première chose que vous voyez lorsque vous ouvrez WhatsApp. Nous voudrions seulement obtenir quelques messages pour un utilisateur dans une seule requête API. Pour gérer cela, les paramètres de décalage et de nombre de messages sont nécessaires.
Quelles sont les fonctions des fonctionnalités telles que la dernière vue, le tick simple et le double tick ?
Le rôle important dans le déploiement de ces services est le service d'accusé de réception. Ces fonctionnalités ont été développées depuis que ce service continue de générer et de vérifier les réponses d'accusé de réception.
- Coche unique: Lorsqu'un message de l'utilisateur A atteint l'utilisateur B, le serveur envoie un simple tick pour confirmer que le message a été transmis.
- double coche: Une fois que le message du serveur a été envoyé à l'utilisateur B via la connexion appropriée, l'utilisateur B accusera réception du message au serveur. Le serveur fournira alors à l'utilisateur A un autre accusé de réception. En conséquence, une coche en double apparaîtra.
- Coche bleue: L'utilisateur B enverra un autre accusé de réception au serveur après avoir vérifié le message. Le serveur enverra alors à l'utilisateur A un message d'accusé de réception supplémentaire. Une coche bleue apparaîtra ensuite sur l'écran de l'utilisateur A.
- Vue la dernière fois: Le mécanisme de battement de cœur est entièrement responsable de la dernière caractéristique vue. Toutes les 5 secondes, un battement de cœur est transmis au serveur, qui garde une trace du dernier statut vu de chaque utilisateur dans un tableau facilement accessible par tout autre utilisateur.
4. Concevoir des fonctionnalités clés
Interaction personnalisée
C'est une partie nécessaire du service Chat. Un utilisateur peut simplement envoyer des messages à un autre utilisateur en utilisant ce service. Voyons comment cela fonctionne :
Supposons que Jay veuille communiquer avec Aayush. Jay est lié à un serveur de chat avec lequel il reçoit le message. Jay reçoit la confirmation du serveur de chat que le message a été envoyé. Le serveur de chat demande maintenant des informations au magasin de données sur le serveur de chat auquel Aayush est connecté. Le serveur de chat de Jay transmet maintenant le message au serveur de chat d'Aayush, et Aayush reçoit le message via un mécanisme push. Aayush envoie maintenant un accusé de réception au serveur de chat de Jay, qui informe Jay que le message a été livré. Si Aayush relisait le message, un nouvel accusé de réception indiquant que le message avait été lu était remis à Jay.
État de l'activité de l'utilisateur
La dernière fois qu'une personne a été active est une caractéristique courante des messageries instantanées.
Un système pour maintenir une connexion entre le client et le serveur est décrit dans ce diagramme. Les sockets Web ont été utilisés pour établir une connexion bidirectionnelle entre le serveur et le client. Ces connexions envoient des pulsations, qui sont utilisées pour surveiller l'état d'activité de l'utilisateur.
Confidentialité de bout en bout
Le chiffrement de bout en bout est une fonctionnalité clé qui garantit que seuls les utilisateurs en conversation peuvent lire les communications. Une clé publique est partagée entre tous les utilisateurs impliqués dans la communication et est essentielle au maintien du chiffrement de bout en bout. Supposons qu'il y ait deux utilisateurs sur le canal, Jay et Aayush, qui communiquent entre eux.
Jay a la clé publique d'Aayush, et Aayush a la clé publique de Jay ainsi que leur clé privée non partagée. En conséquence, lorsque Jay transmet le message, il le crypte avec la clé publique d'Aayush, qui ne peut être décodée qu'avec la clé privée d'Aayush.
De même, Jay ne pourra que décoder la communication d'Aayush. En conséquence, seuls Jay et Aaysuh pourront voir les communications de l'autre, et le serveur fonctionnera simplement comme une passerelle dans l'ensemble du processus.
5. Goulots d'étranglement
Chaque système est sujet à des dysfonctionnements. Pour gérer un volume de trafic aussi important, le service doit rester opérationnel et tolérant aux pannes à tout moment pour éviter les goulots d'étranglement. Parce que notre service dépend entièrement des serveurs Chat et Transient, nous devons résoudre tous les problèmes qui découlent de leur fonctionnement.
Panne du serveur de chat: C'est le cœur de notre système. Lorsque les utilisateurs sont en ligne, il est responsable de la gestion et de la livraison des messages. De ce fait, ce système entretient des liens avec ses utilisateurs.
Par conséquent, si ce service tombe en panne, toute l'architecture en souffrira. Il existe deux approches pour gérer la défaillance du serveur de chat. Une méthode consiste à déplacer les connexions TCP vers un autre serveur, tandis qu'une autre consiste à permettre aux utilisateurs de démarrer automatiquement les connexions en cas de perte de connexion.
Échec du stockage transitoire: Le stockage transitoire est un autre composant susceptible de tomber en panne et susceptible d'endommager l'ensemble du service. Les messages en route vers les utilisateurs hors ligne sont perdus si ce service échoue.
Nous pouvons empêcher la perte de messages en répliquant le stockage temporaire de chaque utilisateur. Par conséquent, la réplique peut être utilisée pour traiter les fonctions chaque fois que l'utilisateur revient en ligne. Si le serveur d'origine devient accessible, les instances d'origine et de réplique du stockage transitoire de l'utilisateur sont combinées en un seul magasin.
6. Techniques d'optimisation
Latence: Pour offrir une expérience client fluide et améliorée, le service de messagerie doit être en temps réel. Par conséquent, la latence doit être réduite en mettant en cache une partie des données souvent consultées. Nous pouvons mettre en cache le statut d'activité des utilisateurs et les conversations récentes en mémoire à l'aide d'un cache distribué comme Redis.
Disponibilité: Nous avons besoin que notre service soit disponible la majorité du temps. Notre système doit être tolérant aux pannes, ainsi nous pouvons conserver plusieurs copies des messages transitoires afin que tout message perdu puisse être rapidement récupéré de ses doublons. La disponibilité du système ne peut donc pas être compromise.
Conclusion
Notre système ne prend désormais en charge que quelques fonctionnalités, mais nous pouvons facilement l'étendre pour ajouter des discussions de groupe afin de distribuer des messages à plusieurs personnes. Vous pouvez également fournir des fonctionnalités d'appel vidéo et téléphonique. Ce système peut également être développé de manière à ce que les utilisateurs puissent publier des mises à jour de statut ou des récits et se lire.
J'ai travaillé dur pour vous fournir un aperçu de haut niveau de la conception du système WhatsApp. J'espère que vous l'avez apprécié et que vous en ferez bon usage.
Soyez sympa! Laissez un commentaire