Messagerie, chiffrement et données chez whatsapp
Eloi Morlaàs, software engineer chez WhatsApp est l’invité de l’épisode 49 de Data Driven 101.
Il aborde la croissance massive de l’application, le traitement des données et la sécurité des messages, mettant en avant la complexité de la gestion des clés de chiffrement et la confidentialité.
Il évoque également l’application de Machine learning pour améliorer l’intégrité et la performance des appels chez WhatsApp.
Marc00:00:00 – 00:00:12 : Aujourd’hui, je reçois Eloi Morlas, Software Engineer chez WhatsApp. Ingénieur français spécialisé en Data Science aux US, Eloi passe 3 ans en Data Science chez Facebook avant de rejoindre WhatsApp il y a 4 ans en Software Engineering.
Eloi 00:00:12 – 00:00:15 : Bonjour Eloi. Bonjour Marc, merci de me recevoir.
Marc00:00:15 – 00:00:21 : Grand plaisir. Est-ce que tu peux nous parler un peu de WhatsApp en général et de ton rôle en particulier ?
Eloi 00:00:21 – 00:01:23 : Pour commencer sur WhatsApp en général, c’est une acquisition de Facebook. Tout le monde connaît, c’était une acquisition en 2014. C’était déjà une app qui marchait plutôt très très bien. Il y avait entre 400 et 500 millions de monthly active users, donc déjà gros truc pour seulement 60 employés à l’époque. Donc gros rachat, 15 ou 20 milliards sur le rachat à l’époque, donc gros big bet de Zuckerberg dessus. Et voilà, et depuis ça a super bien marché, énorme croissance, et la messagerie la plus utilisée au monde. Et du coup moi j’étais d’abord chez Facebook, c’était Facebook à l’époque, pas Meta, En data science, dans les équipes infrastructure, on aidait les équipes qui géraient les data centers, qui géraient toute l’infrastructure de Facebook à faire des décisions plus data driven. Et ensuite, j’ai switché en interne, parce que WhatsApp, c’était une boîte en interne, pour aller à WhatsApp. L’équipe dans laquelle je suis actuellement, qui est l’équipe qui gère tous les appels WhatsApp, le back-end pour les appels WhatsApp.
Marc00:01:23 – 00:01:31 : OK. Donc, tu disais, on était à 450 millions d’actifs users au moment où au moins du rachat. Et aujourd’hui, ça ressemble à quoi ?
Eloi 00:01:31 – 00:01:38 : Aujourd’hui, c’est entre 2 et 3 milliards plus. On s’approche des 3 milliards d’utilisateurs. OK. Monster est active. Donc, oui, SixX, grosse croissance.
Marc00:01:38 – 00:01:43 : Oui, oui. Alors, quel genre de data est-ce que vous traitez dans une boîte comme WhatsApp ?
Eloi 00:01:43 – 00:03:20 : D’abord, on est très précautionnés avec la donnée. C’est vraiment, on essaie de logger le moins de données possible. Notre postulat de base, c’est qu’on log que ce qui est strictement nécessaire pour que l’application et l’expérience utilisateur soient la plus optimale. Et on va essayer de moins logger de données possibles. Mais du coup, évidemment, quand on est dans une équipe back-end, la plupart de nos data sont des data de performance de nos serveurs, donc beaucoup de time series, donc de séries temporelles sur, par exemple, le nombre de paquets audio et vidéo qu’on va relier sur notre réseau par minute, etc. Donc, c’est des données agrégées sur toute notre infrastructure. Donc on a ce genre de type de données très temporelles. Ensuite, on a des données qui vont être loguées par nos clients, donc par tous les téléphones, les desktops, les iPads, etc. Donc par exemple, à la fin d’un appel, on va loguer quelle était la plateforme, Android, etc., iOS, le type d’app version, la durée de l’appel, enfin toutes ces stats-là qui correspondent à des événements qui peuvent survenir durant l’appel ou quand on envoie un message, etc. Et donc ça, c’est des données plus structurées qu’on va créer avec MySQL ou des colonnes un peu plus structurées et basiques. Et après, on a toutes les données plus de logs de nos machines, côté serveur et côté client aussi. Ces logs-là, ils restent sur le client, sauf quand l’utilisateur va demander au support WhatsApp de réagir parce qu’il y a eu un problème ou quelque chose comme ça. Là, il peut donner ses logs qui sont sur son téléphone.
Marc00:03:21 – 00:03:29 : D’accord, dans l’application WhatsApp, il y a des logs qui ne sont pas accessibles par la maison mère tant que ce n’est pas une requête de l’utilisateur.
Eloi 00:03:29 – 00:03:30 : Voilà, c’est ça.
Marc00:03:30 – 00:03:33 : Alors comment vous êtes organisé pour traiter la donnée chez WhatsApp ?
Eloi 00:03:33 – 00:04:42 : Donc en fait on a toujours dans des équipes, les équipes sont structurées d’une certaine manière en fait. On a des équipes pure software engineering qui en fait historiquement n’ont pas trop une culture très data-driven. C’est plutôt des hardcore software engineers qui sont très infrastructure et qui ne vont pas être très data-driven. Après on a des équipes de data scientists qui sont donc dispatchés un peu dans ces équipes infrastructure. En fait ils vont essayer d’apporter toute cette vision data à l’équipe. Donc ça, c’est plutôt côté infrastructure. Et après, on a les équipes produits qui vont, par exemple, bosser sur, je ne sais pas, le statut WhatsApp. Donc, c’est comme les stories WhatsApp. Donc, on a une équipe story WhatsApp et dedans, elles sont structurées toujours avec quelques software engineers, quelques data scientists, quelques product managers, quelques engineering managers, etc. Et en fait, ils vont tous bosser sur différentes dimensions pour que le produit soit un succès aux produits utilisateurs. Et donc là, les data scientists vont directement intervenir sur la growth, comment on va utiliser les analytics et les data pour prédire quel segment attaquer, etc. En infrastructure, on va plus utiliser les données pour améliorer nos systèmes, faire en sorte qu’ils soient plus efficientes et qu’on ait moins de… meilleure reliability, tout ce genre de concepts.
Marc00:04:43 – 00:05:05 : Concrètement, nos données, c’est quand même une application qui est mondiale, les serveurs, il y en a un peu partout. Comment est-ce que physiquement, finalement, comment est-ce qu’elles sont réparties ? Comment ça se passe quand on a une application de messagerie mondiale, donc avec mécaniquement des gens qui vont communiquer dans des zones très différentes ? Comment on répartit sur les serveurs ?
Eloi 00:05:05 – 00:06:16 : Dans Meta, on a plein d’équipes différentes qui vont bosser sur le lifecycle des données. Que ce soit dans comment on les extrait, on peut les extraire des clients qui run WhatsApp ou des serveurs qui font tourner le backend, etc. Comment on donne les outils aux développeurs qui sont dans ces équipes backend ou frontend pour loguer les données intéressantes qui permettraient d’avoir plus de growth dans nos produits ? Ensuite, une fois qu’on donne ces outils pour loguer, il faut savoir où est-ce qu’on va les mettre, ces données. Et donc ça, on a plein de teams entières qui s’occupent sur gérer toutes les databases qu’on va utiliser pour storer ces données. Après, on a différents types de storage. On a les storage qui ont une rétention assez courte, en fait. Du coup, on va avoir une granularité super précise. Mais voilà, c’est des storage qui coûtent plus cher parce que ce n’est pas en disque, c’est en RAM, etc. Après, on a les cold storage, donc c’est les données… On a une rétention de plusieurs années qui sont souvent des données, en fait toujours des données agrégées. On ne veut pas avoir des données sur un utilisateur pendant très longtemps. D’ailleurs, il y a des régulations sur ça. Mais en revanche, d’avoir des données agrégées pour savoir comment WhatsApp gros dans les cinq dernières années, etc. Ça, c’est des données qu’on est obligé d’avoir même quand on est une entreprise publique.
Marc00:06:16 – 00:06:18 : Et les messages eux-mêmes, ils sont stockés.
Eloi 00:06:18 – 00:06:54 : où ? Les messages ne sont pas stockés, en fait. Les messages, ils sont… Bon, déjà, le message, il est complètement encrypté. Ça, on en parlera peut-être après, mais ils sont potentiellement stockés. quand, par exemple, tu es offline, tu éteins ton téléphone. Quand tu le rallumes, ton message, il va arriver. Donc, c’est-à-dire qu’il a été stocké quelque part dans le back-end. Donc là, on n’a pas le choix. Il est obligé de le stocker, sinon il perd le message. Mais sinon, le message, il est cité en online ou l’appel, évidemment. Il est juste relayé par nos serveurs entre A et B, si tu envoies un message entre la personne A vers la personne B. Et pour les appels, si tu n’es pas… Donc, il est sur le téléphone, après, le message. Voilà. Après, le message, il est sur le téléphone et décrypté par le téléphone. D’accord.
Marc00:06:54 – 00:07:10 : Mais alors, quand on utilise les web WhatsApp et que, du coup, il y a une synchronisation des messages ou quand on utilise… Alors, je crois qu’il y a une fonctionnalité de sauvegarde sur le… une sorte de cloud de messages historiques etc. le message est stocké.
Eloi 00:07:10 – 00:07:40 : ouais bah là tu peux. en gros c’est pas trop mon domaine d’expertise mais tu peux activer les backups les backups avec ton cloud provider. donc ça peut être avec cloud drive. je sais pas si ça vous fait intégration drive mais Bref, tu choisis ton cloud provider et WhatsApp, ils vont encrypter les données sur ton cloud et tu vas pouvoir restaurer. Donc, c’est des backups encryptés. Donc, si Apple se fait hacker, les hackers n’auront pas accès à tout l’historique de tes messages. Et après, quand tu peux restaurer ton WhatsApp, tu peux avoir accès à tous tes historiques.
Marc00:07:41 – 00:07:49 : Oui, donc ça, c’est le backup. C’est vraiment indépendant. Et après, sur la synchronisation du web et de l’app mobile, comment est-ce que les messages sont synchronisés entre les deux ?
Eloi 00:07:49 – 00:08:04 : Là aussi, ce n’est pas trop mon domaine d’expertise, mais ils utilisent le même modèle que quand tu es offline, où tu as une queue, un historique des messages encryptés qui est logué, qui va être ensuite dispatché sur tous tes devices quand ils redeviennent online et synchronisés entre les multi-devices.
Marc00:08:04 – 00:08:14 : Ok. Alors, quels sont les plus grands enjeux pour vous en général chez WhatsApp ? Continuité de service, confidentialité ? les choses qui reviennent le plus…
Eloi 00:08:14 – 00:09:23 : On est assez consistant là-dessus. On a trois grandes valeurs. C’est qu’on veut être une app simple, reliable et secure. Je disais beaucoup de termes anglais, mais c’est le mantra un peu de WhatsApp. Donc simple, je pense que ça se voit. C’est vraiment, on veut faire peu de choses, mais on veut le faire bien. On ne veut pas être une app qui est hyper complexe, clutter, et qui a plein de features qui sont peu utilisées, qui rendent l’app énorme. Du coup, on veut faire des choses simples. C’est pour ça que c’est une app qui est très populaire dans… dans les pays qui ont des infrastructures network moins bonnes que dans les pays occidentaux, etc. Parce que, du coup, l’app est très lightweight, elle pèse pas beaucoup, elle utilise peu de bandwidth, peu de batterie. Du coup, voilà, on se focus sur, quand on envoie un message, il doit arriver. Quand tu fais un appel, on espère qu’il soit de la meilleure qualité et qu’il marche. Et même si t’es dans des conditions avec un réseau pas incroyable, et voilà. Donc ça, c’est le côté simple. Secure, c’est une des premières apps avec un volume pareil qui utilise l’encryption de bout en bout. Ça, c’est un parti pris. Les gens ne s’en rendent peut-être pas très compte, mais c’est un énorme coût en ingénierie pour nous de maintenir cette sécurité.
Marc00:09:23 – 00:09:30 : Est-ce qu’on peut la décrire rapidement, cette sécurité ? Quand tu dis de bout en bout, c’est du téléphone au téléphone ?
Eloi 00:09:30 – 00:09:41 : C’est ça. Donc en gros, s’il y a un middleman, ça peut être d’abord Facebook, un méta qui voit le message encrypté, qui est passé entre A et B.
Marc00:09:41 – 00:09:43 : Ou n’importe qui sur le réseau Wi-Fi par exemple.
Eloi 00:09:43 – 00:10:32 : Qui arrive à prendre contrôle de ton réseau et qui arrive à écouter tout ce qui se passe sur le réseau. Donc n’importe quel middleman, y compris Facebook, y compris Meta, en fait, ne peuvent rien faire parce que tout est encrypté et la seule personne qui puisse décrypter, c’est le client de l’autre côté, la personne qui t’envoie ton message. Et donc voilà, ça c’est le chiffrement de bout en bout. Et en fait, la plupart des messageries, c’est pas de bout en bout, mais c’est hop by hop. Donc c’est genre, entre toi et le serveur, c’est encrypté. Mais le serveur, il a les clés de décryption. Et après, il est ré-encrit pour l’envoyer sur l’autre personne. Donc du coup, si un middleman entre les deux hops, c’est bon. Mais si le serveur central se fait hacker, ils ont accès au contenu des messages, etc. Donc là, dans le chiffrement de bout en bout, tu as ce safety net qui est genre, la seule personne qui a accès, c’est l’autre personne et il faut prendre son téléphone pour lire les messages.
Marc00:10:32 – 00:10:42 : Et la complexité d’ingénierie, c’est dans la gestion des clés ? J’imagine notamment le problème dont on vient de parler, la synchronisation avec le web.
Eloi 00:10:42 – 00:11:32 : Il va falloir partager la clé. Exactement. Et les clés, ce sont des sujets très pointus en cryptographie, etc. D’ailleurs, pour ceux qui veulent plus de détails, il y a le white paper de WhatsApp sur l’encryption. Un PDF de 20 pages qui décrit et qui est updaté régulièrement tous les deux mois, dès qu’il y a une update, sur comment on gère l’encryption, comment on gère les différents devices. Toutes les questions sur le multi-device, c’est décrit très précisément là. Mais oui, donc il y a une complexité de key management parce que chaque message va avoir une clé différente. Donc si la clé est compromise pour l’ancien message, le nouveau message est quand même protégé parce qu’il y a une nouvelle clé. Donc voilà, c’est assez complexe. Ça rajoute une complexité à l’engineering et aussi en termes de performance. Ça va peut-être consommer plus de batteries sur ton portable, plus de serveurs CPU cycles, etc. sur notre infrastructure. Mais voilà, c’est pour assurer le côté privacy secure de l’app sur cette dimension-là.
Marc00:11:33 – 00:11:37 : Alors, est-ce que vous faites du machine learning chez WhatsApp ? Et si oui, on en parle.
Eloi 00:11:37 – 00:13:25 : Oui, il y a évidemment plein d’applications de machine learning dans WhatsApp. Une des plus importantes, ça va être tout ce qui est integrity, donc tout ce qui a rapport à spam detection, faire en sorte que tu ne reçoives pas plein de textos de spammy que tu ne veux pas recevoir, etc., Aussi de bad actor, donc on arrive à détecter les gens qui abusent de la plateforme, qui vont avoir un discours violent. On ne va pas pouvoir détecter le discours, parce qu’évidemment on n’a pas accès au discours, mais on a d’autres proxys. Par exemple, si la personne est reportée par plein d’utilisateurs différents en un temps court, on va pouvoir bloquer la personne, etc. Donc ce genre de vertical, évidemment, utilise beaucoup de concepts de machine learning. Après, on a du machine learning un peu plus en interne pour nos opérations au jour le jour. Par exemple, moi, si je suis d’astreinte sur les appels WhatsApp cette semaine, on a des algorithmes qui vont monitor les séries temporelles de comment le système va. On a des KPIs de, par exemple, le nombre d’appels par minute. On le logue mondialement, etc. Et si jamais il y a un énorme dip et tout s’effondre d’un coup, on a des détecteurs… qui vont automatiquement flaguer le truc et appeler la personne d’astreinte pour qu’elle se réveille et regarde ce qui se passe. Donc ça, c’est plus les outils en interne pour que l’app soit reliable et tourne bien. Aussi, dans le type d’outils en interne pour tout ce qui est A-B testing, quand on va tester de nouveaux features, etc., on a des technos d’ailleurs qui sont développés par des teams dans Meta qui vont nous aider à faire du parameter tuning plus efficace. Savoir, par exemple, si tu as plein de choix de paramètres, comment tu fais ton search, faire un random grid search, tu… Voilà, tu le fais de manière plus intelligente. Donc ça, c’est complètement abstract away par cette team-là qui va nous donner des outils pour nous dire, le prochain paramètre search, tu utilises ces paramètres, a priori, c’est plus likely que ça te donne un meilleur objective metric pour ce que tu traques.
Marc00:13:26 – 00:13:28 : Dans quel cadre on optimise quoi là ?
Eloi 00:13:28 – 00:14:24 : Par exemple, tu veux optimiser, je prends un exemple sur les appels WhatsApp, tu as un algorithme qui va adapter la qualité de la vidéo que tu envoies de l’autre côté. Et du coup tu as toujours un trade-off entre si tu envoies une super bonne qualité, tu envoies beaucoup plus de données à l’autre, mais ça se trouve l’autre il a un mauvais network. Et du coup tu vas créer de la congestion et ça va créer des vidéos freeze, mauvaise qualité d’appel, etc. Et du coup tu dois toujours adapter le nombre de bits que tu envoies, donc la qualité de la vidéo et de l’audio. en fonction du network, si le Wi-Fi, tout d’un coup, il passe en 4G, enfin, tu passes en 4G, ou la personne est en voiture et ça ne marche pas. Donc, du coup, on a des algorithmes qui vont toujours essayer de probe le network, savoir dans quel network on est, et ensuite adapter la qualité que tu envoies. Et donc ça, typiquement, il y a des algorithmes de machine learning qui sont online, en fait, qui sont on-device or client, qui vont permettre que tu envoies le meilleur bitrate, que tu utilises la bandwidth le plus optimalement possible. Donc ça, c’est juste un exemple.
Marc00:14:24 – 00:14:45 : Oui, oui, oui. Oui, parce que finalement, une des conséquences de cette encryption, c’est qu’une fois que l’image est envoyée en bonne qualité, on ne peut pas côté serveur dire qu’on va la compresser de l’autre côté parce que le réseau est pourri. On est obligé de demander au device d’envoyer directement le bon niveau de compression.
Eloi 00:14:45 – 00:15:21 : Exactement. Ça, c’est quelque chose qui est… En fait, on ne s’en rend pas compte. Là, tu vois le point, mais la plupart des gens ne se rendent pas compte de toutes les problématiques engineering que ça donne. Par exemple, sur un appel de groupe, toi, tu vas envoyer ton flux audio-vidéo. Le serveur va l’envoyer au N-1 personne qui était dans le groupe. Chaque personne va envoyer son flux. Tu pourrais avoir le serveur qui met tous les flux ensemble et les envoie. Du coup, tu n’as qu’un flux à envoyer. Mais comme là, c’est l’encryption, tu ne peux pas fusionner les flux vidéo et audio de toutes les personnes ensemble, les N-1 personnes à qui tu parles, en un flux. Là, tu es obligé d’envoyer le flux N-1 flux à chaque personne.
Marc00:15:21 – 00:15:33 : Parce que quand on s’adresse à quelqu’un, on s’adresse à lui en ayant encodé avec sa clé publique. Et chaque interlocuteur a une clé publique différente. Oui. Donc on envoie autant de flux qu’il y a d’interlocuteurs.
Eloi 00:15:33 – 00:15:40 : On n’a pas d’autre moyen. Et tu décryptes avec ta clé private, ta private key, qui n’appartient qu’à toi et qui est sur ton device.
Marc00:15:40 – 00:15:48 : Donc en termes de volume de données sur un appel de groupe, ça fait autant de fois plus de données qu’il y a d’utilisateurs.
Eloi 00:15:48 – 00:15:59 : Oui, c’est ça. Du coup, tu ne peux pas faire ce genre de truc que tu disais où le serveur va changer le flux audio et vidéo pour changer la qualité intelligemment. Parce que ce client-là, il a vraiment un network horrible, etc.
Marc00:15:59 – 00:16:04 : Donc, on est obligé de prendre celui qui a le réseau le plus pourri et de s’adapter à lui.
Eloi 00:16:04 – 00:16:40 : Tout le monde aura une qualité. Du coup, là, justement, on développe des techniques pour éviter qu’il y ait un one-leg qui soit le bottleneck, que tu t’adaptes à la pire leg de ton call. Par exemple, pour faire ça, on va avoir, ça s’appelle simulcast, et c’est des techniques où chaque téléphone va envoyer plusieurs flux. Un flux HD, haute définition, et un flux low résolution. Et ensuite, le serveur va, en fonction du network de chaque personne, forward le bon flux. Du coup, les personnes qui sont en bon network, ils ne vont pas en pâtir que monsieur B, il est un network horrible. Donc voilà, c’est des techniques comme ça où le serveur peut intervenir, mais tout en ne touchant pas aux flux audio et vidéo, parce que dans tous les cas, pour lui, c’est du charabia.
Marc00:16:41 – 00:16:50 : Alors est-ce que tu peux nous donner un exemple de décision business concrète qui est prise grâce à l’analyse des données chez WhatsApp ?
Eloi 00:16:50 – 00:18:16 : Je vais aussi là encore prendre les appels WhatsApp comme exemple. Donc en fait, on a un dataset qu’on a build récemment d’ailleurs de le volume d’appels par zone géographique. C’est une espèce d’énorme matrice avec toutes les paires possibles de zones géographiques. Et voir lesquels s’appellent le plus. Est-ce que c’est entre New York et New Delhi ? Après, la granularité, c’est une zone géographique de type ville ou un peu plus gros qu’une ville. On n’est pas à traquer les gens, on ne peut pas savoir de toute façon. Sur Monsieur A et Monsieur B, ça s’appelle beaucoup, etc. Là, c’est deux zones géographiques qui s’appellent beaucoup. Et du coup, on utilise ces données pour… drive les futurs investissements dans notre infrastructure. Ça veut dire quoi ? Ça veut dire le prochain data center qu’on va créer, où est-ce qu’on va le créer ? On va peut-être le créer à cet endroit-là parce que la demande d’appels est très élevée et que du coup, comme on est proche des gens, on peut relayer les appels très rapidement et avoir une latency super bonne. Ça peut être des investissements sur le network. Est-ce qu’on va déployer de la fibre optique entre deux data centers ? Parce que ces deux data centers, on parle beaucoup entre eux. Il y a beaucoup de trafic entre les deux. Et ça, c’est juste une épingle. Je parle de l’appel WhatsApp, mais comme on partage cette infrastructure avec toutes les autres applications de Meta, ça peut être le download de vidéos, audio, tout ce que fait Meta, on est juste un input sur leur énorme capacity planning qui, à la fin, dit qu’on va investir des milliards dans tant de data centers et c’est des plans sur 3-4 ans. Il faut avoir du forecasting aussi sur le long terme.
Marc00:18:17 – 00:18:33 : Ok. Tu as dit que vous avez une information sur le trafic, mais vous ne pouvez pas savoir que M. A et M. B s’appellent régulièrement. Pourquoi ? Parce que ça, c’est l’information de qui appelle qui. Vous l’avez, peu importe le chiffrement.
Eloi 00:18:33 – 00:20:06 : Donc ça, en fait, c’est une information qu’on ne logue pas. Qui appelle qui ? En fait, on a l’information au moment où un appel a lieu. En gros, un appel peut avoir lieu et être lié de deux manières différentes. Soit tu appelles la personne et ça passe par public internet. Du coup, c’est juste une communication directe sans serveur au milieu. Ça, c’est quand tu as une connexion internet d’un certain type et que les deux personnes peuvent se découvrir sur internet et que la connexion directe est possible. Soit ça passe par un serveur et donc ça fait un triangle. En gros, c’est un serveur au milieu. Donc, du coup, en gros, quand ça passe par un serveur, le serveur, quand tu lui envoies des paquets audio et vidéo, il faut qu’il sache où est-ce qu’il va les envoyer. Donc, évidemment, il est obligé d’avoir l’information en Internet. Envoyer à quelqu’un, c’est une adresse IP. Donc, au moment d’un appel, on a les paires d’IP adresses, mais on ne peut pas savoir si c’est… Comment, en fait, cet IP, est-ce que c’est… M. A ou M. B ou M. C, on ne peut pas l’identifier. C’est pour ça que je dis qu’on ne sait pas qui appelle qui, parce qu’on sait quels IP s’appellent, parce que sinon, ça ne peut pas avoir lieu, mais on ne sait pas à qui correspondent, quels sont les utilisateurs derrière ces IP. Et même les couples d’IP qui se parlent, ça, ce n’est pas du tout logué. Comme je te disais, le dataset qu’on fait, c’est qu’on réduit la granularité pour passer à cette IP, elle correspond à cette zone géographique, je ne sais pas, métropole parisienne, voilà. Et ça, par exemple, on peut le logger. Donc à chaque fois, on essaie de logger quelque chose qui est dézoomé, agrégé, parce qu’en fait, on a juste besoin de savoir ça. On n’a pas besoin de savoir que ces deux IP, elles s’appellent beaucoup. Ça, c’est quelque chose qui est superflu. Et du coup, on veut toujours limiter notre collection de données à ce qui est utile à la fin pour la qualité de l’appel.
Marc00:20:07 – 00:20:15 : Et qu’est-ce qui fait que vous êtes dans la situation appel direct via Internet entre deux téléphones ou vous passez par un serveur WhatsApp au milieu ?
Eloi 00:20:15 – 00:21:01 : C’est des concepts un peu de networking. Est-ce que tu as un routeur qui, en fait, va rendre ton adresse locale invisible aux yeux du monde ? Et du coup, en gros, le peering entre les deux personnes direct, peer-to-peer, ne marche pas. Donc, en fait, c’est des types de… Ça s’appelle NAT. Le concept, c’est Network Address Translation. C’est… des routers qui vont transformer ton adresse en une adresse publiquement visible. Et en fait, cette transformation permet parfois de casser le lien P2P qui ne va pas être possible entre deux téléphones à cause de ce genre de translation. Et du coup, c’est pour ça que parfois, on a besoin d’un serveur au milieu qui, lui, va pouvoir relier les paquets audio et vidéo entre les deux participants. Et voilà, il y a environ, je pense qu’il y a entre 50 et 55 % des appels qui doivent passer par un serveur, quelque chose comme ça. D’accord.
Marc00:21:02 – 00:21:11 : Sinon, je suis chez moi, sur mon Wi-Fi, tu es chez toi sur ton Wi-Fi, on s’appelle via WhatsApp, c’est nos deux routeurs Wi-Fi qui communiquent en direct.
Eloi 00:21:12 – 00:21:49 : Ça peut être comme ça ou ça peut passer par le… Ça dépend aussi de ton internet provider. Par exemple, SFR peut faire quelque chose à… Parce que ça va passer par ton auteur et après ça va passer par le routeur central de SFR ou Orange ou je ne sais pas quoi. Et peut-être que là, ils vont faire quelque chose qui va break le peer-to-peer connection. Et du coup, à ce moment-là, en fait, on est toujours au début de l’appel. On va probe les deux peer-to-peer ou passer par le serveur. Et voilà, on prend celle qui marche et le serveur, on sait que ça va toujours marcher. Donc c’est pour ça qu’on a toujours un serveur. Et toutes les apps qui font du Voice over IP, donc VoIP, cette technologie d’appeler par Internet, utilisent ça parce qu’il n’y a pas de direct connection peer-to-peer.
Marc00:21:50 – 00:21:55 : C’est fiable. Alors quels sont les plus gros challenges que tu as connus chez WhatsApp depuis 4 ans ?
Eloi 00:21:55 – 00:23:06 : Je pense que, bon, globalement, c’est tous les challenges liés à être dans une très grosse boîte, même si WhatsApp, c’est quand même beaucoup plus petit que Meta. Mais quand même, il y a beaucoup de process, évidemment, beaucoup d’overhead là-dessus sur le temps qu’on va prendre à shipper des produits. Et je pense que les gens le voient, WhatsApp, ça évolue, mais ça prend plus de temps. On met plus de temps à avoir des nouveautés. Il y a plein de gens qui nous disent, mais alors, ça fait combien de temps qu’on veut WhatsApp sur iPad ? Et en fait, qu’est-ce que vous faites ? voilà mais bref et en fait ça prend beaucoup plus de temps parce qu’on est dans une grosse boîte mais aussi parce que on passe beaucoup de temps à être sûr que quand on shippe quelque chose c’est voilà ça marche c’est reliable c’est secure c’est safe etc. donc je pense ça peut être aussi un pain point de mettre du temps à shipper des trucs et parfois on voit les gens qui ont ils vont switcher sur d’autres apps parce qu’il manque quelque chose dans WhatsApp. ça peut être les sondages bon maintenant il y a les sondages mais ça ça met du temps à arriver. voilà donc ça. ça peut être une frustration mais mais c’est un compromis évidemment avec la qualité du produit et surtout la scale. quand on a un 2 milliards d’appels par jour ou 3 milliards d’utilisateurs par mois, on est obligé de fipper quelque chose qui marche et d’itérer beaucoup, beaucoup avant pour être sûr qu’on a un produit de qualité avant.
Marc00:23:06 – 00:23:22 : Et alors, quelles sont les particularités ? Tu es en train de m’en citer une finalement, mais de travailler dans une boîte où il y a autant de volumétrie de données, autant d’appels, autant d’SMS, autant de messages. Qu’est-ce que ça impose dans son travail ?
Eloi 00:23:22 – 00:24:48 : Donc en fait, quand il y a un volume pareil, déjà on a une grande responsabilité. Là, on est par exemple dans l’équipe sur les appels WhatsApp, le back-end, on est 12, même 10. Et voilà, donc quand on est d’astreinte, on sait qu’on est un peu responsable, qu’il faut que ça marche, etc. Donc il y a une responsabilité à cause de la scale. Il y a aussi… Le fait qu’il y ait autant de données, autant d’utilisateurs, on doit être d’autant plus rigoureux pour voir les petites régressions qui peuvent arriver sur un petit segment. Mais en fait, quand on dit petit segment, le segment, c’est des millions et des millions de personnes. Et donc, du coup, avoir les outils en place pour pouvoir détecter quand, par exemple, cette version iOS… et ne marche plus du tout parce qu’on a telle feature côté serveur qui est sortie, qui break, qui n’est pas backward compatible ou forward compatible. Et du coup, ça casse complètement les appels WhatsApp pour tel petit segment de personnes. Donc voilà, en fait, quand on a une scale pareille, voir des petites réactions comme ça, il faut qu’on ait les outils qui détectent ça. Et en fait, le problème, c’est que très rapidement, on peut avoir des faux positifs tout le temps. On va avoir des alertes sur tel petit segment qui ne va pas, etc. Et en fait… En fait, c’est faux positif, il nous tue aussi parce que du coup, on prête moins attention aux alertes qui arrivent. Donc, on est toujours obligé de fine-tune nos alertes pour être sûr qu’on a codé de choses positives. Donc voilà, ce fine-tuning, il est très dur à avoir quand tu as une scale pareille. Je dirais que c’est les deux responsabilités et aussi être sûr qu’on a un produit de qualité tout le temps sur tous les segments.
Marc00:24:48 – 00:24:55 : Et quelles sont les particularités du travail dans une société qui a un niveau de sensibilité de la donnée aussi fort ?
Eloi 00:24:55 – 00:26:40 : Pareil aussi, il y a une grande responsabilité sur les données qu’on a. Pour ça, il y a beaucoup de process qui sont en interne développés. C’est aussi un push avec toutes les régulations qu’il y a pu avoir. D’ailleurs, l’Union européenne est un exemple en poussant des régulations sur la protection des données, RGPD. Tout le temps, on a des audits de ce qu’on comply avec ces régulations. Mais en fait, on ne se contente pas juste d’être au niveau des régulations et de faire ce que les régulations nous disent. On va aussi beaucoup développer d’outils en interne qui vont permettre d’aller au-dessus du level de compliance qu’ils nous demandent et automatiser et réduire le risque de privacy leaks ou de tous les risques de privacy en général. par l’automation, parce qu’évidemment, on a tellement de scale, on a tellement d’ingénieurs qui peuvent développer des outils que le seul moyen de gagner et de mitiguer le risque, c’est d’avoir un peu d’automation là-dessus. Donc on va avoir, par exemple, des crawlers qui vont regarder tout ce qu’on log, toutes les bases de données, voir s’il y a des… données sensibles, les flaguer automatiquement, avoir directement le hand call, la personne d’astreinte dans la team, regarder si on a vraiment besoin de logger ça ou pas. A chaque fois qu’on lance un nouveau produit, ça peut être rajouter un bouton, ça peut être des tout petits trucs. On va avoir un process de privacy reviews où la personne doit décrire le produit, le feature, dire pour que le feature aille bien, qu’est-ce qu’on va logger comme données, pourquoi on les log, à quoi ces données vont servir ? Quelle est la rétention de ces données ? Et à chaque fois, il y a un comité d’experts qui va valider le projet. Et ça, c’est un prérequis pour maintenant tous nos projets. Et évidemment, ça nous ralentit un peu en tant qu’ingénieurs et en tant que time to market pour shipper les trucs. Mais c’est des garde-fous inestimables qui nous permettent d’assurer qu’on délivre un produit safe et private.
Marc00:26:40 – 00:26:59 : Sur le contenu du message, on sait qu’il est chiffré, mais est-ce qu’on peut en faire quelque chose ? Est-ce qu’il y a une utilité pour WhatsApp ? Est-ce que, par exemple, la taille, est-ce que le contenu a une utilité ou le chiffrement le rend complètement inutile ?
Eloi 00:26:59 – 00:27:36 : En tout cas, de ce que je sais, je ne pense pas qu’on ait aucune application sur le message. Mais c’est vrai qu’on a des données sur le message. On voit la taille des paquets qu’on relaie ou la taille des messages, etc. Mais est-ce qu’on en a à faire quelque chose ? Est-ce qu’on l’utilise pour quelque chose ? Je ne pense pas. En tout cas, dans les appels audio et vidéo, pour nous, c’est du charabia. Juste, on a le paquet audio, on le relaie à la personne à qui tu veux l’envoyer. On ne fait rien d’autre dessus ou à la limite, on va sélectionner le high-res ou le low-res en fonction du network de la personne. Mais on n’intervient pas dessus sur le content.
Marc00:27:37 – 00:27:40 : Alors, qu’est-ce que tu préfères dans ton métier ?
Eloi 00:27:40 – 00:28:35 : La scale, on en a parlé un peu au début. Chipper une ligne de code qui est exécutée des trillions de fois par seconde dans le monde entier, sur des milliers et des milliers de serveurs dans le monde entier, c’est un sentiment d’accomplissement assez important. Et puis aussi, le fait d’être sur des problèmes, avec une telle scale, on a des problèmes assez uniques. Je pense qu’il y a dans peu d’autres boîtes qu’on a et qui sont hyper intéressants à résoudre, Parce qu’un serveur qui crache, quand on en a des milliers, des milliers, des milliers, c’est quelque chose qui arrive tout le temps en fait. L’instant où on parle, il y a deux serveurs qui crachent parce que la température est trop haute dans le datacenter ou des trucs comme ça et on a un datacenter complet qui crache. Comment on fait pour être sûr que notre truc est robuste pour que les appels WhatsApp, bam, ils arrivent sur un autre datacenter automatiquement, ils détectent la faillure ? Et ça, c’est pour n’importe quel système, n’importe quelle feature de méta. Donc ça, c’est des problèmes hyper intéressants à résoudre.
Marc00:28:35 – 00:28:38 : Il y a pas mal de synergies, j’imagine, avec les autres fonctions de méta.
Eloi 00:28:38 – 00:28:39 : Ouais, ouais, ouais.
Marc00:28:39 – 00:28:42 : Il ne faut pas inventer chacun dans son coin.
Eloi 00:28:42 – 00:29:20 : Non, non. Le plus possible, on essaie d’avoir des abstractions communes. Si on a besoin de telles fonctionnalités, par exemple des détecteurs de séries temporelles pour détecter les changements subis, les drops ou les grosses augmentations. N’importe quel changement qui est bizarre par rapport à ce qu’on est habitué à avoir. Ça, c’est des modèles qui sont développés par une équipe et qui sont utilisés par n’importe quelle équipe dans Meta et WhatsApp y compris. pour alerter les gens de call au bon moment. Évidemment, il y a plein d’équipes meta-wide qui développent des produits qui sont utilisés par tous les produits de meta.
Marc00:29:20 – 00:29:22 : Quels sont les plus grands points de douleur ?
Eloi 00:29:22 – 00:30:00 : Les plus grands points de douleur ? Je reviens à ce que je disais au début, c’est peut-être notre time to market qui est assez… Ça peut être un peu plus lent que dans les petites boîtes, évidemment, et c’est normal, c’est un trade-off. On ne peut pas tout avoir, on ne peut pas avoir un énorme scale et shipper des trucs super rapidement qui marchent directs. Donc ça, ça serait peut-être le plus gros pain point, qui n’est en fait pas trop un pain point finalement, mais je pense qu’on pourrait peut-être faire mieux et shipper plus vite en tout cas du côté de WhatsApp. Mais voilà, il y a tout un effort côté engineering pour qu’est-ce qui nous ralentit, comment on peut faire en sorte d’avoir une culture pour shipper plus vite tout en restant fidèle à nos valeurs, reliable. Ça serait la première valeur qui pourrait être impactée par augmenter la vitesse. Mais voilà, c’est un work in progress.
Marc00:30:00 – 00:30:04 : Ok, alors est-ce que tu as une anecdote à nous partager ?
Eloi 00:30:04 – 00:30:52 : Par exemple, comme on commence la nouvelle année 2024, chaque année, pour WhatsApp et même aussi pour les autres apps comme Messenger, le momentÇa, ça dépend des pays. le plus chaud de l’année, c’est quand même le nouvel an. Comme ça fait 4 ans que je suis à WhatsApp, ça fait 4 ans que mes nouvels ans, j’ai toujours un oeil sur l’ordinateur et quand parfois, même certains nouvels ans, je suis carrément d’astreinte et je suis… Responsable du nouvel an. Mais voilà ce qui fait que le nouvel an est un moment où c’est un stress test ultime pour notre produit, pour notre infrastructure. Et on voit des pics de consommation, d’utilisation de WhatsApp et Messenger aussi qui sont de l’ordre du 5x, 6x sur une petite time window de 10 minutes où tout le monde va commencer à s’appeler, tout le monde va s’envoyer des messages, va s’envoyer des gifs de bonne année dans le monde entier.
Marc00:30:52 – 00:30:53 : 6 fois plus qu’en moyenne.
Eloi 00:30:54 – 00:31:26 : Ouais, avec le day over day, la comparaison, le jour avant à la même heure, par exemple. Il y a des pays qui font sur WhatsApp, comme l’Inde, le Brésil, etc. Et d’autres, c’est un peu moins le cas. Mais on a de la chance qu’on n’ait pas une seule time zone. Heureusement, chacun célèbre son nouvel an à des moments différents. Donc, on ne se prend pas un énorme pic une seule fois. Mais quand même, quand l’Inde célèbre son nouvel an, on se tient à la table, on croise les doigts et on regarde les chiffres. Et à chaque fois, on est impressionné.
Marc00:31:26 – 00:31:34 : Mais alors qu’est-ce qui peut mal se passer, ou qui s’est déjà mal passé dans ce genre de situation, qui du coup te demande une action ?
Eloi 00:31:34 – 00:33:40 : Par exemple, on a déjà eu par exemple un problème, je pense que c’était il y a 2-3 ans, où on a eu beaucoup plus d’appels de groupe que d’appels 101 pendant le nouvel an. Et en fait on avait fait toutes nos projections de capacité, parce qu’évidemment on a une préparation pour le nouvel an, on sait que… On a des data scientists qui bossent avec nous, qui nous disent qu’on peut s’attendre à un 6x, 7x peak en Inde, dans ces clusters-là en Inde. Du coup, on sait à peu près à quoi s’attendre, sauf qu’à chaque fois, on se déforecaste sur le trafic total. Sauf que le problème, c’est qu’en fait, les appels de groupe et les appels 101, ce n’est pas du tout la même histoire. Un appel de groupe est beaucoup plus complexe, demande beaucoup plus de ressources côté serveur. Même côté client, mais on s’en fiche parce que les clients sont distribués, chacun fait son truc. Mais côté serveur, ça nous demande beaucoup plus de complexité. Et du coup, rajouter une personne sur un appel de groupe, ça scale exponentiellement en termes de complexité, en termes de mémoire, CPU, etc. Et en fait, notre traffic mix entre 1&1 et groupe, Normalement, on va dire 7 % d’appels, c’est des appels de groupe, un truc comme ça. Pendant le nouvel an, c’est passé à, je ne sais pas, je dis des chiffres comme ça, je ne m’en rappelle plus, mais 25 % d’appels de groupe. Du coup, notre increase, que les appels de groupe sont beaucoup plus expansifs, ça a fait craquer certains serveurs. Du coup, certains appels de groupe sur certaines zones géographiques, on n’a pas pu les honorer. C’est des trucs comme ça où généralement, on ne peut pas faire grand-chose sur le moment parce qu’on parle de quelques minutes. Mais en fait, ce qu’on veut absolument éviter, c’est les cascading failures. En gros, il y a un truc qui crache et ça fait tout cracher, effet domino. Du coup, on arrive à notre infrastructure et notre produit dans un état qui fait qu’on ne peut plus fonctionner correctement et ça impacte la prochaine heure d’appel, toutes les deux prochaines heures, etc. On veut absolument construire nos systèmes pour qu’ils soient résilients sur ça et qu’automatiquement ils puissent recover de ce genre de crash et qu’ils soient très distribués et très indépendants par rapport à ça. L’objectif à la fin, c’est de ne rien avoir à faire, rien avoir à grader et faire en sorte que tout marche bien.
Marc00:33:40 – 00:33:45 : Et alors, pendant le Covid, tu avais une anecdote à raconter ?
Eloi 00:33:45 – 00:34:23 : Oui, aussi, un autre truc intéressant, c’est pareil sur les usages de WhatsApp. Pendant le Covid, ça a commencé en 2019, 2020, je ne sais plus. Il y a eu des pics d’usages qu’on avait d’un coup. Évidemment, on n’avait pas du tout prévu. Le Covid en tout cas déjà et on a vu pareil comme un nouvel an mais un nouvel an long quoi, encore pire. Et donc là pour le coup c’était pas le passage à Noël année qui créait les pics d’usage, c’était les décrets de confinement. Donc quand l’Italie a commencé à dire confinement pour tout le monde… Bam, on voit le truc.
Marc00:34:23 – 00:34:24 : Dans les minutes qui ont suivi…
Eloi 00:34:24 – 00:35:22 : Peut-être pas dans les minutes, mais au moins, la granularité, c’est pour être le jour. On voit clairement un énorme shift. Pareil en France. Et donc voilà, on voyait chaque pays, vraiment, on regarde le graphe, on peut dire, OK, on sait quand est-ce qu’a été prononcé le… L’ordre du confinement. Et en fait, ça a été un grand moment pour nous parce qu’on a… Déjà, on sentait qu’on pouvait connecter les gens à distance et donc c’était une mission encore plus importante à l’époque. Et aussi, en tout cas, on le voit dans les stats, ça nous a permis de prendre des parts de marché aussi et aussi changer le comportement des gens qui peuvent utiliser plus souvent les appels vidéo, faire plus souvent des appels de groupe et donc ça a enclenché une dynamique qu’on aurait peut-être pas pu avoir, ou en tout cas qu’on aurait peut-être pu avoir avec un énorme prix d’acquisition, qu’on a eu gratuitement, grâce, il faut trouver au moins quelque chose de positif au Covid, grâce à ça. Et puis d’un côté ingénierie, c’était un grand moment parce que d’un coup, on a dû rajouter des serveurs et faire en sorte que ça marche. Il y a eu un sentiment d’urgence assez intéressant.
Marc00:35:22 – 00:35:28 : Tu me parlais de matchs de foot pendant lesquels on peut aussi voir en fonction de l’audience le score.
Eloi 00:35:29 – 00:36:08 : Oui, après la Coupe du Monde, je regardais un peu nos graphes. On a des graphes de trafic par pays, nombre d’appels, messages, etc. Et en fait, je regardais pour rigoler juste le graphe Argentine-France pour la Coupe du Monde. C’est un peu de mauvais souvenir, mais en fait, on voit des dents de scie à chaque but. Mi-temps, une énorme dent de scie. Et donc évidemment, quand je dis dent de scie, c’est un pic d’usage au moment où la mi-temps commence. Au moment où il y a un but, tir au but pareil, on voit des petites dents de scie avec des bits un peu plus petits parce que c’est plus high frequency. Et voilà, donc vraiment on peut regarder le graphe et se dire, il y a 4-3, il y a 3-0.
Marc00:36:08 – 00:36:12 : On peut connaître l’équipe, comment tu sais quelle équipe a marqué ?
Eloi 00:36:12 – 00:36:25 : Tu vois l’équipe qui marque, généralement un énorme dents de scie, plus élevé que l’équipe qui prend le but. Tu vois quand même l’équipe qui prend le but, une augmentation de trafic. Mais voilà, en regardant les deux time series, tu peux voir qui a marqué et qui n’a pas marqué.
Marc00:36:25 – 00:36:31 : On célèbre plus qu’on va s’appeler pour dire qu’on a la haine contre le joueur ou contre l’équipe.
Eloi 00:36:31 – 00:36:43 : C’est ça, on est plus positif. On a besoin de plus partager quand quelque chose de bien arrive, j’ai l’impression. En tout cas, dans les matchs de foot. C’est une petite anecdote, mais on le voyait avec tous les pays. Chaque match de Coupe du Monde, un engagement énorme.
Marc00:36:43 – 00:36:45 : Quels sont tes prochains chantiers chez WhatsApp ?
Eloi 00:36:45 – 00:37:38 : Là, on a pas mal de projets autour d’augmenter la qualité des appels. Ça passe aussi par comment on route les trafics entre le paquet audio et vidéo. Quelle est sa journey ? Où est-ce qu’il va aller ? Par quel serveur ? Comment on optimise ça ? Parce qu’on a des serveurs dans le monde entier. Comment on te donne, en fait, quand tu commences un appel, on va te donner un pool de serveurs que tu peux utiliser pour passer ton appel. Et après, les clients, ils vont choisir, ils vont avoir un algorithme de distribuer entre les deux clients pour sélectionner le meilleur serveur. Donc là, on a tout un projet. Donc comment on va améliorer notre sélection de serveurs pour améliorer la qualité de l’appel ? Le mieux, c’est le serveur qui est le plus proche de toi. Et parfois, le serveur le plus proche, ce n’est pas le meilleur non plus parce que les deux serveurs que tu veux utiliser ne sont pas bien connectés, etc. Donc bref, on a un peu des problèmes de graphes pour router. nos appels au bon endroit pour améliorer la qualité en général.
Marc00:37:38 – 00:37:40 : D’accord. Bon courage et merci Eloi.
Eloi 00:37:40 – 00:37:41 : Merci Marc.
Marc00:37:41 – 00:37:47 : Vous venez d’entendre Eloi Morlas, software engineer chez WhatsApp sur Data Driven 101. Merci d’avoir écouté.