Comment connecter des utilisateurs dans plusieurs régions : des appels qui restent proches de chacun

Un appel vidéo qui fonctionne bien en test peut se comporter autrement une fois vos utilisateurs répartis dans le monde. Deux personnes à Singapour se coupent la parole, un appel de groupe avec quelqu’un au Canada se fige pour cette personne seulement, et une diffusion en direct s’interrompt pour charger chez les spectateurs de l’autre côté d’un océan. Le code est le même pour tous. Ce qui change, c’est la distance entre chaque personne et le serveur par lequel passe l’appel.
Cet article explique pourquoi la distance compte dans un appel, ce qu’il faut pour garder chaque personne près d’un serveur, pour les appels entre deux personnes, les appels de groupe et les diffusions en direct, et ce qui peut rester à un seul endroit.
Pourquoi la distance compte dans un appel
Dans une fibre optique, la lumière parcourt environ 200 kilomètres par milliseconde, et les routes réelles sont plus longues qu’une ligne droite. Un paquet met environ 160 millisecondes pour faire l’aller-retour entre Singapour et Francfort, et environ 280 pour l’aller-retour entre Sydney et Francfort.
Une conversation y est sensible. Quand ce que dit quelqu’un met plus d’environ 150 millisecondes à parvenir à l’oreille de l’autre, les gens commencent à se couper la parole et à attendre des réponses qui sont déjà en route. L’encodage, le réseau et le tampon de gigue de chaque appareil ajoutent leur part avant même que la distance n’ajoute la sienne.
Un appel qui passe par un serveur fait deux trajets : de la première personne jusqu’au serveur, puis du serveur jusqu’à la seconde. Placez le serveur à Francfort, et deux personnes à Singapour envoient chacune tout vers l’Europe et retour, si bien que ce qu’elles disent arrive bien au-delà de cette limite confortable, alors qu’elles vivent dans la même ville. Placez le serveur à Singapour, et le même appel ne prend que quelques millisecondes.
Pour toute application dont les utilisateurs se trouvent dans plus d’une région, la question est donc de savoir par quel serveur passe chaque appel, et à quelle distance il se trouve des personnes qui y participent.
Les appels entre deux personnes
Un appel entre deux personnes passe directement entre leurs appareils quand c’est possible, sans serveur au milieu. La distance qui les sépare est alors le seul délai, et rien ne la raccourcit.
Quand un pare-feu bloque le chemin direct, l’appel passe par un relais TURN (notre article sur les serveurs STUN et TURN explique pourquoi). Avec un seul relais dans une seule région, tous les appels relayés y passent, et deux personnes en Asie dont les réseaux ont besoin d’un relais se parlent donc via l’Europe.
La solution est un relais dans chaque région où se trouvent vos utilisateurs, chaque appareil utilisant le plus proche :
- Un seul nom, résolu selon la région. Pour chaque appareil, le nom du relais pointe vers la région la plus proche, d’après la latence ou d’après la provenance de la requête. L’appareil n’a rien à régler, et une nouvelle région sert ses utilisateurs dès que ses relais répondent à ce nom.
- Des identifiants que chaque région accepte. Les identifiants de relais sont en général créés par votre serveur à partir d’un secret qu’il partage avec les relais. Chaque région les vérifie de la même façon, si bien qu’un appareil peut utiliser le relais qu’il joint, quel qu’il soit.
- Les ports du web dans chaque région. Le port 3478 en UDP pour la plupart des réseaux, et le 443 avec TLS pour les réseaux qui n’autorisent que le trafic web, avec un certificat pour chaque nom.
Avec un relais près de chaque appareil, un appel relayé reste proche de l’appel direct, quels que soient les deux pays qu’il relie.
Les appels de groupe : un serveur multimédia, ou un par région
Un appel de groupe tourne sur un serveur multimédia : chaque personne lui envoie une seule fois sa voix et son image, et il les transmet à tous les autres, dans la qualité qu’affiche chaque écran (notre article Comment fonctionnent les appels vidéo de groupe l’explique). La façon la plus simple d’en faire tourner un est un serveur par appel : l’appel s’ouvre sur un serveur, dans la région de la première personne arrivée, et tout le monde rejoint ce serveur.
Cela fonctionne tant que tous les participants se trouvent dans la même partie du monde. Avec des personnes sur deux continents, une partie d’entre elles est loin du serveur, et chaque voix et chaque image qu’elles envoient et reçoivent prend le long chemin.
La solution est de répartir un même appel sur des serveurs de plusieurs régions :
- Chaque personne rejoint un serveur de sa propre région, le plus proche, et y envoie une seule fois sa voix et son image.
- Les serveurs se passent chaque piste. Une image passe d’une région à l’autre une fois pour chaque serveur qui en a besoin, et non une fois par personne qui la regarde, puis elle atteint chacun depuis le serveur de sa propre région.
- Seul ce qui est regardé voyage. Une piste que personne ne regarde dans une région n’y est pas envoyée, et chaque région ne reçoit que la qualité dans laquelle ses participants l’affichent.
- Les serveurs tiennent un seul appel. Qui y participe, qui parle, qui partage son écran et quand il se termine sont les mêmes sur chaque serveur, si bien que les participants voient un seul appel, et non plusieurs appels raccordés entre eux.
- Des liaisons entre régions qui tiennent bon. Les pistes circulent entre les régions par des liaisons privées ou des tunnels chiffrés, et les paquets perdus y sont redemandés, si bien qu’une liaison entre continents ne se transforme pas en images figées.
Deux personnes à Varsovie et deux à Montréal parlent alors chacune via un serveur proche d’elles, et une seule copie de chaque piste traverse l’Atlantique.
Les diffusions en direct
Une diffusion en direct pose le même problème, avec un seul émetteur et de nombreux récepteurs. L’hôte envoie l’image à un serveur proche de lui, et chaque spectateur regarde depuis un serveur de sa propre région, qui reçoit le flux une seule fois du serveur de l’hôte et le sert à tous ceux qui regardent dans cette région. Un public réparti dans de nombreux pays est alors servi au plus près de chaque spectateur, et aucun spectateur ne dépend d’un serveur à l’autre bout du monde.
Ce qui peut rester dans une seule région
Tout n’a pas besoin d’être proche. Les messages de chat, la présence, les indicateurs de saisie et les autres événements d’une application sont légers, et un message qui arrive 100 millisecondes plus tard qu’il ne le pourrait passe inaperçu. Les garder dans une seule région garde leur ordre et leur historique simples, ce qui compte davantage que les millisecondes.
La répartition habituelle est donc la suivante : les médias près de chaque personne, et les événements à un seul endroit.
Comment connecter des utilisateurs dans plusieurs régions : la check-list
- Regardez où se trouvent vos utilisateurs. Les pays d’où ils appellent vous disent de quelles régions vous avez besoin en premier.
- Placez des relais dans chacune de ces régions, derrière un seul nom résolu selon la région, avec des identifiants que chaque région accepte, sur le port 443 en plus du 3478.
- Répartissez chaque appel de groupe et chaque diffusion en direct sur plusieurs régions, avec chaque personne sur un serveur proche d’elle et chaque piste qui passe une seule fois d’une région à l’autre, seulement tant qu’elle est regardée.
- Gardez les appels en cours pendant que les serveurs changent. Un serveur retiré pour maintenance déplace d’abord ses appels vers un autre, et personne ne raccroche.
- Gardez les événements dans une seule région, sauf si votre application a une raison de faire autrement.
Aucune de ces tâches n’est petite : chaque région, ce sont des serveurs à faire tourner, à mettre à jour, à surveiller et à faire grandir, et les liaisons entre elles forment un réseau à part entière.
Comment WordPlus Cloud connecte vos utilisateurs
WordPlus Cloud fait tourner tout cela, et votre application n’a jamais à choisir une région :
- Nos relais d’appels et nos serveurs multimédias tournent en Allemagne, en France, au Royaume-Uni, en Pologne, au Canada et à Singapour, et viendront ensuite les États-Unis, l’Australie, l’Inde et l’Italie. La page Comment nous connectons vos utilisateurs les montre sur une carte.
- Chaque appareil joint la région la plus proche, grâce à un seul nom résolu selon la latence. Un appel entre deux personnes passe directement entre les appareils quand c’est possible, par le relais le plus proche de chaque personne quand un pare-feu l’en empêche, et par nos serveurs multimédias quand même les relais n’y parviennent pas, sans raccrocher.
- Chaque personne dans un appel de groupe ou une diffusion en direct rejoint un serveur multimédia de sa propre région, et nos serveurs se passent chaque piste d’une région à l’autre par des liaisons privées, une fois pour chaque serveur qui en a besoin, et seulement tant que quelqu’un la regarde là-bas.
- Un serveur retiré pour maintenance déplace d’abord ses appels vers un autre, et leurs participants continuent de parler.
- Les messages et les événements passent par nos serveurs temps réel en Allemagne, qui grandissent avec le trafic. Des serveurs edge dans d’autres régions arrivent pour rapprocher aussi les événements de vos utilisateurs.
Les appels entre deux personnes sont chiffrés de bout en bout sur chaque chemin, et c’est toujours votre serveur qui décide qui peut appeler qui. Cela fonctionne de la même façon dans Better Messages sur WordPress et dans vos propres applications, depuis Next.js, Laravel, Django et d’autres piles, avec nos SDK. La page Appels vidéo et appels de groupe pour votre application montre ce que vous apportent les SDK.