web-dev-qa-db-fra.com

Quelle est la technologie derrière wechat, WhatsApp et autres applications de messagerie?

Je suis impatient de connaître l'architecture de différentes applications de messagerie en temps réel. Utilisent-ils un protocole/une architecture générique?

63
viswas

L'architecture WhatsApp achetée par Facebook pour 19 milliards de dollars explique l'architecture impliquée dans la conception de WhatsApp.

Voici l'explication générale du lien

  • Le serveur WhatsApp est presque complètement implémenté à Erlang.

  • Les systèmes de serveur qui acheminent les messages d’arrière-plan sont exécutés dans Erlang.

  • Le grand succès est que le nombre d'utilisateurs actifs est géré avec une empreinte serveur vraiment réduite. Le consensus de l'équipe est que c'est en grande partie à cause d'Erlang.

  • Il est intéressant de noter que le chat Facebook a été écrit à Erlang en 2009, mais ils l'ont abandonné parce qu'il était difficile de trouver des programmeurs qualifiés.

  • Le serveur WhatsApp a démarré depuis ejabberd

  • Ejabberd est un célèbre serveur open source Jabber écrit en Erlang.

  • Initialement choisi pour son ouverture, les développeurs l’avaient bien critiqué, sa facilité de démarrage et la promesse de sa compatibilité à long terme pour les grands systèmes de communication.

  • Les quelques années suivantes ont été consacrées à la réécriture et à la modification de nombreux composants d’ejabberd, notamment le passage du protocole XMPP au protocole développé en interne, la restructuration de la base de code et la refonte de certains composants essentiels, ainsi que de nombreuses modifications importantes à Erlang VM pour optimiser les performances du serveur.

  • Pour traiter 50 milliards de messages par jour, l’objectif est de créer un système fiable qui fonctionne. La monétisation est quelque chose à regarder plus tard, il est loin dans la route.

  • La longueur de la file de messages est une mesure primaire de la santé du système. La longueur de la file d'attente de messages de tous les processus d'un nœud est surveillée en permanence et une alerte est envoyée si ceux-ci accumulent du retard au-delà d'un seuil prédéfini. Si un ou plusieurs processus sont en retard, ils sont alertés, ce qui donne un pointeur sur le prochain goulot d'étranglement à attaquer.

  • Les messages multimédia sont envoyés en téléchargeant l'image, les fichiers audio ou vidéo à envoyer sur un serveur HTTP, puis en envoyant un lien vers le contenu avec sa vignette codée Base64 (le cas échéant).

  • Certains codes sont généralement envoyés tous les jours. Il arrive souvent que cela se répète plusieurs fois par jour, même si en général les heures de pointe sont évitées. Erlang aide à être agressif lors de la mise en production de correctifs et de fonctionnalités. Le chargement à chaud signifie que les mises à jour peuvent être poussées sans redémarrage ni transfert de trafic. Les erreurs peuvent généralement être résolues très rapidement, à nouveau par chargement à chaud. Les systèmes ont tendance à être beaucoup plus faiblement couplés, ce qui facilite très facilement l'annulation progressive des modifications.

  • Quel protocole est utilisé dans l'application Whatsapp? Prise SSL sur les pools de serveurs WhatsApp. Tous les messages sont mis en file d'attente sur le serveur jusqu'à ce que le client se reconnecte pour récupérer les messages. La récupération réussie d'un message est renvoyée au serveur WhatsApp qui lui transmet cet état à l'expéditeur d'origine (une icône en forme de "coche" située à côté du message). Les messages sont effacés de la mémoire du serveur dès que le client a accepté le message.

  • Comment le processus d'inscription fonctionne-t-il en interne dans Whatsapp? WhatsApp avait l'habitude de créer un nom d'utilisateur/mot de passe basé sur le numéro IMEI du téléphone. Cela a été changé récemment. WhatsApp utilise maintenant une demande générale de l'application pour envoyer un code PIN unique à 5 chiffres. WhatsApp envoie ensuite un SMS au numéro de téléphone indiqué (cela signifie que le client WhatsApp n'a plus besoin de s'exécuter sur le même téléphone)). En fonction du numéro d'identification personnelle, l'application demande ensuite une clé unique à WhatsApp. Cette clé est utilisée comme "mot de passe" pour tous les futurs appels (cette clé "permanente" est stockée sur l'appareil). Cela signifie également que l'enregistrement d'un nouvel appareil invalidera la clé de l'ancien appareil.

77
MaheshShanbhag

WhatsApp a choisi Erlang, un langage conçu pour écrire des applications évolutives conçues pour résister aux erreurs. Erlang utilise une abstraction appelée modèle d'acteur pour sa concurrence - http://en.wikipedia.org/wiki/Actor_ (programming_language) À la place de la méthode plus traditionnelle de la mémoire partagée, les acteurs communiquent en s'en échangeant messages. Les acteurs contrairement aux threads sont conçus pour être légers. Les acteurs peuvent être sur la même machine ou sur des machines différentes et les abstractions de transmission de messages fonctionnent pour les deux. Une implémentation simple de WhatsApp pourrait être: Chaque utilisateur/appareil est représenté en tant qu’acteur. Cet acteur est responsable du traitement de la boîte de réception de l'utilisateur, de la manière dont il est sérialisé sur le disque, des messages que l'utilisateur envoie et des messages qu'il reçoit. Supposons qu'Alice et Bob sont des amis sur WhatsApp. Il y a donc un acteur Alice et un acteur Bob.

Traçons une série de messages qui vont et viennent:

Alice décide d'envoyer un message à Bob. Le téléphone d'Alice établit une connexion avec le serveur WhatsApp et il est établi que cette connexion provient bien du téléphone d'Alice. Alice envoie maintenant via TCP le message suivant: "Pour Bob: un monstre géant attaque le Golden Gate Bridge". Un des serveurs frontaux de WhatsApp désérialise ce message et le transmet à l'acteur. appelé Alice.

Alice, l'acteur décide de le sérialiser et de le stocker dans un fichier appelé "Messages envoyés par Alice", stocké sur un système de fichiers répliqué afin d'empêcher la perte de données due à la destruction imprévisible des monstres. Alice, l'acteur décide alors de transmettre ce message à l'acteur Bob en lui transmettant le message "Message1 d'Alice: un monstre géant attaque le Golden Gate Bridge". Alice, l'acteur peut réessayer avec un recul exponentiel jusqu'à ce que Bob, l'acteur, reconnaisse avoir reçu le message.

Bob, l'acteur reçoit finalement le message de (2) et décide de stocker ce message dans un fichier appelé "Boîte de réception de Bob". Une fois le message mémorisé de manière durable, l'acteur accusera réception du message en envoyant à l'acteur Alice un message contenant le message "J'ai reçu Msg1". Alice, l'acteur peut maintenant arrêter ses tentatives de tentative. Bob, l'acteur vérifie ensuite si le téléphone de Bob a une connexion active au serveur. C'est le cas et l'acteur Bob diffuse ce message sur l'appareil via TCP.

Bob voit ce message et répond par "Pour Alice: Créons des robots géants pour les combattre". Ceci est maintenant reçu par l'acteur Bob, comme indiqué à l'étape 1. Bob, l'acteur répète ensuite les étapes 2 et 3 pour s'assurer qu'Alice recevra finalement l'idée qui sauvera l'humanité.

WhatsApp utilise en réalité le protocole XMPP au lieu du protocole largement supérieur que j'ai décrit ci-dessus, mais vous obtenez le point.

30
alok srivastava

A ma connaissance, Ejabberd ( http://www.ejabberd.im/ ) est le parent, il s'agit d'un serveur XMPP qui fournit d'assez bonnes fonctionnalités de l'open source, Whatsapp en utilise une version modifiée, facebook la messagerie utilise également une version modifiée de cela. Certaines autres applications de discussion, telles que ChatOn de Samsung et Nimbuzz Messenger, utilisent toutes celles basées sur ejabberd et les solutions Erlang ont également modifié la version de cet ejabberd qu’elles prétendent être hautement évolutive et bien testée avec davantage d’améliorations de performances et renommée MongooseIM.

Ejabberd est le serveur qui a mis en œuvre la plupart des fonctionnalités par rapport aux autres. Comme il est construit à Erlang, il est hautement évolutif horizontalement.

27
Marutha