whatsapp

Quelle est la base de données de Whatsapp ?

Avec plus de 2 milliards d’utilisateurs, la messagerie et application de chat WhatsApp ne font pas dans la demi-mesure. Côté chiffres WhatsApp est capable d’envoyer 40 millions de messages par seconde (50 milliards de messages par jour), de faire discuter 650000 personnes en simultané et de gérer 1 milliard d’utilisateurs réguliers. Quel est donc le backend qui permet de propulser autant de données quasi instantanément partout dans le monde ?

WhatsApp fonctionne avec des données en local et des données sur serveur. Pour faire très simple  :

  • Sur nos smartphones, une petite base de données SQLite cryptée stocke les échanges récents des 7 derniers jours. On y trouve les contacts, les sessions de chat et les messages échangés. Elle permet de soulager les serveurs de WhatsApp et de fournir les échanges hors connexion. Ces fichiers peuvent être supprimés sans risque, ils sont automatiquement recréés de retour en ligne. L’application existe en plus de 7 versions (iPhone, Android et d’autres systèmes plus confidentiels) ;
  • Côté serveur, WhatsApp utilise l’artillerie lourde mais ne stocke pas les messages de façon permanente. Il faut que l’infrastructure permette les conversations et les échanges de médias entre personnes de façon fluide, informe les utilisateurs des statuts des messages et de la date de dernière connexion active d’un participant et enfin permette l’envoi de notifications.

WhatsApp côté serveur

WhatsApp fonctionne avec :

  • des serveurs basés sur la distribution FreeBSD et sur la machine virtuelle BEAM;
  • des applications codées avec le langage de programmation Erlang. Erlang permet l’application de patchs et de mises à jour instantanées dans un environnement de production sans nécessiter d’importantes contraintes. Adapté aux applications ayant besoin de très haute disponibilité, il convient parfaitement à WhatsApp ;
  • un logiciel serveur de chat Jabber open source à haute performance Ejabberd customisé et lui aussi écrit en Erlang ;
  • le protocole de communication utilisé est une variante maison de XMPP ;
  • le serveur HTTP Yaws pour stocker les médias ;
  • du côté des bases de données, Mnesia DB se charge de toutes les tâches lourdes. Ce système de gestion de base de données est aussi l’outil SGBD par défaut d’Erlang. Distribuée, ACID et capable de travailler en environnement temps réel, Mnesia DB ressemble plus au SGBD Berkeley DB qu’aux SGBD plus classiques. La base de données Mnesia est relationnelle mais les relations sont modélisées comme les autres tables. Les tables peuvent être reconfigurées en production et même pendant des opérations en écriture. Le langage de requête de Mnesia DB n’est pas le SQL mais l’Erlang en direct.

Dans ses bases de données, WhatsApp utilise le numéro de téléphone de chaque contact comme identifiant.